国庆10.01

TCPselect

代码

服务器

#include<myhead.h>
#include<sqlite3.h>
#define PORT 6666 			//端口号
#define IP "192.168.0.104" 	//IP地址//键盘事件
int jp(fd_set tempfds,int maxfd)
{char buf[128] = ""; //用来接收数据char buf1[128] = ""; //用来接收数据int snfd = -1; 		//用来接受从终端的文件描述符bzero(buf,sizeof(buf)); //清空字符串int res = scanf("%d %s",&snfd,buf); //从终端读取文件描述符和接收数据while(getchar() != 10); //循环吸收垃圾字符if(res != 2) //判断是否输入了两个数据{printf("输入数据格式错误!\n");return -1;}if(snfd <= 2 || FD_ISSET(snfd,&tempfds) == 0) //判断是否正确输入文件描述符{printf("输入非法文件描述符:%d\n",snfd);return -1;}sprintf(buf1,"%c%c%s",'s',':',buf);if(send(snfd,buf1,sizeof(buf1),0) < 0) 		//判断是否发送成功{ERR_MSG("send");return -1;}return 0;
}//客户端链接事件
int lj(int sfd,struct sockaddr_in sevecin[1024],fd_set *preadfds,int *maxfd)
{int newfd = -1;struct sockaddr_in cin; //客户端信息结构体socklen_t len = sizeof(cin); //信息结构体真实大小//连接客户端newfd = accept(sfd,(struct sockaddr *)&cin,&len);if(newfd < 0) //判断是否连接成功{ERR_MSG("newfd");return -1;}printf("[%s : %d] 客户端连接成功!\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port));sevecin[newfd] = cin; //将新的客户端连接到客户端数组中FD_SET(newfd,preadfds);//将新的文件描述符添加到读集合中*maxfd = *maxfd > newfd ? *maxfd : newfd;//更新最大文件描述符return 0;
}//客户端交互事件
int jh(int fd, struct sockaddr_in sevecin[1024],fd_set *readfds,int *maxfd)
{char buf[128] = ""; //搬运工bzero(buf,sizeof(buf)); //清空字符串//接收ssize_t res = recv(fd,buf,sizeof(buf),0);if(res < 0){ERR_MSG("recv");return -1;}else if(res == 0){printf("[%s : %d]客户端已下线!\n",inet_ntoa(sevecin[fd].sin_addr),ntohs(sevecin[fd].sin_port));close(fd); //关闭文件描述符FD_CLR(fd,readfds);//从读集合中删除该信息while(FD_ISSET(*maxfd,readfds) && (*maxfd)-- >= 0);//更新最大文件描述符return 0;}printf("[%s : %d]: %s\n",inet_ntoa(sevecin[fd].sin_addr),\ntohs(sevecin[fd].sin_port),buf);//发送strcat(buf,"*_*");if(send(fd,buf,sizeof(buf),0) < 0){ERR_MSG("send");return -1;}return 0;
}//主函数
int main(int argc, const char *argv[])
{//创建套接字int sfd = -1;if((sfd = socket(AF_INET,SOCK_STREAM,0)) < 0)//判断是否创建成功{ERR_MSG("socket");return -1;}//端口快速复用int reuse = 1;if(setsockopt(sfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse)) < 0){ERR_MSG("setsockopt");return -1;}//填充信息结构体struct sockaddr_in sin;sin.sin_family = AF_INET;sin.sin_port = htons(PORT); 			//端口号sin.sin_addr.s_addr = inet_addr(IP); 	//IP//绑定if(bind(sfd, (struct sockaddr *)&sin,sizeof(sin)) < 0)//判断是否绑定成功{ERR_MSG("bind");return -1;}//监听if(listen(sfd,128) < 0)//判断是否设置监听成功{ERR_MSG("listen");return -1;}//创建一个读集合fd_set readfds,tempfds;//清空集合FD_ZERO(&readfds);//将需要监测的文件放入到集合中FD_SET(0,&readfds);FD_SET(sfd,&readfds);//记录最大文件描述符int maxfd = sfd;//记录select函数的返回值int s_res;//备份连接成功的客户端信息struct sockaddr_in sevecin[1024];bzero(sevecin,sizeof(sevecin)); //清空数组while(1){FD_ZERO(&tempfds);tempfds = readfds;s_res = select(maxfd+1,&tempfds,NULL,NULL,NULL); //多路复用if(s_res < 0){ERR_MSG("select");return -1;}if(s_res == 0){printf("超时!\n");break;}for(int i = 0; i <= maxfd; i++){if(FD_ISSET(i,&tempfds) == 0){continue;}if(i == 0){//键盘事件jp(readfds,maxfd);}else if(i == sfd){//客户端链接事件lj(sfd,sevecin,&readfds,&maxfd);}else{//客户端交互事件jh(i,sevecin,&readfds,&maxfd);}}}if(close(sfd) < 0){ERR_MSG("close");return -1;}return 0;
}

客户端

#include<myhead.h>
#include<sqlite3.h>
#define PORT 6666    		//端口号
#define IP "192.168.0.104" 	//IP
int main(int argc, const char *argv[])
{//创建流式套接字int cfd = socket(AF_INET,SOCK_STREAM,0);if(cfd < 0) //判断是否创建成功{ERR_MSG("socket");}//填充客户端地址信息struct sockaddr_in cin;cin.sin_family = AF_INET;cin.sin_port = htons(PORT); //端口cin.sin_addr.s_addr = inet_addr(IP); //IP//连接if(connect(cfd,(struct sockaddr *)&cin,sizeof(cin)) < 0){ERR_MSG("connect");return -1;}//定义读集合fd_set readfds,tempfds;FD_ZERO(&readfds); //清空集合FD_SET(0,&readfds); //加入集合FD_SET(cfd,&readfds);char buf[128] = ""; //定义搬运工while(1){tempfds = readfds;bzero(buf,sizeof(buf));//多路复用int s_res = select(cfd+1,&tempfds,NULL,NULL,NULL);if(s_res < 0){ERR_MSG("select");return -1;}if(s_res == 0){printf("超时!\n");break;}//向服务器发送数据if(FD_ISSET(0,&tempfds)){bzero(buf,sizeof(buf));//清空字符串fgets(buf,sizeof(buf),stdin); //从终端获取数据buf[strlen(buf) - 1] = 0; //换行变成'\0'if(send(cfd,buf,sizeof(buf),0) < 0) //发送数据并判断数据是否发送成功{ERR_MSG("send");return -1;}}//从服务器接受数据if(FD_ISSET(cfd,&tempfds)){bzero(buf,sizeof(buf)); //清空字符串int res = recv(cfd,buf,sizeof(buf),0); if(res < 0) 	//判断是否成功接受{ERR_MSG("recv");return -1;}else if(res == 0)  //判断服务器是否下线{printf("服务器下线!\n");break;}printf("%s\n",buf);fflush(stdout);}}if(close(cfd)) //关闭文件描述符并判断是否关闭成功{ERR_MSG("close");return -1;}return 0;
}

现象

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

电流流过电阻时会减小吗?

我相信很多人刚接触电路时都会有这个想法&#xff1a;由于电阻会抵抗或阻碍电荷的流动&#xff0c;假如现在电流往一个方向流动&#xff0c;且电路中只有一个电阻器&#xff0c;那么从电流流出的地方到刚接触电阻中间应该有有高电流&#xff0c;从电阻刚流出到最后应该有低电流…

使用WPS自动化转换办公文档: 将Word, PowerPoint和Excel文件转换为PDF

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

Ubuntu配置深度学习环境(TensorFlow和PyTorch)

文章目录 一、CUDA安装1.1 安装显卡驱动1.2 CUDA安装1.3 安装cuDNN 二、Anaconda安装三、安装TensorFlow和pyTorch3.1 安装pyTorch3.2 安装TensorFlow2 四、安装pyCharm4.1 pyCharm的安装4.2 关联anaconda的Python解释器 五、VScode配置anaconda的Python虚拟环境 前言&#xff…

Java下正面解除警告Unchecked cast: ‘java.lang.Object‘ to ‘java.util.ArrayList‘

就是我在反序列化时&#xff0c;遇到这样一个警告&#xff1a; Unchecked cast: java.lang.Object to java.util.ArrayList<com.work1.Student>然后我去网上查&#xff0c;有些人说用SuppressWarnings(“unchecked”)去忽略警告&#xff0c;但是我觉得作为一名合格的程序…

AWS-Lambda之导入自定义包-pip包

参考文档&#xff1a; https://repost.aws/zh-Hans/knowledge-center/lambda-import-module-error-python https://blog.csdn.net/fxtxz2/article/details/112035627 简单来说,以 " alibabacloud_dyvmsapi20170525 " 包为例 ## 创建临时目录 mkdir /tmp cd ./tmp …

深入探讨 Presto 中的缓存

【squids.cn】 全网zui低价RDS&#xff0c;免费的迁移工具DBMotion、数据库备份工具DBTwin、SQL开发工具等 Presto是一种流行的开源分布式SQL引擎&#xff0c;使组织能够在多个数据源上大规模运行交互式分析查询。缓存是一种典型的提高 Presto 查询性能的优化技术。它为 Prest…

循环语句

章节目录&#xff1a; 一、while 循环1.1 句式与基本使用1.2 while...else1.3 单行语句 二、for 循环2.1 句式与基本使用2.2 for...else2.3 range() 函数 三、退出循环3.1 break3.2 continue 四、pass 语句五、结束语 一、while 循环 1.1 句式与基本使用 句式&#xff1a; w…

postgresql-管理表空间

postgresql-管理表空间 基本概念创建表空间用户授权移动表空间 修改表空间移动表空间位置 删除表空间 基本概念 在 PostgreSQL 中&#xff0c;表空间&#xff08;tablespace&#xff09;表示数据文件的存放目录&#xff0c;这些数据文件代表了数 据库的对象&#xff0c;例如表…

buuctf-[RoarCTF 2019]Easy Java

第一次遇到java类的题目 打开环境&#xff0c;很像sql 点击help 以为是文件包含&#xff0c;&#xff0c;但是不对 这里需要了解JAVA WEB目录结构 WEB-INF&#xff1a;Java的web应用安全目录&#xff1b; 此外如果想在页面访问WEB-INF应用里面的文件&#xff0c;必须要通过w…

音乐创作软件:ToneLIB Jam v4.7.8 Crack

从强大的选项卡编辑器到 3D 模式 Tonelib Jam 是一款用于播放和创作音乐的综合软件应用程序。TL Jam专为初学者和经验丰富的吉他手而设计&#xff0c;可以提供一个完美的平台来掌握乐器&#xff0c;让您轻松学习自己喜欢的歌曲或设置高效的日常吉他练习程序。TL Jam 具有功能强…

华为云云耀云服务器L实例评测|使用华为云耀云服务器L实例的CentOS部署Docker并运行Tomcat应用

目录 前言 步骤1&#xff1a;登录到华为云耀云服务器L实例 步骤2&#xff1a;安装Docker 并验证Docker安装 步骤3&#xff1a;拉取Tomcat镜像并运行Tomcat容器 步骤4&#xff1a;放行8080端口 步骤5&#xff1a;访问tomcat 步骤6&#xff1a;管理Tomcat容器 小结 前言 …

27、Flink 的SQL之SELECT (Pattern Recognition 模式检测)介绍及详细示例(7)

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…

【论文阅读】大语言模型中的文化道德规范知识

&#x1f680;Write In Front&#x1f680; &#x1f4dd;个人主页&#xff1a;令夏二十三 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd; &#x1f4e3;系列专栏&#xff1a;论文阅读 &#x1f4ac;总结&#xff1a;希望你看完之后&#xff0c;能对…

GEO生信数据挖掘(四)数据清洗(离群值处理、低表达基因、归一化、log2处理)

检索到目标数据集后&#xff0c;开始数据挖掘&#xff0c;本文以阿尔兹海默症数据集GSE1297为例 目录 离群值处理 删除 低表达基因 函数归一化&#xff0c;矫正差异 数据标准化—log2处理 完整代码 上节围绕着探针ID和基因名称做了一些清洗工作&#xff0c;还做了重复值检查…

酷开科技OTT大屏营销,做好价值塑造

洞察2023&#xff0c;随着技术与数据入局OTT领域&#xff0c;程序化投放、数据追踪、人群定位等等能力正逐步深入&#xff0c;围绕OTT大屏营销&#xff0c;新营销的价值也正在被重构。随着国内5G、人工智能、云计算等技术不断普及&#xff0c;大屏营销服务成为OTT行业发展的主流…

使用 Python 给 PDF 添加目录书签

0、库的选择——pypdf 原因&#xff1a;Python Version Support Python 3.11 3.10 3.9 3.8 3.7 3.6 2.7 pypdf>3.0 YES YES YES YES YES YES PyPDF2>2.0 YES YES YES YES YES YES PyPDF2 1.20.0 - 1.28.4 YES YES YES YES YES YES P…

1、【开始】【简介】Qlib:量化平台

【简介】1、Qlib:量化平台 简介框架简介 Qlib是一个面向AI的量化投资平台,旨在实现AI技术在量化投资中的潜力,赋能研究,并创造价值。 通过Qlib,用户可以轻松利用他们的想法来创建更好的量化投资策略。 框架 在模块层,Qlib 是由上述组件组成的平台。这些组件被设计为低耦…

Flutter笔记:关于应用程序中提交图片作为头像

Flutter笔记 关于应用程序中提交图片作为头像 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/article/details/133418554…

多目标平衡黏菌算法(MOEOSMA)求解八个现实世界受约束的工程问题

目录 1 受约束的工程问题 1.1 减速器设计问题(Speed reducer design problem) 1.2 弹簧设计问题(Spring design problem) 1.3 静压推力轴承设计问题(Hydrostatic thrust bearing design problem) 1.4 振动平台设计问题(Vibrating platform design problem) 1.5 汽车侧面碰…

HTML——列表,表格,表单内容的讲解

文章目录 一、列表1.1无序&#xff08;unorder&#xff09;列表1.2 有序&#xff08;order&#xff09;列表1.3 定义列表 二、表格**2.1 基本的表格标签2.2 演示 三、表单3.1 form元素3.2 input元素3.2.1 单选按钮 3.3 selcet元素 基础部分点击&#xff1a; web基础 一、列表 …