C++ Socket TCP "Hello World!"

这是C++ SOCKET网络程序中的C/S结构之TCP "Hello World !",共两个控制台工程:

 

[cpp] view plain copy
 
 print?
  1. //////////////////////////////////////////////////////////////////////////  
  2. // TCPServer.cpp  
  3.   
  4. #include <stdio.h>  
  5. #include <WINSOCK2.H>  
  6.   
  7. #pragma comment(lib,"WS2_32.lib")  
  8. #define BUF_SIZE    64      // 缓冲区大小  
  9.   
  10. int main(void)  
  11. {  
  12.     WSADATA wsd;            // WSADATA变量  
  13.     SOCKET  sServer;        // 服务器套接字  
  14.     SOCKET  sClient;        // 客户端套接字  
  15.     int     retVal;         // 返回值  
  16.     char    buf[BUF_SIZE];  // 接受数据  
  17.   
  18.     // 初始化套接字动态库  
  19.     ZeroMemory(buf,BUF_SIZE);  
  20.     if(WSAStartup(MAKEWORD(2,2),&wsd) != 0)  
  21.     {  
  22.         printf("WSAStartup failed !/n");  
  23.         return 1;  
  24.     }  
  25.   
  26.     // 创建套接字  
  27.     sServer = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);  
  28.     if(INVALID_SOCKET == sServer)  
  29.     {  
  30.         printf("socket failed !/n");  
  31.         WSACleanup();  
  32.         return -1;  
  33.     }  
  34.   
  35.     // 服务器套接字地址  
  36.     SOCKADDR_IN addrServ;  
  37.     addrServ.sin_family = AF_INET;  
  38.     addrServ.sin_port = htons(4999);  
  39.     addrServ.sin_addr.S_un.S_addr = htonl(INADDR_ANY);  
  40.   
  41.     // 绑定套接字  
  42.     retVal = bind(sServer,(const struct sockaddr*)&addrServ,sizeof(SOCKADDR_IN));  
  43.     if(SOCKET_ERROR == retVal)  
  44.     {  
  45.         printf("bind failed !/n");  
  46.         closesocket(sServer);  
  47.         WSACleanup();  
  48.         return -1;  
  49.     }  
  50.   
  51.     // 监听套接字  
  52.     retVal = listen(sServer,1);  
  53.     if(SOCKET_ERROR == retVal)  
  54.     {  
  55.         printf("listen failed !/n");  
  56.         closesocket(sServer);  
  57.         WSACleanup();  
  58.         return -1;  
  59.     }  
  60.   
  61.     // 接受客户请求  
  62.     sockaddr_in addrClient;  
  63.     int addrClientlen = sizeof(addrClient);  
  64.     sClient = accept(sServer,(sockaddr FAR*)&addrClient,&addrClientlen);  
  65.     if(INVALID_SOCKET == sClient)  
  66.     {  
  67.         printf("accept failed !/n");  
  68.         closesocket(sServer);  
  69.         WSACleanup();  
  70.         return -1;  
  71.     }  
  72.       
  73.     // 接受客户数据  
  74.     retVal = recv(sClient,buf,BUFSIZ,0);  
  75.     if(SOCKET_ERROR == retVal)  
  76.     {  
  77.         printf("recv failed !/n");  
  78.         closesocket(sServer);  
  79.         closesocket(sClient);  
  80.         WSACleanup();  
  81.         return -1;  
  82.     }  
  83.   
  84.     // 退出程序  
  85.     printf("Recv From Client:%s/n",buf);  
  86.     retVal = send(sClient,"Hello World !",strlen("Hello World !"),0);  
  87.     if(SOCKET_ERROR == retVal)  
  88.     {  
  89.         printf("send failed !/n");  
  90.         closesocket(sServer);  
  91.         closesocket(sClient);  
  92.         WSACleanup();  
  93.         return -1;  
  94.     }  
  95.   
  96.     // 退出程序  
  97.     closesocket(sServer);  
  98.     closesocket(sClient);  
  99.     WSACleanup();  
  100.     return 0;  
  101. }  

 

 

 

[cpp] view plain copy
 
 print?
  1. //////////////////////////////////////////////////////////////////////////  
  2. // TCPClient.cpp  
  3.   
  4. #include <stdio.h>  
  5. #include <Winsock2.H>  
  6.   
  7. #pragma comment(lib,"WS2_32.lib")  
  8. #define BUF_SIZE    64          // 缓冲区大小  
  9.   
  10. int main(void)  
  11. {  
  12.     WSADATA     wsd;            // 初始化<a href="http://lib.csdn.net/base/14" class='replace_word' title="MySQL知识库" target='_blank' style='color:#df3434; font-weight:bold;'>数据库</a>  
  13.     SOCKET      sHost;          // 服务器套接字  
  14.     SOCKADDR_IN servAddr;       // 服务器地址  
  15.     char        buf[BUF_SIZE];  // 接受数据缓冲区  
  16.     int         retVal;         // 返回值  
  17.   
  18.     if(WSAStartup(MAKEWORD(2,2),&wsd) != 0)  
  19.     {  
  20.         printf("WSAStartup failed !/n");  
  21.         return 1;  
  22.     }  
  23.   
  24.     // 创建套接字  
  25.     sHost = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);  
  26.     if(INVALID_SOCKET == sHost)  
  27.     {  
  28.         printf("socket failed !/n");  
  29.         WSACleanup();  
  30.         return -1;  
  31.     }  
  32.   
  33.     // 设置服务器地址  
  34.     servAddr.sin_family = AF_INET;  
  35.     servAddr.sin_addr.S_un.S_addr = inet_addr("192.168.1.254");  
  36.     servAddr.sin_port = htons(4999);  
  37.     int sServerAddlen = sizeof(servAddr);  
  38.       
  39.     // 连接服务器  
  40.     retVal = connect(sHost,(LPSOCKADDR)&servAddr,sizeof(servAddr));  
  41.     if(SOCKET_ERROR == retVal)  
  42.     {  
  43.         printf("connect failed !/n");  
  44.         closesocket(sHost);  
  45.         WSACleanup();  
  46.     }  
  47.   
  48.     // 向服务器发送数据  
  49.     ZeroMemory(buf,BUF_SIZE);  
  50.     strcpy(buf,"Hello World !");  
  51.     retVal = send(sHost,buf,strlen(buf),0);  
  52.     if(SOCKET_ERROR == retVal)  
  53.     {  
  54.         printf("send failed !/n");  
  55.         closesocket(sHost);  
  56.         WSACleanup();  
  57.         return -1;  
  58.     }  
  59.   
  60.     // 向服务器接受数据  
  61.     retVal = recv(sHost,buf,sizeof(buf)+1,0);  
  62.     printf("Recv From Server: %s/n",buf);  
  63.   
  64.     // 退出程序  
  65.     closesocket(sHost);  
  66.     WSACleanup();  
  67.     return 0;  
  68. }  

 

 

 

程序运行效果:

C++ Socket Hello World!

 

 

源代码下载地址:

 

http://download.csdn.net/source/1667113

 

http://www.rayfile.com/files/79dbe03a-a1fe-11de-83dd-0014221b798a/

http://blog.csdn.net/wangningyu/article/details/4556327

posted @ 2016-10-03 06:46  findumars  Views(563)  Comments(0Edit  收藏  举报