UDP实现简单聊天程序

服务器端代码

  1. #include <Winsock2.h>
  2. #include <stdio.h>
  3. void main()
  4. {
  5.     //load socketlib
  6.     WORD wVersionRequested;
  7.     WSADATA wsaData;
  8.     int err;
  9.     wVersionRequested=MAKEWORD(1,1);
  10.     err=WSAStartup(wVersionRequested,&wsaData);
  11.     if(err!=0)
  12.     {
  13.         return;
  14.     }
  15.     if(LOBYTE(wsaData.wVersion)!=1 ||
  16.         HIBYTE(wsaData.wVersion)!=1)
  17.     {
  18.         WSACleanup();
  19.         return;
  20.     }
  21.     //create socket
  22.     SOCKET sockSrv=socket(AF_INET,SOCK_DGRAM,0);
  23.     SOCKADDR_IN addrSrv;
  24.     addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
  25.     addrSrv.sin_family=AF_INET;
  26.     addrSrv.sin_port=htons(6000);
  27.     //bind socket
  28.     bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(addrSrv));
  29.     SOCKADDR_IN addrClient;
  30.     char recvBuf[100];
  31.     char sendBuf[100];
  32.     char tempBuf[100];
  33.     int len=sizeof(SOCKADDR);
  34.     while(1)
  35.     {
  36.         //receive data
  37.         recvfrom(sockSrv,recvBuf,sizeof(recvBuf),0,(SOCKADDR*)&addrClient,&len);
  38.         if('q'==recvBuf[0])
  39.         {
  40.             sendto(sockSrv,"q",2,0,(SOCKADDR*)&addrClient,len);
  41.             printf("chat end!/n");
  42.             break;
  43.         }
  44.         sprintf(tempBuf,"%s say : %s",inet_ntoa(addrClient.sin_addr),recvBuf);
  45.         printf("%s/n",tempBuf);
  46.         //send data
  47.         printf("please input data:/n");
  48.         gets(sendBuf);
  49.         sendto(sockSrv,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&addrClient,len);
  50.     }
  51.     closesocket(sockSrv);
  52.     WSACleanup();
  53. }

 

客户端代码:

  1. #include <Winsock2.h>
  2. #include <stdio.h>
  3. void main()
  4. {
  5.     //load socketlib
  6.     WORD wVersionRequested;
  7.     WSADATA wsaData;
  8.     int err;
  9.     wVersionRequested=MAKEWORD(1,1);
  10.     err=WSAStartup(wVersionRequested,&wsaData);
  11.     if(err!=0)
  12.     {
  13.         return;
  14.     }
  15.     if(LOBYTE(wsaData.wVersion)!=1 || 
  16.         HIBYTE(wsaData.wVersion)!=1)
  17.     {
  18.         WSACleanup();
  19.         return;
  20.     }
  21.     //create socket
  22.     SOCKET sockClient=socket(AF_INET,SOCK_DGRAM,0);
  23.     SOCKADDR_IN sockAdr;
  24.     sockAdr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
  25.     sockAdr.sin_family=AF_INET;
  26.     sockAdr.sin_port=htons(6000);
  27.     char recvBuf[100];
  28.     char sendBuf[100];
  29.     char tempBuf[100];
  30.     int len=sizeof(SOCKADDR);
  31.     while(1)
  32.     {
  33.         printf("please input data:/n");
  34.         gets(sendBuf);
  35.         sendto(sockClient,sendBuf,sizeof(sendBuf),0,(SOCKADDR*)&sockAdr,len);
  36.         recvfrom(sockClient,recvBuf,100,0,(SOCKADDR*)&sockAdr,&len);
  37.         if('q'==recvBuf[0])
  38.         {
  39.             sendto(sockClient,"q",2,0,(SOCKADDR*)&sockAdr,len);
  40.             printf("chat end!/n");
  41.             break;
  42.         }
  43.         sprintf(tempBuf,"%s say: %s",inet_ntoa(sockAdr.sin_addr),recvBuf);
  44.         printf("%s/n",tempBuf);
  45.     }
  46.     //close socket
  47.     closesocket(sockClient);
  48.     WSACleanup();
  49. }

你可能感兴趣的:(UDP实现简单聊天程序)