Windows下的socket通信,实时发送消息
在客户端与服务端进行信息交互的时候,我们经常想让他们进行实时对话,下面我将给出客户端与服务器实时通信的代码,采用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通信,实时发送消息相关推荐
- Windows下企业微信机器人定时发送消息
Windows下企业微信机器人定时发送消息提醒(小白篇) - 简书 Windows terminal使用curl出现错误 - 简书 $url = "https://qyapi.weixin. ...
- Windows下的socket编程
前言 经过一周的时间,我又回来啦,这周我主要学习的是Windows下的socket网络编程.本篇博客的内容包括socket的简介.TCP/IP协议的讲解.TCP socket编程实例.UDP sock ...
- 如何在Android平台下进行Socket通信
如何在Android平台下进行Socket通信 首先在Java se平台上新建一个Socket服务端: public static void main(String[] args) { try { S ...
- .net3.5下的Socket通信框架
.net3.5下的Socket通信框架 1:前言 写博客时间不短了但是一直不知道怎么开头.索性就开门见山吧. 这篇文章主要给大家介绍.net3.5下的Socket通信,主要从事件池,缓冲区以及协议三个 ...
- Windows下的TCP通信
刚好最近在做tcp.udp通信的实验就顺便写了这篇,方便以后查阅 文章目录 环境 步骤 流程图 源代码 环境 windows 10 visual studio2013 步骤 使用WSAStartup( ...
- Windows下的socket演示程序
上节演示了 Linux 下的 socket 程序,这节来看一下 Windows 下的 socket 程序.同样,server.cpp 为服务器端代码,client 为客户端代码. 服务器端代码 ser ...
- linux下的socket通信
linux下的socket通信 在linux下,无论多么复杂的服务器或客户端程序,无论什么编程语言实现的,其底层都离不开linux内核提供的系统调用(也就十多个函数),其网络通信的基本流程一定如下所述 ...
- windows 下实现socket编程_传送文件
windows 下实现socket编程_传送文件 其实,Windows下的socket编程与Linux下的类似,这里不再赘述! 参考:http://blog.csdn.net/chudongfang2 ...
- 在windows下对android进行实时快速录屏和模拟点击(二)——win32 API操控模拟器
从上一节在windows下对android进行实时快速录屏和模拟点击(一)--使用adb命令行当中,描述了适合于所有情况下的通用方法--adb.而通用方法的最大缺点就是:速度非常慢,在有些时候是远远不 ...
最新文章
- android相机采集sdk,Android相机在Android SDK怪怪
- 软件测试的准入准出是什么?标准是什么?
- anaconda创建一个虚拟环境
- php变量定义的位置,php变量一般放在哪个位置
- php静态方法场景,深入介绍PHP中的static的修饰方法和yield的使用场景
- M码小黄衫买家秀=w=
- GIS基础知识汇总篇(五)-无人机真正射影像的概念和制作原理
- 判断1000-2000之间的闰年(优化写法)
- AD程序设计c语言,AVR AD转换的C语言编程
- 软件设计师18-系统开发和运行01
- 199 美元的 iPhone 都可以想了,时代真的变了?
- Python接口自动化实战(第二阶段)- unittest框架
- hdu 1233还是畅通工程 最小生成树(入门题)prim算法
- 计算机专业英文面试,计算机专业面试英文自我介绍
- USB启动盘制作工具精选 2012版
- durbin watson检验表_DW检验表
- F5 GTM DNS 知识点和实验 3 -加速dns解析
- springboot和springMVC
- XCP协议和A2L文件–A2L(ASAP2)解析
- 计算机软件著作权材料模板
热门文章
- 如何创建oracle临时表空间,oracle_创建表空间_临时表空间_修改表空间_以及自增长...
- Arduino控制超声波检测与0.96OLED及串口显示
- 计算机在学校的使用英语作文,学生使用电脑大学英语作文
- 2021年广东工业大学第十五届文远知行杯程序设计竞赛 G.分割(思维)
- SkyIDC - 国际云服务厂商
- java反射总结(框架灵魂)
- 走过路过不要错过!字节跳动测试四面总结!
- oracle nvarchar2问题,oracle中nvarchar2查询结果显示总是少一位
- 幽默风趣的经典句子,搞笑俏皮,句句乐翻天!
- 牛客网面经题题目及答案总结-数据库篇