#include <WINSOCK2.H>
#include <STDIO.H>
#include "opencv2/opencv.hpp"
#pragma comment(lib,"ws2_32.lib")
using namespace cv;
typedef struct socket_info
{
SOCKET sclient;
sockaddr_in
sin;
int len;
}Socket_Udp_Client_Info;
typedef struct socket_info_tcp
{
SOCKET sclient;
}Socket_Tcp_Client_Info;
Socket_Udp_Client_Info * initUdpClient()
{
Socket_Udp_Client_Info * mSocketInfo = (Socket_Udp_Client_Info *)
malloc(
sizeof(Socket_Udp_Client_Info));
WORD socketVersion = MAKEWORD(
2,
2);
WSADATA wsaData;
if (WSAStartup(socketVersion, &wsaData) !=
0)
{
return 0;
}
mSocketInfo->sclient = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
mSocketInfo->
sin.sin_family = AF_INET;
mSocketInfo->
sin.sin_port = htons(
8888);
mSocketInfo->
sin.sin_addr.S_un.S_addr = inet_addr(
"127.0.0.1");
mSocketInfo->len =
sizeof(mSocketInfo->
sin);
return mSocketInfo;
}
void unitUdpClient(Socket_Udp_Client_Info * mSocketInfo)
{
closesocket(mSocketInfo->sclient);
WSACleanup();
}
Socket_Tcp_Client_Info * initTcpClient()
{
Socket_Tcp_Client_Info * mSocketInfo = (Socket_Tcp_Client_Info *)
malloc(
sizeof(Socket_Tcp_Client_Info));
WORD sockVersion = MAKEWORD(
2,
2);
WSADATA data;
if (WSAStartup(sockVersion, &data) !=
0)
{
return 0;
}
mSocketInfo->sclient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (mSocketInfo->sclient == INVALID_SOCKET)
{
printf(
"invalid socket !");
return 0;
}
sockaddr_in serAddr;
serAddr.sin_family = AF_INET;
serAddr.sin_port = htons(
8888);
serAddr.sin_addr.S_un.S_addr = inet_addr(
"127.0.0.1");
if (connect(mSocketInfo->sclient, (sockaddr *)&serAddr,
sizeof(serAddr)) == SOCKET_ERROR)
{
printf(
"connect error !");
closesocket(mSocketInfo->sclient);
return 0;
}
return mSocketInfo;
}
void unitTcpClient(Socket_Tcp_Client_Info * mSocketInfo)
{
closesocket(mSocketInfo->sclient);
WSACleanup();
}
int main()
{
Socket_Udp_Client_Info * mSocketUdpClientInfo = initUdpClient();
Socket_Tcp_Client_Info * mSocketTcpClientInfo = initTcpClient();
cv::VideoCapture capture(
0);
cv::Mat imageTemp;
capture >> imageTemp;
int info[
3];
int ret =
0;
int flag =
0;
info[
0] = imageTemp.cols;
info[
1] = imageTemp.rows;
info[
2] = imageTemp.channels();
ret = send(mSocketTcpClientInfo->sclient, (
char *)info,
sizeof(
int) *
3,
0);
if (ret ==
sizeof(
int) *
3)
{
printf(
"client send width height channel succeed \n");
}
recv(mSocketTcpClientInfo->sclient, (
char *)(&flag),
sizeof(
int),
0);
if (flag ==
1)
{
printf(
"client dui fang succeed recevied \n");
}
printf(
"Image size: [%d %d]\n", imageTemp.cols, imageTemp.rows);
while (
1)
{
capture >> imageTemp;
ret = send(mSocketTcpClientInfo->sclient, (
char *)(imageTemp.data), imageTemp.cols * imageTemp.rows * imageTemp.channels(),
0);
printf(
"ret = %d \n", ret);
imshow(
"send", imageTemp);
cv::waitKey(
30);
}
return 0;
}
#include <stdio.h>
#include <winsock2.h>
#pragma comment(lib,"ws2_32.lib")
#include "opencv2/opencv.hpp"
using namespace cv;
typedef struct socket_info
{
SOCKET serSocket;
int numClient;
sockaddr_in remoteAddr[
10];
int nAddrLen[
10];
}Socket_Udp_Server_Info;
typedef struct socket_info_tcp
{
SOCKET slisten;
int numClient;
SOCKET sClient[
10];
sockaddr_in remoteAddr[
10];
}Socket_Tcp_Server_Info;
Socket_Udp_Server_Info * initUdpServer()
{
int i =
0;
Socket_Udp_Server_Info * mSocketInfo = (Socket_Udp_Server_Info *)
malloc(
sizeof(Socket_Udp_Server_Info));
WSADATA wsaData;
WORD sockVersion = MAKEWORD(
2,
2);
if (WSAStartup(sockVersion, &wsaData) !=
0)
{
return 0;
}
mSocketInfo->serSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (mSocketInfo->serSocket == INVALID_SOCKET)
{
printf(
"socket error !");
return 0;
}
sockaddr_in serAddr;
serAddr.sin_family = AF_INET;
serAddr.sin_port = htons(
8888);
serAddr.sin_addr.S_un.S_addr = INADDR_ANY;
if (bind(mSocketInfo->serSocket, (sockaddr *)&serAddr,
sizeof(serAddr)) == SOCKET_ERROR)
{
printf(
"bind error !");
closesocket(mSocketInfo->serSocket);
return 0;
}
else
{
printf(
"bind succeed ! \n");
}
mSocketInfo->nAddrLen[
0] =
sizeof(sockaddr_in);
return mSocketInfo;
}
void unitUdpServer(Socket_Udp_Server_Info * mSocketInfo)
{
closesocket(mSocketInfo->serSocket);
WSACleanup();
}
Socket_Tcp_Server_Info * initTcpServer()
{
int i =
0;
Socket_Tcp_Server_Info * mSocketInfo = (Socket_Tcp_Server_Info *)
malloc(
sizeof(Socket_Tcp_Server_Info));
mSocketInfo->numClient =
1;
WORD sockVersion = MAKEWORD(
2,
2);
WSADATA wsaData;
if (WSAStartup(sockVersion, &wsaData) !=
0)
{
return 0;
}
mSocketInfo->slisten = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (mSocketInfo->slisten == INVALID_SOCKET)
{
printf(
"socket error !");
return 0;
}
sockaddr_in
sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(
8888);
sin.sin_addr.S_un.S_addr = INADDR_ANY;
if (bind(mSocketInfo->slisten, (LPSOCKADDR)&
sin,
sizeof(
sin)) == SOCKET_ERROR)
{
printf(
"bind error !");
}
if (listen(mSocketInfo->slisten,
5) == SOCKET_ERROR)
{
printf(
"listen error !");
return 0;
}
int nAddrlen =
sizeof(mSocketInfo->remoteAddr[
0]);
for (i =
0; i <
1; i++)
{
mSocketInfo->sClient[i] = accept(mSocketInfo->slisten, (SOCKADDR *)&mSocketInfo->remoteAddr[i], &nAddrlen);
if (mSocketInfo->sClient[i] == INVALID_SOCKET)
{
printf(
"accept error !");
continue;
}
else
{
printf(
"accept success 接收到一个连接 ! \n");
}
}
return mSocketInfo;
}
void unitTcpServer(Socket_Tcp_Server_Info * mSocketInfo)
{
closesocket(mSocketInfo->slisten);
for (
int i =
0; i < mSocketInfo->numClient; i++)
{
closesocket(mSocketInfo->sClient[i]);
}
WSACleanup();
}
int main()
{
Socket_Udp_Server_Info * mSocketUdpServerInfo = initUdpServer();
Socket_Tcp_Server_Info * mSocketTcpServerInfo = initTcpServer();
int info[
3];
int flag =
0;
int ret =
0;
recv(mSocketTcpServerInfo->sClient[
0], (
char *)info,
sizeof(
int) *
3,
0);
int width = info[
0];
int height = info[
1];
int channel = info[
2];
int bufferSize = width * height * channel;
flag =
1;
ret = send(mSocketTcpServerInfo->sClient[
0], (
char *)(&flag),
sizeof(
int),
0);
if (ret ==
sizeof(
int))
{
printf(
"flag re succeed \n");
}
char * revBuffer = (
char *)
malloc(
sizeof(
char) * bufferSize);
Mat reviMat = Mat(height, width, CV_8UC3);
while (
1)
{
ret = recv(mSocketTcpServerInfo->sClient[
0], revBuffer, bufferSize,
0);
printf(
"server ret = %d \n", ret);
if (ret == bufferSize)
{
memcpy(reviMat.data, revBuffer, bufferSize);
imshow(
"revice", reviMat);
waitKey(
2);
}
}
return 0;
}