网络通信day5作业

1>    使用select完成TCP客户端程序

客户端:

#include<myhead.h>#define FPORT 9999
#define FIP "192.168.125.130"#define KPORT 6666
#define KIP "192.168.125.130"int main(int argc, const char *argv[])
{//创建套接字文件描述符int cfd = 0;if((cfd = socket(AF_INET,SOCK_STREAM,0)) == -1){perror("socket error");return -1;}//允许重复引用int reuse = 1;if(setsockopt(cfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse)) == -1){perror("setsockopt error");return -1;}//绑定客服端struct sockaddr_in sin;sin.sin_family = AF_INET;sin.sin_port = htons(KPORT);sin.sin_addr.s_addr = inet_addr(KIP);if(bind(cfd,(struct sockaddr*)&sin,sizeof(sin)) == -1){perror("bind error");return -1;}//连接服务器struct sockaddr_in cin;cin.sin_family = AF_INET;cin.sin_port = htons(FPORT);cin.sin_addr.s_addr = inet_addr(FIP);if(connect(cfd,(struct sockaddr*)&cin,sizeof(cin)) == -1){perror("connect");return -1;}//定义检测文件描述符的集合fd_set readfd;//清空集合FD_ZERO(&readfd);//将cfd和0加入集合FD_SET(cfd,&readfd);FD_SET(0,&readfd);char buf[128] = "";int res = -1;fd_set tempfd;while(1){tempfd = readfd;res = select(cfd+1,&tempfd,NULL,NULL,NULL);if(res < 0){perror("select error");return -1;}else if(res == 0){printf("time out\n");return -1;}//下面为处理的处理描述符if(FD_ISSET(0,&tempfd)){bzero(buf,sizeof(buf));fgets(buf,sizeof(buf),stdin);buf[strlen(buf)-1]=0;send(cfd,buf,sizeof(buf),0);printf("客服端输入为%s\n",buf);}if(FD_ISSET(cfd,&tempfd)){bzero(buf,sizeof(buf));int res = recv(cfd,buf,sizeof(buf),0);if(res == 0){printf("服务器下线\n");break;}printf("服务器发来的消息为%s\n",buf);}}close(cfd);return 0;
}

服务器:

 

#include<myhead.h>
#define PORT 9999
#define IP "192.168.125.130"int main(int argc, const char *argv[])
{int sfd = -1;if((sfd = socket(AF_INET,SOCK_STREAM,0)) == -1){perror("socket");return -1;}int reuse = 1;if(setsockopt(sfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse)) == -1){perror("setsockopt error");return -1;}struct sockaddr_in sin;sin.sin_family = AF_INET;sin.sin_port = htons(PORT);sin.sin_addr.s_addr = inet_addr(IP);if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin)) == -1){perror("bind error");return -1;}if(listen(sfd,128)  == -1){perror("listen error");return -1;}struct sockaddr_in cin;socklen_t socklen = sizeof(cin);int newfd = -1;char buf[128] = "";fd_set readfds;FD_ZERO(&readfds);FD_SET(sfd,&readfds);FD_SET(0,&readfds);int res = 0;fd_set tempfds;int maxfd = sfd;char rbuf[128]="";struct sockaddr_in arr_cin[1024];while(1){tempfds = readfds;res = select(maxfd+1,&tempfds,NULL,NULL,NULL);if(res == -1){perror("select error");return -1;}else if(res == 0){printf("time out\n");return -1;}for(int index=0;index<=maxfd;index++){if(!FD_ISSET(index,&tempfds)){continue;}if(index == sfd){if((newfd = accept(sfd,(struct sockaddr*)&cin,&socklen)) == -1){perror("accept");return -1;}arr_cin[newfd] =cin;printf("[%s:%d]链接成功,newfd = %d\n\n",inet_ntoa(arr_cin[newfd].sin_addr),ntohs(arr_cin[newfd].sin_port),newfd);FD_SET(newfd,&readfds);if(newfd > maxfd){maxfd = newfd;}}else if(index == 0){scanf("%s",buf);printf("%s\n",buf);}else{bzero(rbuf,sizeof(rbuf));int res = recv(index,rbuf,sizeof(rbuf),0);if(res == 0){printf("客户端下线\n");close(index);FD_CLR(index,&readfds);for(int i =maxfd;i>0;i--){if(FD_ISSET(i,&readfds)){maxfd = i;break;}}continue;}printf("[%s:%d] :%s\n",inet_ntoa(arr_cin[index].sin_addr),ntohs(arr_cin[index].sin_port),rbuf);strcat(rbuf,"*_*");send(index,rbuf,sizeof(rbuf),0);}}}close(sfd);return 0;
}

效果图:


2>    使用poll完成TCP并发服务器

客户端:

#include<myhead.h>
#define SERPORT 9999
#define SERIP "192.168.125.130"#define CLIPORT 6666
#define CLIIP "192.168.125.130"int main(int argc, const char *argv[])
{int cfd = -1;if((cfd = socket(AF_INET,SOCK_STREAM,0)) == -1){perror("socket error");return -1;}printf("cfd = %d\n",cfd);int reuse = 1;if(setsockopt(cfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse)) == -1){perror("setsockopt error");return -1;}struct sockaddr_in sin;sin.sin_family = AF_INET;sin.sin_port = htons(CLIPORT);sin.sin_addr.s_addr = inet_addr(CLIIP);if(bind(cfd,(struct sockaddr*)&sin,sizeof(sin)) == -1){perror("bind error");return -1;}struct sockaddr_in cin;cin.sin_family = AF_INET;cin.sin_port = htons(SERPORT);cin.sin_addr.s_addr = inet_addr(SERIP);if(connect(cfd,(struct sockaddr*)&cin,sizeof(cin)) == -1){perror("connect error");return -1;}struct pollfd fds[2];fds[0].fd = 0;fds[0].events = POLLIN;fds[1].fd = cfd;fds[1].events = POLLIN;int res = -1;char wbuf[128] = "";while(1){res = poll(fds,2,-1);if(res < 0){perror("poll error");return -1;}else if(res == 0){printf("time out \n");return -1;}if(fds[0].revents == POLLIN){bzero(wbuf,sizeof(wbuf));fgets(wbuf,sizeof(wbuf),stdin);wbuf[strlen(wbuf)-1]=0;send(cfd,wbuf,sizeof(wbuf),0);}if(fds[1].revents == POLLIN){bzero(wbuf,sizeof(wbuf));int res = recv(cfd,wbuf,sizeof(wbuf),0);if(res == 0){printf("服务器已下线\n");break;}printf("[%s:%d]:%s\n",SERIP,SERPORT,wbuf);}}close(cfd);return 0;
}

服务器:

效果图:
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/235629.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android: Ubuntu下交叉环境编译常用调试工具demo for lspci命令(ARM设备)

lspci命令交叉环境编译(ARM设备) 交叉编译工具下载&#xff1a; https://releases.linaro.org/components/toolchain/binaries https://releases.linaro.org/components/toolchain/binaries/6.3-2017.05/aarch64-linux-gnu/ lspci命令交叉环境编译(ARM设备)&#xff1a; 1&a…

智能优化算法应用:基于梯度算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于梯度算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于梯度算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.梯度算法4.实验参数设定5.算法结果6.参考文献7.MA…

IDEA中如何创建各种类型的java工程

如果你的工程下面的module没有互相依赖&#xff0c;就相当于是一个小的项目&#xff0c;idea版本不同&#xff0c;细节可能不同 1、普通的Java 工程 在工程上&#xff0c;右键- New - Module&#xff0c;如下&#xff1a; 指明Java工程的名称及使用的JDK版本&#xff1a; 创建…

基于扩散的模糊文本图像超分辨率技术

恢复低分辨率文本图像具有挑战性&#xff0c;特别是对于在现实场景中具有复杂笔画和严重降质的中文文本图像。确保文本的准确性和样式的真实性对于高质量的文本图像超分辨率至关重要。最近&#xff0c;由于扩散模型强大的数据分布建模能力和数据生成能力&#xff0c;在自然图像…

Python---IP 地址的介绍

1. IP 地址的概念 IP 地址就是标识网络中设备的一个地址&#xff0c;好比现实生活中的家庭地址。 网络中的设备效果图: 2. IP 地址的表现形式 说明: IP 地址分为两类&#xff1a; IPv4 和 IPv6 IPv4 是目前使用的ip地址 IPv6 是未来使用的ip地址 IPv4 是由点分十进制组成 …

Pycharm 关闭控制台多余窗口详解(console)

文章目录 1 问题描述2 解决办法2.1 步骤1&#xff1a;编辑配置2.2 步骤2&#xff1a;使用 Python 控制台运行&#xff08;取消勾选&#xff09;2.3 验证&#xff1a;再次运行&#xff0c;多余窗口消失 1 问题描述 2 解决办法 2.1 步骤1&#xff1a;编辑配置 菜单路径&#xf…

anconda常用命令

一、基础指令说明 1、查看anconda版本号 conda --version 2、查看当前已有虚拟环境 conda env list 3、创建新环境 conda create -n classify python3.9 创建一个叫做classify的虚拟环境&#xff0c;其中python等于3.9 4、进入虚拟环境 activate classify 5、安装包 接下来…

5213A 综合数据通信分析仪

5213A 综合数据通信分析仪 数字通信测量仪器 5213A 综合数据通信分析仪是符合标准 PXI/CPCI 总线的模块化便携式仪器&#xff0c;用户可以 根据测试需要选配相应的模块&#xff0c;可选模块包括双端口 RapidIO 模块、双端口 2G FC 模块、双 端口 4G FC 模块、双端口 8G FC 模…

HP服务器idrac设置以及系统安装

HP服务器idrac设置以及系统安装 一、设置管理口的地址和密码1、HP服务器重新界面选择"F9"进入BIOS&#xff0c;设置iLo5(idrac)的IP和用户名密码。2、选择"系统配置"。3、选择"iLO 4"配置程序。4、网络选项是设置idrac管理口的地址&#xff0c;设…

grafana基本使用

一、安装grafana 1.下载 官网下载地址&#xff1a; https://grafana.com/grafana/download官网包的下载地址&#xff1a; yum install -y https://dl.grafana.com/enterprise/release/grafana-enterprise-10.2.2-1.x86_64.rpm官网下载速度非常慢&#xff0c;这里选择清华大…

Linux 操作系统(Vim)

vim 编译器&#xff08;相当于windows中记事本&#xff09; 当在终端窗口直接运行vim命令&#xff0c;会出现以下截图&#xff08;类似手册对vim编译器简单的介绍&#xff09;&#xff1a; vim提供三种基本工作模式&#xff1a; 命令模式(默认模式) 插入模式 末行模式 创建文本…

html之如何设置音频和视频?

文章目录 前言一、音频标签&#xff1a;audio1.audio简介2.常用属性controlsautoplayloop代码演示&#xff1a; 二、视频标签&#xff1a;video1.video2.常用的视频元素controlsautoplayloop代码演示&#xff1a; 总结视频元素总结音频元素总结 前言 html中插入音频和视频的方…

通信UART、I2C、SPI

内部通信UART、I2C、SPI 目录 1.UART 2.I2C 3.SPI 1.UART 全双工异步通信&#xff0c;有两根线发送与接收。 UART串口通信需要两个信号线来实现&#xff0c;一根用于串口发送&#xff0c;另外一根负责串口接收。 一开始高电平&#xff0c;然后拉低表示开始位&#xff0c;…

layui 树组件tree 通过API获取数据

一、简单 var treedata[];tree.render({elem: #addLeftType,id: demoId,data: treedata,showCheckbox: true,oncheck: function(obj){console.log(obj.data); // 得到当前点击的节点数据console.log(obj.checked); // 节点是否被选中console.log(obj.elem); // 得到当前节点元素…

java --- 反射

目录 一、什么是反射&#xff1f; 二、获取 Class对象 的三种方式 三、反射获取构造方法&#xff08;Constructor&#xff09; 四、反射获取成员变量&#xff08;Field&#xff09; 五、反射获取成员方法&#xff08;Method&#xff09; 一、什么是反射&#xff1f; 反射允…

app上架-您的应用在运行时,未同步告知权限申请的使用目的,向用户索取(相机)等权限,不符合华为应用市场审核标准。

上架提示 您的应用在运行时&#xff0c;未同步告知权限申请的使用目的&#xff0c;向用户索取&#xff08;相机&#xff09;等权限&#xff0c;不符合华为应用市场审核标准。 测试步骤&#xff1a;管理-添加-点击二维码&#xff0c;申请相机权限 修改建议&#xff1a;APP在调…

智能优化算法应用:基于非洲秃鹫算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于非洲秃鹫算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于非洲秃鹫算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.非洲秃鹫算法4.实验参数设定5.算法结果6.…

UE4 UE5 一直面向屏幕

一直面相屏幕&#xff0c;方法很简单 新建一个蓝图&#xff0c;如下添加组件&#xff1a; 蓝图如下&#xff1a; Rotation Actor &#xff1a;需要跟随镜头旋转的物体 Update&#xff1a;一个timeline&#xff08;替代event tick 只是为了循环&#xff09; Timeline&#xff…

百年东芝“瞄准”汽车「芯」机遇

在汽车“新四化”大变革的驱动下&#xff0c;汽车半导体市场进入需求暴涨的新周期。 “智能电动汽车所需要的半导体种类和数量正在急剧增加。” 东芝电子分立器件应用技术部经理成栋表示&#xff0c;东芝电子正在加大汽车半导体市场的布局&#xff0c;从而满足汽车电动化、智能…

深入了解Java中的锁机制

目录 1. synchronized关键字 1.1 基本概念 1.2 内置锁 1.3 限制 2. ReentrantLock 2.1 概述 2.2 公平性与非公平性 2.3 条件变量 3. 读写锁&#xff08;ReadWriteLock&#xff09; 3.1 概念 3.2 适用场景 4. StampedLock 4.1 概述 4.2 乐观读与悲观读 4.3 适用场…