当前位置: 首页 > news >正文

5-26作业

网络聊天室

服务器:

  1 #include <myhead.h>2 int main(int argc, const char *argv[])3 {4     if(argc!=3)5     {6         printf("请输入IP和端口号\n");7         return -1;8     }9     int sfd = socket(AF_INET, SOCK_DGRAM, 0);10     if(sfd == -1)11     {12         perror("socket error");13         return -1;14     }15 16     int reuse = 1;17     if(setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse))==-1)18     {19         perror("setsockopt error");20         return -1;21     }22 23     struct sockaddr_in sin;24     sin.sin_family = AF_INET;25     sin.sin_port = htons(atoi(argv[2]));26     sin.sin_addr.s_addr = inet_addr(argv[1]);27 28     //2.2 绑定29     if(bind(sfd, (struct sockaddr*)&sin, sizeof(sin)) ==-1)30     {31         perror("bind error");32         return -1;33     }34     printf("bind success\n");35 36     struct pollfd fall[2];                                                                                                                                                                                                                                                                                                                                                            37     fall[0].fd=0;38     fall[0].events=POLLIN;39     fall[1].fd=sfd;40     fall[1].events=POLLIN;41 42     //地址组43     struct node144     {45         char type;46         char name[128];47         struct sockaddr_in sin;48     };49     struct node1 node[1024];50     for(int j=0;j<1024;j++)51     {52         node[j].type='0';53     }54     struct sockaddr_in cin;55     socklen_t addrlen = sizeof(cin);56 57     //数据包58     struct rbuf159     {60         char type;61         char name[128];62         char data[1024];63     };64     struct rbuf1 rbuf;65     while(1)66     {67         int res=poll(fall,2,-1);68         if(res==-1)69         {70             perror("poll");71             return -1;72         }73         else if(res==0)74         {75             printf("timeout\n");76             return -1;77         }78 79         if(fall[0].revents==POLLIN)80         {81             bzero(&rbuf,sizeof(rbuf));82             fgets(rbuf.data,sizeof(rbuf.data),stdin);83             rbuf.data[strlen(rbuf.data)-1]='\0';84             char fun[1024]="**system**:";85 86             strcat(fun,rbuf.data);87             strcpy(rbuf.data,fun);88             for(int j=0;j<1024;j++)89             {90                 sendto(sfd,&rbuf,sizeof(rbuf),0,(struct sockaddr*)&node[j].sin,addrlen);91             }92             printf("**system** [%s:%d]chat成功\n",inet_ntoa(sin.sin_addr),ntohs(sin.sin_port));93         }94 95         else if(fall[1].revents==POLLIN)96         {97             bzero(&rbuf,sizeof(rbuf));98             recvfrom(sfd,&rbuf,sizeof(rbuf),0,(struct sockaddr*)&cin,&addrlen);99             if(rbuf.type=='0')
100             {
101                 strcpy(rbuf.data,"请输入姓名>>>");
102                 rbuf.type='1';
103                 sendto(sfd,&rbuf,sizeof(rbuf),0,(struct sockaddr*)&cin,addrlen);
104             }
105 
106             else if(rbuf.type=='1')
107             {
108                 for(int j=0;j<1024;j++)
109                 {
110                     if(strcmp(node[j].name,rbuf.name)==0)
111                     {
112                         node[j].type='0';
113                     }
114                 }
115                 for(int j=0;j<1024;j++)
116                 {
117                     if(node[j].type=='0')
118                     {
119                         node[j].type='1';
120                         strcpy(node[j].name,rbuf.name);
121                         node[j].sin=cin;
122                         break;
123                     }
124                 }
125                 printf("%s [%s:%d]登录成功\n",rbuf.name,inet_ntoa(cin.sin_addr),ntohs(cin.sin_port));
126                 char fun[128]="-----";
127                 strcat(fun,rbuf.data);
128                 strcpy(rbuf.data,fun);
129                 strcat(rbuf.data,"已登录-----");
130 
131                 for(int j=0;j<1024;j++)
132                 {
133                     if(node[j].type=='1')
134                     {
135                         if(strcmp(node[j].name,rbuf.name)!=0)
136                             sendto(sfd,&rbuf,sizeof(rbuf),0,(struct sockaddr*)&node[j].sin,addrlen);
137                     }
138                 }
139             }
140 
141             else if(rbuf.type=='2')
142             {
143                 char run[1024]="";
144                 strcat(run,rbuf.name);
145                 strcat(run,":");
146                 strcat(run,rbuf.data);
147                 strcpy(rbuf.data,run);
148                 strcat(run,":");
149                 for(int j=0;j<1024;j++)
150                 {
151                     if(node[j].type=='1')
152                     {
153                         if(strcmp(node[j].name,rbuf.name)!=0)
154                             sendto(sfd,&rbuf,sizeof(rbuf),0,(struct sockaddr*)&node[j].sin,addrlen);
155                     }
156                 }
157                 printf("%s [%s:%d]chat成功\n",rbuf.name,inet_ntoa(cin.sin_addr),ntohs(cin.sin_port));
158             }
159         }
160     }
161     close(sfd);
162     return 0;
163 }
164 

客户端:

 28 29     //收数据包30     struct rbuf131     {32         char type;33         char name[128];34         char data[1024];35     };36     struct rbuf1 buf;37     buf.type='0';38     strcpy(buf.data,"");39     strcpy(buf.name,"");40 41     //发数据包42     struct rbuf1 rbuf;43     rbuf.type='0';44     strcpy(rbuf.data,"");45     strcpy(rbuf.name,"");46 47     sendto(sfd,&rbuf,sizeof(rbuf),0,(struct sockaddr*)&sin,addrlen);48 49     while(1)50     {51         int fel=poll(fall,2,-1);52         if(fel==-1)53         {54             perror("poll");55             return -1;56         }57         else if(fel==0)58         {59             printf("timeout");60             return -1;                                                                              61         }62 63         if(fall[0].revents==POLLIN)64         {65             if(rbuf.type=='1')66             {67                 rbuf.type='2';68                 bzero(rbuf.data,sizeof(rbuf.data));69                 fgets(rbuf.data,sizeof(rbuf.data),stdin);70                 rbuf.data[strlen(rbuf.data)-1]='\0';71                 sendto(sfd,&rbuf,sizeof(rbuf),0,(struct sockaddr*)&sin,addrlen);72                 rbuf.type='1';73             }74         }75 76         else if(fall[1].revents==POLLIN)77         {78             if(rbuf.type=='0')79             {80                 bzero(&buf,sizeof(buf));81                 bzero(rbuf.data,sizeof(rbuf.data));82                 recvfrom(sfd,&buf,sizeof(buf),0,(struct sockaddr*)&sin,&addrlen);83                 printf("%s",buf.data);84                 fgets(rbuf.data,sizeof(rbuf.data),stdin);85                 rbuf.data[strlen(rbuf.data)-1]='\0';86                 strcpy(rbuf.name,rbuf.data);87                 rbuf.type='1';88                 sendto(sfd,&rbuf,sizeof(rbuf),0,(struct sockaddr*)&sin,addrlen);89 90             }91             else if(rbuf.type=='1')92             {93                 bzero(&buf,sizeof(buf));94                 recvfrom(sfd,&buf,sizeof(rbuf),0,(struct sockaddr*)&sin,&addrlen);95                 printf("%s\n",buf.data);96             }97         }98     }99     close(sfd);
100     return 0;
101 }
~                                                                                                       

相关文章:

5-26作业

网络聊天室 服务器&#xff1a; 1 #include <myhead.h>2 int main(int argc, const char *argv[])3 {4 if(argc!3)5 {6 printf("请输入IP和端口号\n");7 return -1;8 }9 int sfd socket(AF_INET, SOCK_DGRAM, 0);10 if(…...

2024.05.28学习记录

1. 小林coding 计网复习 2.代码随想录刷题. 图论.和复习数组.链表 3.rosebush完成select组件...

撤销最近一次的提交,使用git revert 和 git reset的区别

文章目录 工作区 暂存区 本地仓库 远程仓库需求&#xff1a;已推送到远程仓库&#xff0c;想要撤销操作git revert &#xff08;添加新的提交来“反做”之前的更改&#xff0c;云端会残留上次的提交记录&#xff09;git reset&#xff08;相当于覆盖上次的提交&#xff09;1.--…...

MySQL详细安装、配置过程,多图,详解

本文适合centos7环境下安装mysql&#xff0c;在安装和卸载过程中&#xff0c;都在root用户下完成。文章目录 清理环境获取mysql官方yum源安装mysql yum源安装mysql服务安装报错解决办法验证是否安装完成启动mysql服务登录服务方法一&#xff1a;方法二&#xff1a;方法三&#…...

音视频学习规划

文章目录 概述闲聊点 小结 概述 最近在学习音视频&#xff0c;觉得还是要先写个提纲&#xff0c;给自己制定下学习路线及目标。先写下我的个人流程及思路。 ffmpeg的命令ffmpeg api播放器流媒体RTMP&#xff0c;HLS 闲聊点 先说下学习命令行吧&#xff0c;学习命令行是为了…...

代码随想录算法训练营第21天|● 530.二叉搜索树的最小绝对差 ● 501.二叉搜索树中的众数 ● 236. 二叉树的最近公共祖先

二叉搜索树的最小绝对差 题目连接 https://leetcode.cn/problems/minimum-absolute-difference-in-bst/ 思路&#xff1a; 利用二叉搜索树的中序遍历的特性&#xff0c;将二叉树转成有序数组&#xff0c;进而求任意两个数的最小绝对差。 代码 /*** Definition for a bina…...

K8S中Prometheus+Grafana监控

1.介绍 phometheus:当前一套非常流行的开源监控和报警系统。 运行原理&#xff1a;通过HTTP协议周期性抓取被监控组件的状态。输出被监控组件信息的HTTP接口称为exporter。 常用组件大部分都有exporter可以直接使用&#xff0c;比如haproxy,nginx&#xff0c;Mysql,Linux系统信…...

题解:CF1968F(Equal XOR Segments)

题解&#xff1a;CF1968F&#xff08;Equal XOR Segments&#xff09; 题目翻译&#xff1a;定义一个序列是好&#xff0c;当且仅当可以将其分成大于 1 1 1 份&#xff0c;使得每个部分的异或和相等。现在给定一个长度为 n n n 的序列 a a a&#xff0c;以及 q q q 次查询…...

Python操作MySQL实战

文章导读 本文用于巩固Pymysql操作MySQL与MySQL操作的知识点&#xff0c;实现一个简易的音乐播放器&#xff0c;拟实现的功能包括&#xff1a;用户登录&#xff0c;窗口显示&#xff0c;加载本地音乐&#xff0c;加入和删除播放列表&#xff0c;播放音乐。 点击此处获取参考源…...

【Linux系统】进程间通信

本篇博客整理了进程间通信的方式管道、 system V IPC的原理&#xff0c;结合大量的系统调用接口&#xff0c;和代码示例&#xff0c;旨在让读者透过进程间通信去体会操作系统的设计思想和管理手段。 目录 一、进程间通信 二、管道 1.匿名管道 1.1-通信原理 1.2-系统调用 …...

北大国际医院腹膜后纤维化课题组 多学科协作开辟治疗新径

腹膜后纤维化(Retroperitoneal Fibrosis,简称RPF)是一种罕见的自身免疫性疾病,其核心特征是纤维组织的异常增生与硬化。这种疾病主要影响肾脏下方的腹主动脉和髂动脉区域,增生的纤维组织会逐渐压迫周围的输尿管和下腔静脉,从而导致一系列并发症,包括主动脉瘤、肾功能衰竭等,甚至…...

面试数据库八股文十问十答第七期

面试数据库八股文十问十答第七期 作者&#xff1a;程序员小白条&#xff0c;个人博客 相信看了本文后&#xff0c;对你的面试是有一定帮助的&#xff01;关注专栏后就能收到持续更新&#xff01; ⭐点赞⭐收藏⭐不迷路&#xff01;⭐ 1&#xff09;索引是越多越好吗&#xff…...

【C++题解】1133. 字符串的反码

问题&#xff1a;1133. 字符串的反码 类型&#xff1a;字符串 题目描述&#xff1a; 一个二进制数&#xff0c;将其每一位取反&#xff0c;称之为这个数的反码。下面我们定义一个字符的反码。 如果这是一个小写字符&#xff0c;则它和字符 a 的距离与它的反码和字符 z 的距离…...

【Python编程实战】基于Python语言实现学生信息管理系统

&#x1f3a9; 欢迎来到技术探索的奇幻世界&#x1f468;‍&#x1f4bb; &#x1f4dc; 个人主页&#xff1a;一伦明悦-CSDN博客 ✍&#x1f3fb; 作者简介&#xff1a; C软件开发、Python机器学习爱好者 &#x1f5e3;️ 互动与支持&#xff1a;&#x1f4ac;评论 &…...

AI网络爬虫:批量爬取电视猫上面的《庆余年》分集剧情

电视猫上面有《庆余年》分集剧情&#xff0c;如何批量爬取下来呢&#xff1f; 先找到每集的链接地址&#xff0c;都在这个class"epipage clear"的div标签里面的li标签下面的a标签里面&#xff1a; <a href"/drama/Yy0wHDA/episode">1</a> 这个…...

md5强弱碰撞

一&#xff0c;类型。 1.弱比较 php中的""和""在进行比较时&#xff0c;数字和字符串比较或者涉及到数字内容的字符串&#xff0c;则字符串会被转换为数值并且比较按照数值来进行。按照此理&#xff0c;我们可以上传md5编码后是0e的字符串&#xff0c;在…...

【Docker故障处理篇】运行容器报错“docker: failed to register layer...file exists.”解决方法

【Docker故障处理篇】运行容器报错“docker: failed to register layer...file exists.” 一、Docker环境介绍2.1 本次环境介绍2.2 本次实践介绍二、故障现象2.1 运行容器消失2.2 重新运行容器报错三、故障分析四、故障处理4.1 停止 Docker 服务:4.2 备份重要数据4.3 清理冲突…...

小红书-社区搜索部 (NLP、CV算法实习生) 一面面经

😄 整个流程按如下问题展开,用时60min左右面试官人挺好,前半部分问问题,后半部分coding一道题。 各位有什么问题可以直接评论区留言,24小时内必回信息,放心~ 文章目录 1、自我介绍2、介绍下项目:微信-多模态小视频分类2.1、看你用了cross-att来融合多模态信息,cross…...

解读makefile中的.PHONY

在 Makefile 中&#xff0c;.PHONY 是一个特殊的目标&#xff0c;用于声明伪目标&#xff08;phony target&#xff09;。伪目标是指并不代表实际构建结果的目标&#xff0c;而是用来触发特定动作或命令的标识。通常情况下&#xff0c;.PHONY 会被用来声明一组需要执行的动作&a…...

linux配置防火墙端口

配置防火墙&#xff0c;添加或删除端口&#xff0c;需要有root权限。 防火墙常用命令如下&#xff1a; 1.查看防火墙状态&#xff1a; systemctl status firewalld active(running)&#xff1a;开启状态&#xff0c;正在运行中 inactive(dead)&#xff1a;关闭状态&#xff…...

SenseVoice-Small ONNX开源方案:支持私有化部署的国产语音识别新标杆

SenseVoice-Small ONNX开源方案&#xff1a;支持私有化部署的国产语音识别新标杆 1. 项目简介 SenseVoice-Small ONNX是一个专为普通硬件设计的轻量化语音识别工具。基于FunASR开源框架的SenseVoiceSmall模型&#xff0c;通过Int8量化技术大幅降低资源消耗&#xff0c;让语音…...

7个关键步骤:用Meshroom实现高精度三维重建的完整指南

7个关键步骤&#xff1a;用Meshroom实现高精度三维重建的完整指南 【免费下载链接】Meshroom 3D Reconstruction Software 项目地址: https://gitcode.com/gh_mirrors/me/Meshroom 开源三维重建工具Meshroom凭借摄影测量实战技术&#xff0c;为用户提供了从二维图像到点…...

别再只用Whisper了!WhisperX + Python 实战:如何为3分钟视频批量ASR搭建高效处理流水线

WhisperX Python 实战&#xff1a;构建高吞吐量语音识别流水线的工程实践 在音视频内容爆炸式增长的时代&#xff0c;语音识别技术已成为内容生产、知识管理、数字营销等领域的基础设施。当处理规模从单个文件扩展到数百小时的音视频素材时&#xff0c;传统单次处理模式显露出…...

hgproxy4.0.35.0之前版本数据库连接卡在parse状态

文章目录环境症状问题原因解决方案环境 系统平台&#xff1a;Linux x86-64 Red Hat Enterprise Linux 7 版本&#xff1a;4.5.10 症状 查询数据库后台连接进程&#xff0c;发现主备节点均有超过几天的长连接&#xff0c;且状态卡在parse状态 问题原因 数据库会话sql出错后…...

超越rviz_satellite:用Mapviz实现高精度SLAM地图与卫星图叠加(附开源数据集测试)

超越rviz_satellite&#xff1a;用Mapviz实现高精度SLAM地图与卫星图叠加&#xff08;附开源数据集测试&#xff09; 当自动驾驶车辆在复杂城市环境中穿行&#xff0c;或是无人机在未知区域执行勘探任务时&#xff0c;将实时构建的SLAM地图与卫星影像精准叠加&#xff0c;已成…...

springboot+vue基于web的社区交互图书管理系统的设计系统

目录同行可拿货,招校园代理 ,本人源头供货商系统功能模块划分关键技术实现数据库设计要点社区交互设计安全防护措施项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作同行可拿货,招校园代理 ,本人源头供货商 系统功能模块划分 后…...

从“单点防御”到“全局联动”:手把手教你用EDR和NDR构建企业安全闭环

从“单点防御”到“全局联动”&#xff1a;手把手教你用EDR和NDR构建企业安全闭环 当企业的安全团队还在疲于应对零散的端点告警和网络流量异常时&#xff0c;攻击者早已开始采用自动化工具进行横向移动。传统孤立的防御手段就像用多个单点摄像头监控银行金库——每个摄像头都…...

Ubuntu 22.04下用mingw-w64交叉编译Windows程序的完整指南(附CMake配置)

Ubuntu 22.04下用mingw-w64交叉编译Windows程序的完整指南&#xff08;附CMake配置&#xff09; 在跨平台开发领域&#xff0c;能够从Linux系统生成Windows可执行文件是一项极具实用价值的技能。对于使用Ubuntu 22.04 LTS的开发者来说&#xff0c;mingw-w64工具链提供了稳定高…...

告别手动更新!用Python+Pandas快速解析通达信tnf文件,构建本地股票代码库

用PythonPandas高效解析通达信TNF文件&#xff1a;打造自动化股票代码库 每次手动更新股票代码库时&#xff0c;那些重复性操作总让我想起学生时代抄写课文的场景——机械、耗时且容易出错。作为量化研究员&#xff0c;我们真正需要的是把时间花在策略优化上&#xff0c;而不是…...

告别osgQt!用osgQOpenGLWidget在Qt6中轻松加载OsgEarth三维地球(附完整代码)

现代Qt6与OsgEarth集成实战&#xff1a;osgQOpenGLWidget替代方案详解 如果你正在使用Qt6开发三维地理可视化应用&#xff0c;却苦于找不到合适的OpenSceneGraph(OSG)集成方案&#xff0c;这篇文章将为你提供一条清晰的迁移路径。随着Qt和OSG版本的迭代&#xff0c;传统的osgQt…...