1. #include <stdio.h>
  2. #include <winsock2.h>
  3.  
  4. #pragma comment(lib, "ws2_32") /* WinSock 使用的库函数 */
  5.  
  6. #define ECHO_DEF_PORT 7 /* 侦听的缺省端口 */
  7. #define ECHO_BUF_SIZE 256 /* 缓冲区的大小 */
  8.  
  9. int main(int argc, char **argv)
  10. {
  11. WSADATA wsa_data;
  12. SOCKET echo_soc = , /* 侦听 socket 句柄 */
  13. acpt_soc = ;
  14.  
  15. struct sockaddr_in serv_addr, /* socket的本地地址 */
  16. clnt_addr; /* socket的远端地址 */
  17. unsigned short port = ECHO_DEF_PORT;
  18. int result = ;
  19. int addr_len = sizeof(struct sockaddr_in);
  20. char recv_buf[ECHO_BUF_SIZE];
  21.  
  22. if (argc == )
  23. port = atoi(argv[]);
  24.  
  25. WSAStartup(MAKEWORD(,), &wsa_data);/* 初始化 WinSock资源 */
  26. echo_soc = socket(AF_INET, SOCK_STREAM, ); /* 创建 socket */
  27.  
  28. /* socket 的本地地址 */
  29. serv_addr.sin_family = AF_INET;
  30. serv_addr.sin_port = htons(port);
  31. serv_addr.sin_addr.s_addr = INADDR_ANY;
  32.  
  33. result = bind(echo_soc, (struct sockaddr *)&serv_addr, sizeof(serv_addr));
  34. if (result == SOCKET_ERROR)
  35. {
  36. printf("[Echo Server] bind error: %d\n", WSAGetLastError());
  37. closesocket(echo_soc);
  38. return -;
  39. }
  40.  
  41. listen(echo_soc, SOMAXCONN);
  42.  
  43. printf("[Echo Server] is running ... ...\n");
  44. while ()
  45. {
  46. acpt_soc = accept(echo_soc, (struct sockaddr *)&clnt_addr, &addr_len);
  47. if (acpt_soc == INVALID_SOCKET)
  48. {
  49. printf("[Echo Server] accept error: %d\n", WSAGetLastError());
  50. break;
  51. }
  52.  
  53. result = recv(acpt_soc, recv_buf, ECHO_BUF_SIZE, );
  54. if (result > )
  55. {
  56. recv_buf[result] = ;
  57. printf("[Echo Server] receives: \"%s\", from %s\r\n",
  58. recv_buf, inet_ntoa(clnt_addr.sin_addr));
  59.  
  60. result = send(acpt_soc, recv_buf, result, );
  61. }
  62.  
  63. closesocket(acpt_soc);
  64. }
  65.  
  66. closesocket(echo_soc);
  67. WSACleanup();
  68.  
  69. return ;
  70. }
  1. #include <stdio.h>
  2. #include <winsock2.h>
  3.  
  4. #pragma comment(lib, "ws2_32") /* WinSock 使用的库函数 */
  5.  
  6. #define ECHO_DEF_PORT 7 /* 连接的缺省端口 */
  7. #define ECHO_BUF_SIZE 256 /* 缓冲区的大小 */
  8. #define ECHO_DEF_ADD "127.0.0.1"/*连接的默认服务器为本机*/
  9.  
  10. int main(int argc, char **argv)
  11. {
  12. WSADATA wsa_data;
  13. SOCKET echo_soc = ; /* socket 句柄 */
  14. struct sockaddr_in serv_addr; /* 服务器地址 */
  15. unsigned short port = ECHO_DEF_PORT;
  16. char *conAdd=ECHO_DEF_ADD;
  17. int result = , send_len = ;
  18. char *test_data = "Hello server!", recv_buf[ECHO_BUF_SIZE];
  19.  
  20. WSAStartup(MAKEWORD(,), &wsa_data);/* 初始化 WinSock资源 */
  21. send_len = strlen(test_data);
  22.  
  23. /* 服务器地址 */
  24. serv_addr.sin_family = AF_INET;
  25. serv_addr.sin_port = htons(port);
  26. serv_addr.sin_addr.s_addr = inet_addr(conAdd);
  27.  
  28. if (serv_addr.sin_addr.s_addr == INADDR_NONE)
  29. {
  30. printf("[ECHO] invalid address\n");
  31. return -;
  32. };
  33.  
  34. echo_soc = socket(AF_INET, SOCK_STREAM, ); /* 创建 socket */
  35. result = connect(echo_soc, (struct sockaddr *)&serv_addr, sizeof(serv_addr));
  36.  
  37. if (result == ) /* 连接成功 */
  38. {
  39. result = send(echo_soc, test_data, send_len, );
  40. result = recv(echo_soc, recv_buf, ECHO_BUF_SIZE, );
  41. }
  42.  
  43. if (result > )
  44. {
  45. recv_buf[result] = ;
  46. printf("[Echo Client] receives: \"%s\"\r\n", recv_buf);
  47. }
  48. else
  49. printf("[Echo Client] error : %d.\r\n", WSAGetLastError());
  50.  
  51. getchar();
  52. closesocket(echo_soc);
  53. WSACleanup();
  54.  
  55. return ;
  56. }

Winsock 入门 Echo 示例的更多相关文章

  1. Winsock 入门 计算校验和 示例

    #include <stdio.h> #include <string.h> #define DATA_MAX_LEN 14 /* 最大数据长度 */ struct data_ ...

  2. Winsock 入门 判读主机字节序 示例

    #include <stdio.h> union endian_u { /*最大成员的长度就是联合成员的长度.联合可以在定义时直接进行初始化,但这个初始化必须是联合第一个成员的类型,所以把 ...

  3. Spring MVC 入门教程示例 (一)

    今天和大家分享下  Spring MVC  入门教程 首先还是从 HelloWorld  web 工程开始 -------------------------- 1.首先创建一个Maven Web工程 ...

  4. wxPython 入门开发示例

    1.背景资料 wxPython API:https://www.wxpython.org/Phoenix/docs/html/ 2.入门示例 wxPython最重要的两个概念:App与Frame,其中 ...

  5. Highcharts入门小示例

    一.创建条形图 1.创建div容器 <div id="container" style="min-width:800px;height:400px"> ...

  6. 复杂事件处理——Esper入门(示例程序)

    前面对Esper Quick Start & Tutorial进行了简单描述,希望各位看官能够大致了解what is Esper,甚至对how to work有朦朦胧胧的了解. 开发一个Esp ...

  7. Arduino 入门程序示例之直流电机(2015-06-15)

    概述 演示直流电机的控制. 示例程序 PWM控制直流电机 略过控制电机转停的示例啦,有需要就把这里的 PWM 换成数字口输出 HIGH 或 LOW 就行了. // ------------------ ...

  8. Arduino 入门程序示例之一片 LED(2015-06-11)

    概述 从点到线,从线到面.现在开始要来一片的 LED 了,一大波的 LED 正在到来! 示例程序 因为手头没有现成的模块,手头只有 595,所以这里每一个示例程序都是使用 74HC595 扩展 IO ...

  9. Arduino 入门程序示例之一排 LED(2015-06-11)

    概述 最简单的一个 LED 的实验之后,自然是增加几个 LED,咱排成一排来玩吧.最后,再把一排的 LED 排成一个 8 字来玩——七段数码管. 示例程序 流水灯 第一个出场的肯定是经典的流水灯,也叫 ...

随机推荐

  1. iOS不得姐项目--TabBar的重复点击实现当前模块刷新;状态栏点击实现当前模块回滚到最顶部

    一.实现功能:重复点击tabBar,刷新当前TableView,其余不受影响 <1>实现思路: 错误的方法: TabBar成为自己的代理,监听自己的点击--这种方法是不可取的,如果外面设置 ...

  2. 【USACO 1.3】Wormholes

    /* LANG: C++ TASK: wormhole n个洞,n<=12, 如果两洞配对,则它们之间有地下路径(无向) 牛在地上只会往+x方向 问多少种两两配对的方案,牛从地上某位置出发,会陷 ...

  3. 浅谈 GPU图形固定渲染管线

    图形渲染管道被认为是实时图形渲染的核心,简称为管道.管道的主要功能是由给定的虚拟摄像机.三维物体.灯源.光照模型.纹理贴图或其他来产生或渲染一个二维图像.由此可见,渲染管线是实时渲染技术的底层工具.图 ...

  4. python3 报错集合

    1.格式 message = "GET / HTTP/1.1\r\n\r\n" s.sendall(message) TypeError: 'str' does not suppo ...

  5. Angular实现注册系统

    Angular是Google开发的前端技术框架,下载地址:https://code.angularjs.org/1.5.0/angular.js 通过对angular的简单理解后发现,angular通 ...

  6. 【BZOJ-1042】硬币购物 容斥原理 + 完全背包

    1042: [HAOI2008]硬币购物 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1811  Solved: 1057[Submit][Stat ...

  7. 【BZOJ-1046】上升序列 DP + 贪心

    1046: [HAOI2007]上升序列 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3723  Solved: 1271[Submit][Stat ...

  8. Maven配置不成功

    配置了MAVEN_HOME,新建了java文件,在d:/java/MAVEN_HOME/apach....,path下输出%MAVEN_HOME%bin,为什么cmd下mvn不行呢?因为MAVEN_H ...

  9. 【poj1177】 Picture

    http://poj.org/problem?id=1177 (题目链接) 题意 求矩形周长并. Solution 转自:http://www.cnblogs.com/Booble/archive/2 ...

  10. 网易免费/付费163企业邮smtp服务器地址

    免费:smtp.ym.163.com 25/pop.ym.163.com 110 付费:smtp.qiye.163.com 25/pop.qiye.163.com 110