这是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. javascript 中的new操作符的理解

    new 操作符 在有上面的基础概念的介绍之后,在加上new操作符,我们就能完成传统面向对象的class + new的方式创建对象,在Javascript中,我们将这类方式成为Pseudoclassic ...

  2. CSS实现背景透明,文字不透明(各浏览器兼容) (转)

    /*CSS*/ .waps{ background:url(07158.bmp) no-repeat top center fixed; width:1004px; text-align:center ...

  3. Win10 10586 更新

    最近发现,电脑c盘突然少了许多,发现c盘多了个windowsBT文件夹,大概6个G,恩,win10 又推出更新了,版本10586. 不知道为啥,更新时win10 把原来的下载的删除了,大概出了什么错误 ...

  4. javaweb 中的乱码问题

    一.post 方式 首先我们看下面一段代码,在该HTML中我们指定的编码为“UTF-8”,如图所示. 在该代码中,我们将表单数据提交给ParamServlet 处理 servlet 会将接收到的数据打 ...

  5. Power Map 更新日志

    2015-05-18,五月更新 Custom Regions feature,允许用户自定义区域要素,支持kml和shape格式 New customization features,包括图例/文本框 ...

  6. IP-MAC绑定导致网络故障

    前段时间将一台服务器A的服务迁移至了另外一台服务器B,外网IP地址也顺带迁移过来了,结果网络出现了问题. 其中内网是畅通的,但是外网IP怎么都连不上另外一台路由C(B和C是在一个交换机下的,网段也相同 ...

  7. 学习笔记_过滤器详细_2(过滤器JavaWeb三大组件之一)

    过滤器详细 5 四种拦截方式 我们来做个测试,写一个过滤器,指定过滤的资源为b.jsp,然后我们在浏览器中直接访问b.jsp,你会发现过滤器执行了! 但是,当我们在a.jsp中request.getR ...

  8. 如何重写EF DBContext 获取链接字符串的方法

    public partial class byvarDBFirst: DbContext { //使用自定义连接串 private static string GetEFConnctionString ...

  9. VC中动态添加控件

    VC中动态添加控件 动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的. 一.创建动态控件: 为了对照,我们先来看一下静态控件的创建. 放置静态控件时必须先建立一个 ...

  10. javascript调用oc的方法

    1.引入#import <JavaScriptCore/JavaScriptCore.h> 2.JSContext *jsContext = [self.webView valueForK ...