C++ Socket TCP "Hello World!"

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

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

程序运行效果:

C++ Socket TCP "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

上一篇:修复 status 为 unusable 的 index


下一篇:布隆过滤器(Bloom Filter)详解——基于多hash的概率查找思想