UDP Socket编程 C/C++


  1. //services
  2. #pragma comment (lib,"ws2_32.lib")  
  3.  
  4. #include <Winsock2.h>  
  5.   
  6. #include <stdio.h>  
  7.   
  8.   
  9.   
  10. void main()  
  11.   
  12. {  
  13.   
  14.     //版本协商  
  15.   
  16.     WORD wVersionRequested;  
  17.   
  18.     WSADATA wsaData;  
  19.   
  20.     int err;  
  21.   
  22.       
  23.   
  24.     wVersionRequested = MAKEWORD( 1, 1 );  
  25.   
  26.       
  27.   
  28.     err = WSAStartup( wVersionRequested, &wsaData );  
  29.   
  30.     if ( err != 0 ) {  
  31.   
  32.         /* Tell the user that we could not find a usable */  
  33.   
  34.         /* WinSock DLL.                                  */  
  35.   
  36.         return;  
  37.   
  38.     }  
  39.   
  40.       
  41.   
  42.     /* Confirm that the WinSock DLL supports 2.2.*/  
  43.   
  44.     /* Note that if the DLL supports versions greater    */  
  45.   
  46.     /* than 2.2 in addition to 2.2, it will still return */  
  47.   
  48.     /* 2.2 in wVersion since that is the version we      */  
  49.   
  50.     /* requested.                                        */  
  51.   
  52.       
  53.   
  54.     if ( LOBYTE( wsaData.wVersion ) != 1 ||  
  55.   
  56.         HIBYTE( wsaData.wVersion ) != 1) {  
  57.   
  58.         /* Tell the user that we could not find a usable */  
  59.   
  60.         /* WinSock DLL.                                  */  
  61.   
  62.         WSACleanup( );  
  63.   
  64.         return;   
  65.   
  66.     }  
  67.   
  68.       
  69.   
  70.     /* The WinSock DLL is acceptable. Proceed. */  
  71.   
  72.     //创建数据报套接字  
  73.   
  74.     SOCKET svr = socket(AF_INET,SOCK_DGRAM,0);  
  75.   
  76.     //创建本地地址信息  
  77.   
  78.     SOCKADDR_IN addr;  
  79.   
  80.     addr.sin_family = AF_INET;  
  81.   
  82.     addr.sin_port = htons(6000);  
  83.   
  84.     addr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);  
  85.   
  86.     int len = sizeof(sockaddr);  
  87.   
  88.     bind(svr,(sockaddr*)&addr,len);  
  89.   
  90.     //创建客户端地址对象  
  91.   
  92.     SOCKADDR_IN addrClient;  
  93.   
  94.     char recvBuf[128];  
  95.   
  96.     char sendBuf[128];  
  97.   
  98.     char tempBuf[256];  
  99.   
  100.       
  101.   
  102.     while(true)  
  103.   
  104.     {  
  105.   
  106.         //接收数据  
  107.   
  108.         recvfrom(svr,recvBuf,128,0,(sockaddr*)&addrClient,&len);  
  109.   
  110.         char* ipClient = inet_ntoa(addrClient.sin_addr);  
  111.   
  112.         sprintf(tempBuf,"%s said: %s\n",ipClient,recvBuf);  
  113.   
  114.         printf("%s",tempBuf);  
  115.   
  116.         gets(sendBuf);  
  117.   
  118.         //发送数据  
  119.   
  120.         sendto(svr,sendBuf,strlen(sendBuf)+1,0,(sockaddr*)&addrClient,len);  
  121.   
  122.     }  
  123.   
  124.     closesocket(svr);  
  125.   
  126.     WSACleanup();  
  127.   
  128. }  

  129. //client

  130. #pragma comment (lib,"ws2_32.lib")  
  131.  
  132. #include <Winsock2.h>  
  133.   
  134. #include <stdio.h>  
  135.   
  136.   
  137.   
  138. void main()  
  139.   
  140. {  
  141.   
  142.     //版本协商  
  143.   
  144.     WORD wVersionRequested;  
  145.   
  146.     WSADATA wsaData;  
  147.   
  148.     int err;  
  149.   
  150.       
  151.   
  152.     wVersionRequested = MAKEWORD( 1, 1 );  
  153.   
  154.       
  155.   
  156.     err = WSAStartup( wVersionRequested, &wsaData );  
  157.   
  158.     if ( err != 0 ) {  
  159.   
  160.         /* Tell the user that we could not find a usable */  
  161.   
  162.         /* WinSock DLL.                                  */  
  163.   
  164.         return;  
  165.   
  166.     }  
  167.   
  168.       
  169.   
  170.     /* Confirm that the WinSock DLL supports 2.2.*/  
  171.   
  172.     /* Note that if the DLL supports versions greater    */  
  173.   
  174.     /* than 2.2 in addition to 2.2, it will still return */  
  175.   
  176.     /* 2.2 in wVersion since that is the version we      */  
  177.   
  178.     /* requested.                                        */  
  179.   
  180.       
  181.   
  182.     if ( LOBYTE( wsaData.wVersion ) != 1 ||  
  183.   
  184.         HIBYTE( wsaData.wVersion ) != 1 ) {  
  185.   
  186.         /* Tell the user that we could not find a usable */  
  187.   
  188.         /* WinSock DLL.                                  */  
  189.   
  190.         WSACleanup( );  
  191.   
  192.         return;   
  193.   
  194.     }  
  195.   
  196.       
  197.   
  198.     /* The WinSock DLL is acceptable. Proceed. */  
  199.   
  200.     //创建服务器套接字  
  201.   
  202.     SOCKET Svr = socket(AF_INET,SOCK_DGRAM,0);  
  203.   
  204.     //创建地址  
  205.   
  206.     SOCKADDR_IN addrSvr;  
  207.   
  208.     addrSvr.sin_family = AF_INET;  
  209.   
  210.     addrSvr.sin_port = htons(6000);  
  211.   
  212.     addrSvr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");  
  213.   
  214.     char recvBuf[128];  
  215.   
  216.     char sendBuf[128];  
  217.   
  218.     int len = sizeof(sockaddr);  
  219.   
  220.   
  221.   
  222.     while(true)  
  223.   
  224.     {  
  225.   
  226.         gets(sendBuf);  
  227.   
  228.         //发送数据  
  229.   
  230.         sendto(Svr,sendBuf,strlen(sendBuf)+1,0,(sockaddr*)&addrSvr,len);  
  231.   
  232.         //接收数据  
  233.   
  234.         recvfrom(Svr,recvBuf,128,0,(sockaddr*)&addrSvr,&len);  
  235.   
  236.         char* ipSvr = inet_ntoa(addrSvr.sin_addr);  
  237.   
  238.         printf("%s said: %s\n",ipSvr,recvBuf);  
  239.   
  240.     }  
  241.   
  242.     closesocket(Svr);  
  243.   
  244.     WSACleanup();  
  245.   
  246. }  

你可能感兴趣的:(UDP Socket编程 C/C++)