服务器端:

  1. #include <WINSOCK2.H>  
  2. #include <stdio.h>  
  3.  
  4. void main()  
  5. {  
  6.     //加载套接字库  
  7.     WORD wVersionRequest;  
  8.     WSADATA wsData;  
  9.     int err;  
  10.     wVersionRequest = MAKEWORD(1,1);  
  11.       
  12.     err = WSAStartup(wVersionRequest,&wsData);  
  13.     if (err != 0)  
  14.     {  
  15.         return;  
  16.     }  
  17.       
  18.       
  19.     if (LOBYTE(wsData.wVersion) != 1 || HIBYTE(wsData.wVersion) != 1)  
  20.     {  
  21.         WSACleanup();  
  22.         return;  
  23.     }  
  24.  
  25.     //创建套接字  
  26.     SOCKET sockSrv = socket(AF_INET, SOCK_DGRAM, 0);          
  27.     SOCKADDR_IN addrSrv;  
  28.     addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);  
  29.     addrSrv.sin_family = AF_INET;  
  30.     addrSrv.sin_port = htons(6000);  
  31.       
  32.     //绑定套接字  
  33.     bind(sockSrv, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));  
  34.  
  35.     //创建数据缓冲区  
  36.     char recvBuf[100];  
  37.     char sendBuf[100];  
  38.     char tempBuf[200];  
  39.  
  40.     SOCKADDR_IN  addrClient;  
  41.     int len = sizeof(SOCKADDR);  
  42.  
  43.     while (1)  
  44.     {  
  45.         //等待并接收数据  
  46.         recvfrom(sockSrv, recvBuf, 100, 0, (SOCKADDR*)&addrClient, &len);  
  47.         //对接收的数据进行判断  
  48.         if ('q' == recvBuf[0])  
  49.         {  
  50.             sendto(sockSrv, "q", strlen("q")+1, 0, (SOCKADDR*)&addrClient, len);  
  51.             printf("Chat end!\n");  
  52.             break;  
  53.         }  
  54.           
  55.         sprintf(tempBuf, "%s say: %s", inet_ntoa(addrClient.sin_addr), recvBuf);  
  56.         printf("%s\n", tempBuf);  
  57.  
  58.         //发送数据  
  59.         printf("Please input data:\n");  
  60.         gets(sendBuf);  
  61.         sendto(sockSrv, sendBuf, strlen(sendBuf)+1, 0, (SOCKADDR*)&addrClient, len);  
  62.     }  
  63.  
  64.     //关闭套接字  
  65.     closesocket(sockSrv);  
  66.     WSACleanup();  

客户端:

 

  1. #include <WINSOCK2.H>  
  2. #include <stdio.h>  
  3.  
  4. void  main()  
  5. {  
  6.     //加载套接字库  
  7.     WORD wVersionRequest;  
  8.     WSADATA wsData;  
  9.     int err;  
  10.     wVersionRequest = MAKEWORD(1,1);  
  11.       
  12.     err = WSAStartup(wVersionRequest,&wsData);  
  13.     if (err != 0)  
  14.     {  
  15.         return;  
  16.     }  
  17.       
  18.       
  19.     if (LOBYTE(wsData.wVersion) != 1 || HIBYTE(wsData.wVersion) != 1)  
  20.     {  
  21.         WSACleanup();  
  22.         return;  
  23.     }  
  24.  
  25.     //创建套接字  
  26.     SOCKET sockClient = socket(AF_INET, SOCK_DGRAM, 0);  
  27.       
  28.     SOCKADDR_IN addrSrv;  
  29.     addrSrv.sin_family = AF_INET;  
  30.     addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");  
  31.     addrSrv.sin_port = htons(6000);  
  32.  
  33.  
  34.     //创建数据缓冲区  
  35.     char recvBuf[100];  
  36.     char sendBuf[100];  
  37.     char tempBuf[200];  
  38.  
  39.     int len = sizeof(SOCKADDR);  
  40.  
  41.     while(1)  
  42.     {  
  43.         //发送数据  
  44.         printf("Please input data:\n");  
  45.         gets(sendBuf);  
  46.         sendto(sockClient, sendBuf, strlen(sendBuf)+1, 0, (SOCKADDR*)&addrSrv, len);  
  47.  
  48.         //等待并接收数据  
  49.         recvfrom(sockClient, recvBuf, 100 ,0, (SOCKADDR*)&addrSrv, &len);  
  50.         if ('q' == recvBuf[0])  
  51.         {  
  52.             sendto(sockClient, "q", strlen("q")+1, 0, (SOCKADDR*)&addrSrv, len);  
  53.             printf("Chat end!\n");  
  54.             break;  
  55.         }  
  56.  
  57.         sprintf(tempBuf, "%s say:%s", inet_ntoa(addrSrv.sin_addr), recvBuf);  
  58.         printf("%s\n", tempBuf);  
  59.     }  
  60.  
  61.     //关闭套接字  
  62.     closesocket(sockClient);  
  63.     WSACleanup();  
  64.