#include <stdio.h>
#include <winsock2.h> #pragma comment(lib, "ws2_32") /* WinSock 使用的库函数 */ #define ECHO_DEF_PORT 7 /* 侦听的缺省端口 */
#define ECHO_BUF_SIZE 256 /* 缓冲区的大小 */ int main(int argc, char **argv)
{
WSADATA wsa_data;
SOCKET echo_soc = , /* 侦听 socket 句柄 */
acpt_soc = ; struct sockaddr_in serv_addr, /* socket的本地地址 */
clnt_addr; /* socket的远端地址 */
unsigned short port = ECHO_DEF_PORT;
int result = ;
int addr_len = sizeof(struct sockaddr_in);
char recv_buf[ECHO_BUF_SIZE]; if (argc == )
port = atoi(argv[]); WSAStartup(MAKEWORD(,), &wsa_data);/* 初始化 WinSock资源 */
echo_soc = socket(AF_INET, SOCK_STREAM, ); /* 创建 socket */ /* socket 的本地地址 */
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(port);
serv_addr.sin_addr.s_addr = INADDR_ANY; result = bind(echo_soc, (struct sockaddr *)&serv_addr, sizeof(serv_addr));
if (result == SOCKET_ERROR)
{
printf("[Echo Server] bind error: %d\n", WSAGetLastError());
closesocket(echo_soc);
return -;
} listen(echo_soc, SOMAXCONN); printf("[Echo Server] is running ... ...\n");
while ()
{
acpt_soc = accept(echo_soc, (struct sockaddr *)&clnt_addr, &addr_len);
if (acpt_soc == INVALID_SOCKET)
{
printf("[Echo Server] accept error: %d\n", WSAGetLastError());
break;
} result = recv(acpt_soc, recv_buf, ECHO_BUF_SIZE, );
if (result > )
{
recv_buf[result] = ;
printf("[Echo Server] receives: \"%s\", from %s\r\n",
recv_buf, inet_ntoa(clnt_addr.sin_addr)); result = send(acpt_soc, recv_buf, result, );
} closesocket(acpt_soc);
} closesocket(echo_soc);
WSACleanup(); return ;
}
 #include <stdio.h>
#include <winsock2.h> #pragma comment(lib, "ws2_32") /* WinSock 使用的库函数 */ #define ECHO_DEF_PORT 7 /* 连接的缺省端口 */
#define ECHO_BUF_SIZE 256 /* 缓冲区的大小 */
#define ECHO_DEF_ADD "127.0.0.1"/*连接的默认服务器为本机*/ int main(int argc, char **argv)
{
WSADATA wsa_data;
SOCKET echo_soc = ; /* socket 句柄 */
struct sockaddr_in serv_addr; /* 服务器地址 */
unsigned short port = ECHO_DEF_PORT;
char *conAdd=ECHO_DEF_ADD;
int result = , send_len = ;
char *test_data = "Hello server!", recv_buf[ECHO_BUF_SIZE]; WSAStartup(MAKEWORD(,), &wsa_data);/* 初始化 WinSock资源 */
send_len = strlen(test_data); /* 服务器地址 */
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(port);
serv_addr.sin_addr.s_addr = inet_addr(conAdd); if (serv_addr.sin_addr.s_addr == INADDR_NONE)
{
printf("[ECHO] invalid address\n");
return -;
}; echo_soc = socket(AF_INET, SOCK_STREAM, ); /* 创建 socket */
result = connect(echo_soc, (struct sockaddr *)&serv_addr, sizeof(serv_addr)); if (result == ) /* 连接成功 */
{
result = send(echo_soc, test_data, send_len, );
result = recv(echo_soc, recv_buf, ECHO_BUF_SIZE, );
} if (result > )
{
recv_buf[result] = ;
printf("[Echo Client] receives: \"%s\"\r\n", recv_buf);
}
else
printf("[Echo Client] error : %d.\r\n", WSAGetLastError()); getchar();
closesocket(echo_soc);
WSACleanup(); return ;
}

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. Java--剑指offer(3)

    11.输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. a)使用Integer.toBinaryString(n);来计算得出二进制的字符串,然后使用for循环截取字符串是否为1 pu ...

  2. ubuntu下nginx的启停等常用命令

    开发过程中,我们会经常的修改nginx的配置文件,每次修改配置文件都可以先测试下本次修改的配置文件是否正确,可以利用以下命令: ? 1 service nginx -t -c /alidata/ser ...

  3. 使用IDEA自带的rest client参数传递乱码问题

     在idea使用rest client(idea自带的访问请求地址工具)调试的时候,有时出现中文会乱码的情况    解决方法如下:   1.打开IDEA安装路径下的bin文件夹里面的idea64.ex ...

  4. 【转】Timer还是Handler

    在我们Android开发过程中,经常需要执行一些短周期的定时任务,这时候有两个选择Timer或者Handler.然而个人认为:Handler在多个方面比Timer更为优秀,更推荐使用. 一.易用性 1 ...

  5. php获取checkbox复选框的内容

    php获取checkbox复选框的内容   由于checkbox属性,所有必须把checkbox复选择框的名字设置为一个如果checkbox[],php才能读取,以数据形式,否则不能正确的读取chec ...

  6. Hadoop-2.2.0 (传 hadoop-2.2.0.tar.gz)

    配置hadoop 2.1 上传hadoop包 2.2 解压hadoop包 首先在根目录下创建一个cloud目录 mkdir /cloud tar -zxvf hadoop-2.2.0.tar.gz - ...

  7. 【BZOJ-3956】Count ST表 + 单调栈

    3956: Count Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 173  Solved: 99[Submit][Status][Discuss] ...

  8. linux远程登陆其他主机并执行命令的若干方式

    一.命令行登陆 ssh后,一定后边加双引号 写命令,否则命令实在本地执行的,多条命令的话用双引号隔开, ssh user@remoteNode "cd /home ; ls" 二. ...

  9. System.BadImageFormatException: 未能加载文件或程序集""或它的某一个依赖项。试图加载格式不正确的程序。

    解决方法: 1.更改程序集的生成目标平台为[Any CPU],或者针对平台进行编译. 项目右键->[属性]->[生成]->[生成目标平台] 2.尝试一下修改线程池设置为32位支持.

  10. Android成长日记-使用GridView显示多行数据

    本节将实现以下效果 Ps:看起来很不错的样子吧,而且很像九宫格/se ----------------------------------------------------------------- ...