使用winsock+UDP写的一个简单接收端程序(转)

来源:互联网 发布:python开发环境下载 编辑:程序博客网 时间:2024/05/29 09:08

本程序使用VS2008编写,代码如下:

 

[cpp:firstline[1]] view plaincopyprint?
  1. //先打开服务器端,服务器在执行完recvfrom()后堵塞,等待接收数据...  
  2. #include <winsock2.h>  
  3. #include <stdio.h>  
  4. #pragma comment(lib,"WS2_32.LIB")  
  5. void main()  
  6. {  
  7.     WSADATA         wsaData;  
  8.     SOCKET          ReceivingSocket;          
  9.     SOCKADDR_IN     ReceiverAddr;  
  10.     int             Port = 8060;  
  11.     char            ReceiveBuf[1024] = {0};  
  12.     int             BufLength = 1024;  
  13.     SOCKADDR_IN     SenderAddr;  
  14.     int             SenderAddrSize = sizeof(SenderAddr);  
  15.     int             Ret;  
  16.     //初始化Winsock 2.2版本  
  17.     if((Ret = WSAStartup(MAKEWORD(2,2),&wsaData)) !=0)  
  18.     {  
  19.         printf("ERROR:WSAStartup failed with %d/n",Ret);  
  20.         return;  
  21.     }  
  22.     //创建一个新的套接字来接收数据报  
  23.     if((ReceivingSocket = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP)) == INVALID_SOCKET)  
  24.     {  
  25.         printf("ERROR:SOCKET failed with %d/n",WSAGetLastError());  
  26.         WSACleanup();  
  27.         return;  
  28.     }  
  29.     //建立一个SOCKDDR_IN结构,这个结构将告知bind我们想要使用5150端口接收来自  
  30.     //所有接口的数据报  
  31.     ReceiverAddr.sin_family = AF_INET;  
  32.     ReceiverAddr.sin_port = htons(Port);  
  33.     ReceiverAddr.sin_addr.s_addr = htonl(INADDR_ANY);  
  34.     //使用bind将这个地址信息和套接字关联起来  
  35.     if((bind(ReceivingSocket,(SOCKADDR*)&ReceiverAddr,sizeof(ReceiverAddr))) == SOCKET_ERROR)  
  36.     {  
  37.         printf("ERROR:bind failed with %d/n",WSAGetLastError());  
  38.         closesocket(ReceivingSocket);  
  39.         WSACleanup();  
  40.         return;  
  41.     }  
  42.     ////先打开服务器端,服务器在执行完recvfrom()后堵塞,等待接收数据...  
  43.     printf("wait to receive data.../n");  
  44.     if((Ret = recvfrom(ReceivingSocket,ReceiveBuf,BufLength,0,(SOCKADDR *)&SenderAddr,&SenderAddrSize))  
  45.         == SOCKET_ERROR)  
  46.     {  
  47.       printf("ERROR: recvfrom failed with error %d/n", WSAGetLastError());  
  48.       closesocket(ReceivingSocket);  
  49.       WSACleanup();  
  50.       return;  
  51.     }  
  52.     printf("We successfully received %d bytes from address %s:%d./n", Ret,  
  53.         inet_ntoa(SenderAddr.sin_addr), ntohs(SenderAddr.sin_port));  
  54.     for(int id=0; id<5 ; ++id)  
  55.         printf("%c",ReceiveBuf[id]);  
  56.     //应用程序结束接收数据报后,关闭套接字  
  57.     closesocket(ReceivingSocket);  
  58.     //应用程序结束后,调用WSACleanup  
  59.     WSACleanup();  


原创粉丝点击