在客户端与服务端进行信息交互的时候,我们经常想让他们进行实时对话,下面我将给出客户端与服务器实时通信的代码,采用C语言与C++混合编写,基于tcp协议,键盘输入想发送的数据,接收到数据之后,对数据进行解析。老规矩,让我们开始初始化套接字。

一,初始化

1.初始化网络库

bool init_Socket()//初始化网络库
{WSADATA wsadata;if (0 != WSAStartup(MAKEWORD(2, 2), &wsadata))//windows异步套接字启动{printf("[error]WSAStarup failed,code %d\n", WSAGetLastError());return false;}return true;
}

2.关闭网络库

bool close_Socket()//关闭网络库
{if (0 != WSACleanup()){printf("[error]WSACleanup failed,code %d", WSAGetLastError());return false;}return true;
}

3.创建套接字

以下代码为服务器创建套接字的过程,绑定套接字后需要有一个listen函数来监听我们的客户端是否有请求发到服务器。

SOCKET create_serverSocket()
{SOCKET fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//创建一个空的socketif (INVALID_SOCKET == fd){printf("[error]socket failed,code %d", WSAGetLastError());return INVALID_SOCKET;}struct sockaddr_in addr;addr.sin_family = AF_INET;addr.sin_port = htons(PORT);//把本地字节序转换为网络字节序addr.sin_addr.S_un.S_addr = ADDR_ANY;//绑定本地任意IPif (SOCKET_ERROR == bind(fd, (struct sockaddr*)&addr, sizeof(addr))){printf("[error]bind failed,code %d", WSAGetLastError());return INVALID_SOCKET;//-1}listen(fd, 10);return fd;
}

以下代码为客户端创建套接字的过程,不需要绑定bind()函数,也不需要监听。

SOCKET create_clientSocket(const char* ip)
{SOCKET fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//创建一个空的socketif (INVALID_SOCKET == fd){err("socket");return INVALID_SOCKET;}//给socket绑定服务端的ip地址和端口号struct sockaddr_in addr;addr.sin_family = AF_INET;addr.sin_port = htons(PORT);//把本地字节序转换为网络字节序addr.sin_addr.S_un.S_addr = inet_addr(ip);//绑定服务器任意IPif (INVALID_SOCKET == connect(fd, (struct sockaddr*)&addr, sizeof(addr))){err("connec");return INVALID_SOCKET;}cout << "服务器连接成功!" << endl;return fd;
}

二,实时通信

1.server端

在main函数中,  新建一个套接字clifd来发送数据,注意在send函数中填入的套接字是接收连接时accept新建的,而不是初始化用到那个套接字serfd,server端先接收客户端发来的消息,再对消息进行回应,运行程序时,自己在输出框填入想发送的数据即可。

int main()
{int send_len ;int recv_len ;//定义长度变量int len ;char send_buf[100] = { '\0' };char recv_buf[100] = { '\0' };//定义发送缓冲区和接受缓冲区init_Socket();SOCKET serfd = create_serverSocket();printf("服务端创建成功,等待客户端连接\n ");SOCKET clifd = accept(serfd, NULL, NULL);//s_accept = accept(s_server, (SOCKADDR*)&accept_addr, &len);while (true){if (clifd == INVALID_SOCKET){printf("[error]accept failed,code %d", WSAGetLastError());closesocket(clifd);closesocket(serfd);close_Socket();return 0;}printf("客户端连接成功\n");while (true){if (SOCKET_ERROR == recv(clifd, recv_buf, sizeof(recv_buf), 0))//recv_len = recv(s_accept, recv_buf, 100, 0);{printf("[error] failed,code %d", WSAGetLastError());}else{printf("客户端信息:%s\n", recv_buf);}if (strcmp(recv_buf, "bye") == 0){ //断开通信cout << "本次通信结束!" << endl;break;}cout << "请输入回复信息:\0";cin >> send_buf;send_len = send(clifd, send_buf, sizeof(send_buf), 0);if (send_len < 0){cout << "发送失败!" << endl;break;}}break;}closesocket(clifd);closesocket(serfd);close_Socket();return 0;
}

2.cilent端

在main函数中,我们先发送消息到服务器,因为实际的项目中,基本上都是客户端先向服务器发送请求,然后再开始接收消息,当客户端发出“bye”时,我们的通信就结束了

int main()
{//定义长度变量int send_len = 0;int recv_len = 0;//定义发送缓冲区和接受缓冲区char send_buf[100] = { '\0' };char recv_buf[100] = { '\0' };init_Socket();SOCKET s_server = create_clientSocket("127.0.0.1");while (true){cout << "请输入发送信息:\0";cin >> send_buf;send_len = send(s_server, send_buf, sizeof(send_buf), 0);if (send_len < 0){cout << "发送失败!" << endl;break;}if (strcmp(send_buf, "bye") == 0){  //输入bye就断开通信cout << "本次通信结束!" << endl;break;}recv_len = recv(s_server, recv_buf, sizeof(recv_buf), 0);if (recv_len < 0){cout << "接受失败!" << endl;break;} else{printf("服务器端信息:%s\n", recv_buf);}}closesocket(s_server);return 0;
}

以下是运行结果,然后给出完整代码下载链接:

Windows下的socket通信,实时发送消息_socket一对一通信c语言-C文档类资源-CSDN下载

Windows下的socket通信,实时发送消息相关推荐

  1. Windows下企业微信机器人定时发送消息

    Windows下企业微信机器人定时发送消息提醒(小白篇) - 简书 Windows terminal使用curl出现错误 - 简书 $url = "https://qyapi.weixin. ...

  2. Windows下的socket编程

    前言 经过一周的时间,我又回来啦,这周我主要学习的是Windows下的socket网络编程.本篇博客的内容包括socket的简介.TCP/IP协议的讲解.TCP socket编程实例.UDP sock ...

  3. 如何在Android平台下进行Socket通信

    如何在Android平台下进行Socket通信 首先在Java se平台上新建一个Socket服务端: public static void main(String[] args) { try { S ...

  4. .net3.5下的Socket通信框架

    .net3.5下的Socket通信框架 1:前言 写博客时间不短了但是一直不知道怎么开头.索性就开门见山吧. 这篇文章主要给大家介绍.net3.5下的Socket通信,主要从事件池,缓冲区以及协议三个 ...

  5. Windows下的TCP通信

    刚好最近在做tcp.udp通信的实验就顺便写了这篇,方便以后查阅 文章目录 环境 步骤 流程图 源代码 环境 windows 10 visual studio2013 步骤 使用WSAStartup( ...

  6. Windows下的socket演示程序

    上节演示了 Linux 下的 socket 程序,这节来看一下 Windows 下的 socket 程序.同样,server.cpp 为服务器端代码,client 为客户端代码. 服务器端代码 ser ...

  7. linux下的socket通信

    linux下的socket通信 在linux下,无论多么复杂的服务器或客户端程序,无论什么编程语言实现的,其底层都离不开linux内核提供的系统调用(也就十多个函数),其网络通信的基本流程一定如下所述 ...

  8. windows 下实现socket编程_传送文件

    windows 下实现socket编程_传送文件 其实,Windows下的socket编程与Linux下的类似,这里不再赘述! 参考:http://blog.csdn.net/chudongfang2 ...

  9. 在windows下对android进行实时快速录屏和模拟点击(二)——win32 API操控模拟器

    从上一节在windows下对android进行实时快速录屏和模拟点击(一)--使用adb命令行当中,描述了适合于所有情况下的通用方法--adb.而通用方法的最大缺点就是:速度非常慢,在有些时候是远远不 ...

最新文章

  1. android相机采集sdk,Android相机在Android SDK怪怪
  2. 软件测试的准入准出是什么?标准是什么?
  3. anaconda创建一个虚拟环境
  4. php变量定义的位置,php变量一般放在哪个位置
  5. php静态方法场景,深入介绍PHP中的static的修饰方法和yield的使用场景
  6. M码小黄衫买家秀=w=
  7. GIS基础知识汇总篇(五)-无人机真正射影像的概念和制作原理
  8. 判断1000-2000之间的闰年(优化写法)
  9. AD程序设计c语言,AVR AD转换的C语言编程
  10. 软件设计师18-系统开发和运行01
  11. 199 美元的 iPhone 都可以想了,时代真的变了?
  12. Python接口自动化实战(第二阶段)- unittest框架
  13. hdu 1233还是畅通工程 最小生成树(入门题)prim算法
  14. 计算机专业英文面试,计算机专业面试英文自我介绍
  15. USB启动盘制作工具精选 2012版
  16. durbin watson检验表_DW检验表
  17. F5 GTM DNS 知识点和实验 3 -加速dns解析
  18. springboot和springMVC
  19. XCP协议和A2L文件–A2L(ASAP2)解析
  20. 计算机软件著作权材料模板

热门文章

  1. 如何创建oracle临时表空间,oracle_创建表空间_临时表空间_修改表空间_以及自增长...
  2. Arduino控制超声波检测与0.96OLED及串口显示
  3. 计算机在学校的使用英语作文,学生使用电脑大学英语作文
  4. 2021年广东工业大学第十五届文远知行杯程序设计竞赛 G.分割(思维)
  5. SkyIDC - 国际云服务厂商
  6. java反射总结(框架灵魂)
  7. 走过路过不要错过!字节跳动测试四面总结!
  8. oracle nvarchar2问题,oracle中nvarchar2查询结果显示总是少一位
  9. 幽默风趣的经典句子,搞笑俏皮,句句乐翻天!
  10. 牛客网面经题题目及答案总结-数据库篇