这是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. }

程序运行效果:

源代码下载地址:

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

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

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

C++ Socket TCP "Hello World!"的更多相关文章

  1. 分布式消息总线,基于.NET Socket Tcp的发布-订阅框架之离线支持,附代码下载

    一.分布式消息总线以及基于Socket的实现 在前面的分享一个分布式消息总线,基于.NET Socket Tcp的发布-订阅框架,附代码下载一文之中给大家分享和介绍了一个极其简单也非常容易上的基于.N ...

  2. 分享一个分布式消息总线,基于.NET Socket Tcp的发布-订阅框架,附代码下载

    一.分布式消息总线 在很多MIS项目之中都有这样的需求,需要一个及时.高效的的通知机制,即比如当使用者A完成了任务X,就需要立即告知使用者B任务X已经完成,在通常的情况下,开发人中都是在使用者B所使用 ...

  3. 重新想象 Windows 8 Store Apps (62) - 通信: Socket TCP, Socket UDP

    [源码下载] 重新想象 Windows 8 Store Apps (62) - 通信: Socket TCP, Socket UDP 作者:webabcd 介绍重新想象 Windows 8 Store ...

  4. 关于socket tcp 断线重连

    这个问题困扰过我几次,都没有来得及研究,今天研究一下. 首先写一个最简易的socket tcp程序,连接成功后再关闭服务器然后再用客户端各种操作看是什么情况 测试表明 (1)客户端已经连接,当服务端关 ...

  5. ActionScript简单实现Socket Tcp应用协议分析器

    转自..smark http://www.cnblogs.com/smark/archive/2012/05/15/2501507.html ActionScript简单实现Socket Tcp应用协 ...

  6. 与众不同 windows phone (30) - Communication(通信)之基于 Socket TCP 开发一个多人聊天室

    原文:与众不同 windows phone (30) - Communication(通信)之基于 Socket TCP 开发一个多人聊天室 [索引页][源码下载] 与众不同 windows phon ...

  7. 基于.NET Socket Tcp的发布-订阅框架

    基于.NET Socket Tcp的发布-订阅框架 一.分布式消息总线 在很多MIS项目之中都有这样的需求,需要一个及时.高效的的通知机制,即比如当使用者A完成了任务X,就需要立即告知使用者B任务X已 ...

  8. 初步探究java中程序退出、GC垃圾回收时,socket tcp连接的行为

    初步探究java中程序退出.GC垃圾回收时,socket tcp连接的行为 今天在项目开发中需要用到socket tcp连接相关(作为tcp客户端),在思考中发觉需要理清socket主动.被动关闭时发 ...

  9. Socket TCP Server一个端口可以有多少个长连接?受到什么影响?linux最大文件句柄数量总结

    Socket TCP Server一个端口可以有多少个长连接? 网上答案很多,不知道那个才是正确的 理论上是无限的 16.Linux中,一个端口能够接受tcp链接数量的理论上限是? A.1024 B. ...

  10. 27.Socket,TCP,UDP,HTTP基本通信原理

    Socket,TCP,UDP,HTTP基本通信原理(摘自百度): TCP.UDP,HTTP 底层通信都是通过 socket 套接字实现 网络上不同的计算机,也可以通信,那么就得使用网络套接字(sock ...

随机推荐

  1. C# 右键菜单 contextMenuStrip

    1.添加contextMenuStrip控件 默认命名:contextMenuStrip1 2.在要显示的控件上,找到其ContextMenuStrip属性,并设置其为contextMenuStrip ...

  2. 【MINA】字节序知识

    字节序,分为高位在前和低位在前,说白了就是先从低操作还是从高位操作 java和网络的字节序是一致的,都是高位在前,这意味着java端序列化和反序列化时不用关心字节序的问题, 那问题是,那讨论字节序有什 ...

  3. 20151216JqueryUI---dialog代码备份

    $(function () { $('#search_button').button(); /*$('#reg').dialog({ focus:function(e,ui){ alert('注册') ...

  4. 对进度条progressbar的调整

    进度条的理解,感觉这个进度条不是那么简单,系统给我们定制了几个普通的,但是如果还需要有更加好的效果,需要自己去调试. <ProgressBar android:layout_width=&quo ...

  5. jsp 页面获取xml的内容

    <c:out value="${history.xml}" escapeXml="true" />

  6. kafka环境搭建2-broker集群+zookeeper集群(转)

    原文地址:http://www.jianshu.com/p/dc4770fc34b6 zookeeper集群搭建 kafka是通过zookeeper来管理集群.kafka软件包内虽然包括了一个简版的z ...

  7. python+sqlite3

    一个小例子, # -*- coding:utf-8 -*- ''' Created on 2015年10月8日 (1.1)Python 2.7 Tutorial Pt 12 SQLite - http ...

  8. UVA 11300 Spreading the Wealth (数学推导 中位数)

    Spreading the Wealth Problem A Communist regime is trying to redistribute wealth in a village. They ...

  9. Speak softly love

    Speak softly love and hold me warm against your heart 柔声诉情,拥我在你暖暖的心上 I feel your words, the tender t ...

  10. OI路上-NOIP100天冲刺计划

    学OI已经9个月了,可是自己水平还是那样的弱QWQ. 现在离NOIP还有差不多100天的时间. 晚上辗转反侧发现了自己的一些问题: (1)DP还经常没思路. (2)搜索恶心题还不想写. (3)有时候也 ...