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 }
~                                                                                                       

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

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

相关文章

MySQL数据库案例实战教程:数据类型、语法与高级查询详解

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

xss-labs之level9、level10

一、level9 1、测试分析 尝试了之前的payload&#xff0c;发现都不行&#xff0c;看源码发现多了个strpos函数&#xff0c; strpos() 是一个在 PHP 中用于查找子串首次出现位置的函数。它接受两个参数&#xff1a;要搜索的字符串&#xff08;主字符串&#xff09;和要查找的子…

AAAI2024 基于扩散模型 多类别 工业异常检测 DiAD

前言 本文分享一个基于扩散模型的多类别异常检测框架&#xff0c;用于检测工业场景的缺陷检测或异常检测。 设计SG语义引导网络&#xff0c;在重建过程中有效保持输入图像的语义信息&#xff0c;解决了LDM在多类别异常检测中的语义信息丢失问题。高效重建&#xff0c;通过在潜…

开源大模型与闭源大模型:谁将引领AI的未来?

前言 在AI领域&#xff0c;开源大模型和闭源大模型一直并存&#xff0c;各自有其独特的优势和挑战。下面&#xff0c;我们将从数据隐私、商业应用和社区参与三个方向&#xff0c;对这两种模型进行深入探讨。 一、数据隐私 开源大模型&#xff1a; 1. 透明度高&#xff1a; …

SSDReporter for Mac:守护您硬盘健康的守护者

SSDReporter for Mac是一款专为Mac用户设计的固态硬盘&#xff08;SSD&#xff09;健康状况检测工具。以下是关于这款软件的详细介绍&#xff1a; SSDReporter for Mac的主要功能是全面检测、监控Mac设备中SSD的工作状态&#xff0c;以确保数据的完整性和设备的稳定性。它能够…

【problem】解决EasyExcel导出日期数据显示为#####问题

前言 在使用EasyExcel进行数据导出时&#xff0c;你可能遇到日期或其他数据在Excel中显示为“#######”的情况&#xff0c;这通常是因为列宽不足以展示单元格内的全部内容。本文将指导你如何通过简单的步骤解决这一问题&#xff0c;并确保导出的Excel文件自动调整列宽或直接指…

文件传输服务应用1——java集成smb2/3实现文件共享方案详细教程和windows共享服务使用配置

在实际项目开发过程中&#xff0c;读取网络资源或者局域网内主机的文件是必要的操作和需求。而FTP&#xff08;文件传输协议&#xff09;和SMB&#xff08;服务器消息块&#xff09;是两种最为常见的文件传输协议。它们各自在文件传输领域拥有独特的优势和特点&#xff0c;但同…

汇编原理()二进制 跳转指令

一.二进制 two complement reprentation&#xff08;补码&#xff09; 二进制的运算&#xff1a; 6的二进制 0110 -6的二进制 如何表示&#xff1f; 四个bit的第一个bit表示符号&#xff1a;1负0正 -6表示为1010 解释&#xff1a; 0 0000 1 0001 -1 1111&#xff08;由 …

【学习笔记】TypeScript

TypeScript 1、介绍 1.1、概述 1.2、基本特点 1.3、优势 1.4、开发环境搭建2、基础 2.1、类型声明 2.2、配置相关 2.2.1 自动编译文件 2.2.2 配置文件 tsconfig.json 2.2.3 使用 webpack 打包 ts 代码 …

十种常用数据分析方法

描述性统计分析&#xff08;Descriptive Statistics&#xff09; 使用场景&#xff1a;用来总结数据的基本特征&#xff0c;如平均值、中位数、标准差等。 优势&#xff1a;简单易懂&#xff0c;快速总结数据。 劣势&#xff1a;无法深入挖掘数据的潜在关系。 模拟数据及示例…

7B2PRO5.4.2主题 wordpress主题开心版免授权源码

这款7B2 PRO主题也是很多小伙伴儿喜欢的一个主题&#xff0c;有伙伴儿反馈说想学习下新版本&#xff0c;这不就来了&#xff0c;免受权开心版本可供学习使用&#xff0c;要运营还是尊重下版权到官网进行购买吧。 下载&#xff1a;7B2PRO5.4.2 wordpress主题免授权直接安装_麦…

软件工程作业5

某培训机构入学管理系统有报名、交费和就读等多项功能&#xff0c;下面是对其各项功能的说明&#xff1a; 1、报名&#xff1a;由报名处负责&#xff0c;需要在学员登记表上进行报名登记,需要查询课程表让学员选报课程&#xff0c;学院所报课程将记录到学员选课表 2、交费&am…

vim方向键乱码

问题描述 有的docker容器使用的父镜像比较精简&#xff0c;安装的vim不带vimrc文件&#xff0c;只支持使用 h, j, k, l来进行方向键的移动。具体的历史背景是&#xff1a; 在 Vim 的前身 vi 编辑器开发时&#xff08;1976 年&#xff09;&#xff0c;很多终端并不具备现代键盘…

C#算数运算符

赋值运算符 符号&#xff1a; 先看右侧 再看左侧 将右侧的数据赋值给左侧的变量 使用方法: int num 5; 加 符号&#xff1a; 先计算 在赋值 右边两个值相加 赋值给左边 使用方法: int i 1 2; 减 符号&#xff1a;- 右边两个值相减 赋值给左边 使用方法: int i 4 -…

The First项目报告:解读ZK技术的跨链巨头Polyhedra Network

4 月 17 日&#xff0c;零知识证明&#xff08;ZK&#xff09;基础设施开发团队 Polyhedra Network与谷歌云达成战略合作&#xff0c;以响应 Web2 与 Web3 市场对于该技术日益增长的需求。双方将基于Polyhedra的尖端研究及专有算法通过谷歌云提供的零知识即服务向全球开发者开放…

JS-01基本介绍和数据类型

目录 1 JS基本介绍 2 数据类型 2.1 基本数据类型&#xff08;值类型&#xff09; 2.2 复杂数据类型&#xff08;引用类型&#xff09; 2.2 关于undefined类型 1 JS基本介绍 ## JS基本介绍 JS的用途&#xff1a;Javascript可以实现浏览器端、服务器端(nodejs)。。。 浏览器…

hexo静态博客 部署到xxx.github.io github 静态页

hexo安装 npm install hexo-cli -g hexo init blog cd blog npm install hexo server key配置 ssh-keygen -t ed25519 -C “emaile.com” 添加key到github err gitgithub.com: Permission denied (publickey). fatal: Could not read from remote repository. 配置GitHub仓…

精酿啤酒:品质与口感在不同消费人群中的差异与共性

在啤酒市场中&#xff0c;不同消费人群对品质与口感的喜好存在一定的差异。然而&#xff0c;Fendi club啤酒凭借其卓着的品质和与众不同的口感&#xff0c;在不同消费人群中都展现出一定的共性。 从性别差异来看&#xff0c;男性消费者通常更注重啤酒的品质和口感&#xff0c;而…

TiDB-从0到1-体系结构

TiDB从0到1系列 TiDB-从0到1-体系结构TiDB-从0到1-分布式存储TiDB-从0到1-分布式事务 一、TiDB体系结构图 TiDB基础的体系架构中有4大组件 TiDB Server&#xff1a;用于处理客户端的请求PD&#xff1a;体系的大脑&#xff0c;存储元数据信息TiKV&#xff1a;存储数据TiFlash…

【机器学习】【深度学习】批量归一化(Batch Normalization)

概念简介 归一化指的是将数据缩放到一个固定范围内&#xff0c;通常是 [0, 1]&#xff0c;而标准化是使得数据符合标准正态分布。归一化的作用是使不同特征具有相同的尺度&#xff0c;从而使模型训练更加稳定和快速&#xff0c;尤其是对于使用梯度下降法的算法。而标准化的作用…