visual studio 中UDP 服务器端和tcp客户端示例
2016-05-18 17:52
393 查看
bool data_coll(const char* msg, char* err)
{
WSADATA wsd;
SOCKET s;
int nRet;
// 初始化套接字动态库
if(WSAStartup(MAKEWORD(2,2),&wsd) != 0)
{
printf("WSAStartup failed !\n");
return 1;
}
// 创建套接字
s = socket(AF_INET,SOCK_DGRAM,0);
if(s == INVALID_SOCKET)
{
printf("socket() failed ,Error Code:%d\n",WSAGetLastError());
WSACleanup();
return 1;
}
SOCKET socketSrv = socket(AF_INET,SOCK_DGRAM,0);
SOCKADDR_IN addrSrv;
SOCKADDR_IN addrClient;
char buf[BUF_SIZE];
int len = sizeof(SOCKADDR);
// 设置服务器地址
ZeroMemory(buf,BUF_SIZE);
addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(9999);
cout<<"begin to bind "<<endl;
// 绑定套接字
nRet = bind(socketSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
if(SOCKET_ERROR == nRet)
{
printf("bind failed !\n");
closesocket(s);
WSACleanup();
return -1;
}
// 从客户端接收数据
nRet = recvfrom(socketSrv,buf,BUF_SIZE,0,(SOCKADDR*)&addrClient,&len);
if(SOCKET_ERROR == nRet)
{
printf("recvfrom failed !\n");
closesocket(s);
WSACleanup();
return -1;
}
// 打印来自客户端发送来的数据
printf("Recv From Client:%s\n",buf);int i;cin>> i;
// 向客户端发送数据
sendto(socketSrv,"UDP Hello World !",sizeof("UDP Hello World !"),0,(SOCKADDR*)
&addrClient,len);
closesocket(s);
WSACleanup();
return 0;
}
bool data_coll(const char* msg, char* err)
{
WSADATA Ws;
SOCKET ClientSocket;
struct sockaddr_in ServerAddr;
int Ret = 0;
int AddrLen = 0;
HANDLE hThread = NULL;
char SendBuffer[MAX_PATH];
//Init Windows Socket
if ( WSAStartup(MAKEWORD(2,2), &Ws) != 0 )
{
cout<<"Init Windows Socket Failed::"<<GetLastError()<<endl;
return -1;
}
//Create Socket
ClientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if ( ClientSocket == INVALID_SOCKET )
{
cout<<"Create Socket Failed::"<<GetLastError()<<endl;
return -1;
}
ServerAddr.sin_family = AF_INET;
ServerAddr.sin_addr.s_addr = inet_addr(IP_ADDRESS);
ServerAddr.sin_port = htons(PORT);
memset(ServerAddr.sin_zero, 0x00, 8);
Ret = connect(ClientSocket,(struct sockaddr*)&ServerAddr, sizeof(ServerAddr));
if ( Ret == SOCKET_ERROR )
{
while(1)
cout<<"Connect Error::"<<GetLastError()<<endl;
return -1;
}
while ( true )
{
cin.getline(SendBuffer, sizeof(SendBuffer));
Ret = send(ClientSocket, SendBuffer, (int)strlen(SendBuffer), 0);
if ( Ret == SOCKET_ERROR )
{
cout<<"Send Info Error::"<<GetLastError()<<endl;
break;
}
}
closesocket(ClientSocket);
WSACleanup();
return true;
}
{
WSADATA wsd;
SOCKET s;
int nRet;
// 初始化套接字动态库
if(WSAStartup(MAKEWORD(2,2),&wsd) != 0)
{
printf("WSAStartup failed !\n");
return 1;
}
// 创建套接字
s = socket(AF_INET,SOCK_DGRAM,0);
if(s == INVALID_SOCKET)
{
printf("socket() failed ,Error Code:%d\n",WSAGetLastError());
WSACleanup();
return 1;
}
SOCKET socketSrv = socket(AF_INET,SOCK_DGRAM,0);
SOCKADDR_IN addrSrv;
SOCKADDR_IN addrClient;
char buf[BUF_SIZE];
int len = sizeof(SOCKADDR);
// 设置服务器地址
ZeroMemory(buf,BUF_SIZE);
addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(9999);
cout<<"begin to bind "<<endl;
// 绑定套接字
nRet = bind(socketSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
if(SOCKET_ERROR == nRet)
{
printf("bind failed !\n");
closesocket(s);
WSACleanup();
return -1;
}
// 从客户端接收数据
nRet = recvfrom(socketSrv,buf,BUF_SIZE,0,(SOCKADDR*)&addrClient,&len);
if(SOCKET_ERROR == nRet)
{
printf("recvfrom failed !\n");
closesocket(s);
WSACleanup();
return -1;
}
// 打印来自客户端发送来的数据
printf("Recv From Client:%s\n",buf);int i;cin>> i;
// 向客户端发送数据
sendto(socketSrv,"UDP Hello World !",sizeof("UDP Hello World !"),0,(SOCKADDR*)
&addrClient,len);
closesocket(s);
WSACleanup();
return 0;
}
bool data_coll(const char* msg, char* err)
{
WSADATA Ws;
SOCKET ClientSocket;
struct sockaddr_in ServerAddr;
int Ret = 0;
int AddrLen = 0;
HANDLE hThread = NULL;
char SendBuffer[MAX_PATH];
//Init Windows Socket
if ( WSAStartup(MAKEWORD(2,2), &Ws) != 0 )
{
cout<<"Init Windows Socket Failed::"<<GetLastError()<<endl;
return -1;
}
//Create Socket
ClientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if ( ClientSocket == INVALID_SOCKET )
{
cout<<"Create Socket Failed::"<<GetLastError()<<endl;
return -1;
}
ServerAddr.sin_family = AF_INET;
ServerAddr.sin_addr.s_addr = inet_addr(IP_ADDRESS);
ServerAddr.sin_port = htons(PORT);
memset(ServerAddr.sin_zero, 0x00, 8);
Ret = connect(ClientSocket,(struct sockaddr*)&ServerAddr, sizeof(ServerAddr));
if ( Ret == SOCKET_ERROR )
{
while(1)
cout<<"Connect Error::"<<GetLastError()<<endl;
return -1;
}
while ( true )
{
cin.getline(SendBuffer, sizeof(SendBuffer));
Ret = send(ClientSocket, SendBuffer, (int)strlen(SendBuffer), 0);
if ( Ret == SOCKET_ERROR )
{
cout<<"Send Info Error::"<<GetLastError()<<endl;
break;
}
}
closesocket(ClientSocket);
WSACleanup();
return true;
}
相关文章推荐
- select网络模型知识总结
- wg/wrk: Modern HTTP benchmarking tool
- asynchttpclient(下载图片)
- [免费活动通知]RAD Studio 10.1 Berlin新产品发表 网络研讨会
- Eclipse中HttpServlet类找不到
- HTTP Status Code (http状态码)
- apache axis 框架处理https请求时超时时间设置问题
- ImageLoader 加载https 图片路径
- Spring MVC @RequestBody接收JSON报HTTP Statusd 415的问题
- http://www.ablanxue.com/shtml/201411/25904_1.shtml
- 点击获取网络大图(支持缩放)
- 因交换机网卡故障导致的网络无法ping通
- CHttpProxyServer
- android网络编程——http get
- R语言︱SNA-社会关系网络—igraph包(社群划分、画图)(三)
- android网络编程——使用Android中的网络连接
- RHEL7网络管理相关的命令
- TCP的拥塞控制
- 使用AsyncTask 加载网络图片
- Http协议