8.19作业

1.聊天室

1.1服务器

#include <myhead.h>
#define SER_PORT 8888
#define SER_IP "192.168.174.128"struct msg
{char type;char usrname[20];char msgtext[1024];
};int main(int argc, const char *argv[])
{int sfd = socket(AF_INET,SOCK_STREAM,0);if (sfd==-1){ERRLOG("socket");}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(SER_PORT);sin.sin_addr.s_addr=inet_addr(SER_IP);if (-1==bind(sfd,(struct sockaddr*)&sin,sizeof(sin))){ERRLOG("bind");}if (-1==listen(sfd,128)){ERRLOG("listen");}struct sockaddr_in cin;socklen_t addrlen =sizeof(cin);fd_set readfds;FD_ZERO(&readfds);FD_SET(0,&readfds);FD_SET(sfd,&readfds);fd_set tempfds;char wbuf[128]="";struct sockaddr_in cin_arr[1024];int new_fd=-1;int maxfd=sfd;printf("---------服务器----------\n");while (1){tempfds=readfds;int res=select(maxfd+1,&tempfds,NULL,NULL,NULL);if (res==-1){ERRLOG("select");}else if (res==0){printf("timeout\n");return -2;}if (FD_ISSET(sfd,&tempfds)){new_fd=accept(sfd,(struct sockaddr*)&cin,&addrlen);if (new_fd==-1){ERRLOG("accept");}FD_SET(new_fd,&readfds);cin_arr[new_fd]=cin;if (new_fd>maxfd){maxfd=new_fd;}}if(FD_ISSET(0, &tempfds)){scanf("%s", wbuf);printf("触发终端输入事件:%s\n", wbuf);//讲消息发送给所有的客户端for(int i=4; i<=maxfd; i++){send(i, wbuf, strlen(wbuf), 0);}}for (int i=4;i<=maxfd;i++){if (!FD_ISSET(i,&tempfds)){continue;}struct msg msgbuf;int ret=recv(i,&msgbuf,sizeof(msgbuf),0);if (ret==0){printf("-----%s退出聊天室-------\n",msgbuf.usrname);char quit[128]="------";strcat(quit,msgbuf.usrname);strcat(quit,"退出聊天室---------\n");for (int j=4; j<=maxfd;j++ ){if (j!=i&&FD_ISSET(j,&readfds)){send(j,quit,strlen(quit),0);}}close(i);FD_CLR(i,&readfds);for (int k=maxfd;k>=0 ;k-- ){if (FD_ISSET(k,&readfds)){maxfd=k;break;}}break;}if (ret==-1){close(i);ERRLOG("recv");}if (msgbuf.type=='l'){printf("-----%s进入聊天室-------\n",msgbuf.usrname);char enter[128]="------";strcat(enter,msgbuf.usrname);strcat(enter,"进入聊天室---------\n");for (int j=4; j<=maxfd;j++ ){if (j!=i&&FD_ISSET(j,&readfds)){send(j,enter,strlen(enter),0);}}}if (msgbuf.type=='c'){printf("------%s------:发送了一条信息\n",msgbuf.usrname);char sbuf[128]="---";strcat(sbuf,msgbuf.usrname);strcat(sbuf,"---:");strcat(sbuf,msgbuf.msgtext);for (int j=4; j<=maxfd;j++ ){if (j!=i&&FD_ISSET(j,&readfds)){send(j,sbuf,strlen(sbuf),0);}}}if (msgbuf.type=='q'){printf("-----%s退出聊天室-------\n",msgbuf.usrname);char quit[128]="------";strcat(quit,msgbuf.usrname);strcat(quit,"退出聊天室---------\n");for (int j=4; j<=maxfd;j++ ){if (j!=i&&FD_ISSET(j,&readfds)){send(j,quit,strlen(quit),0);}}close(i);FD_CLR(i,&readfds);for (int k=maxfd;k>=0 ;k-- ){if (FD_ISSET(k,&readfds)){maxfd=k;break;}}break;}}}close(sfd);return 0;
}

1.2客户端

#include <myhead.h>
#define SER_PORT 8888
#define SER_IP "192.168.174.128"
struct msg
{char type;char usrname[20];char msgtext[1024];
};  
void *fun(void *arg)
{ int sfd = *(int *)arg;while (1){char buf[1100];int ret = recv(sfd, buf, sizeof(buf) - 1, 0); // 留一个位置给字符串结束符if (ret == 0){printf("服务器已关闭..\n");break;}else if (ret == -1){perror("recv error");break;}buf[ret] = '\0'; 		printf("%s", buf);fflush(stdout);}pthread_exit(NULL);
}
int main(int argc, const char *argv[])
{int sfd = socket(AF_INET,SOCK_STREAM,0);if (sfd==-1){ERRLOG("socket");}struct sockaddr_in sin;sin.sin_family=AF_INET;sin.sin_port=htons(SER_PORT);sin.sin_addr.s_addr=inet_addr(SER_IP);if (-1==connect(sfd,(struct sockaddr*)&sin,sizeof(sin))){ERRLOG("connect");}struct msg msgbuf;msgbuf.type='l';printf("请输入姓名:");fgets(msgbuf.usrname,sizeof(msgbuf.usrname),stdin);msgbuf.usrname[strlen(msgbuf.usrname)-1] = 0;strcpy(msgbuf.msgtext,"\0");send(sfd,&msgbuf,sizeof(msgbuf),0);pthread_t tid;if (0!=pthread_create(&tid,NULL,fun,&sfd)){printf("pthread_create error\n");return -1;}pthread_detach(tid);printf("欢迎进入聊天室,退出请输入quit...\n");while (1){fgets(msgbuf.msgtext,sizeof(msgbuf.msgtext),stdin);if (strcmp(msgbuf.msgtext,"quit\n")==0){msgbuf.type='q';send(sfd,&msgbuf,sizeof(msgbuf),0);break;}else{msgbuf.type='c';send(sfd,&msgbuf,sizeof(msgbuf),0);}}return 0;
}

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

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

相关文章

95、23种设计模式之建造者模式(4/23)

建造者模式&#xff08;Builder Pattern&#xff09;是23种经典设计模式中的创建型模式之一&#xff0c;其核心思想是将复杂对象的构建过程与其表示分离&#xff0c;使得同样的构建流程可以生成不同结构或配置的对象。以下从定义、结构、应用场景、优缺点及代码示例展开分析&am…

LIA-X - 一张照片生成任意表情肖像动画视频 精准操控面部动作 支持50系显卡 一键整合包下载

LIA-X 是一个可解释的潜在肖像动画生成器&#xff0c;只需要一张照片加一段驱动视频生成任意表情肖像动画&#xff0c; 旨在将驱动视频中的面部动态精细地转移到源肖像上&#xff0c;同时提供对头部、嘴巴和眼睛的精细控制。同时支持图像和视频的编辑任务&#xff0c;比如对头部…

Google 的 Opal:重新定义自动化的 AI 平台

1. 真实世界测试&#xff1a;结果出乎意料 我让 Opal 接受了三项极具挑战性的任务&#xff1a; 1.1. 博客生成器挑战 我的提示&#xff1a;“研究并撰写一篇关于 2 亿美元融资对无代码&#xff08;no-code&#xff09;影响的文章。” 发生了什么&#xff1a;Opal 不仅仅是写…

【FreeRTOS】任务通知

任务通知通知状态的三种取值taskNOT_WAITING_NOTIFICATION&#xff1a;任务没有在等待通知taskWAITING_NOTIFICATION&#xff1a;任务在等待通知taskNOTIFICATION_RECEIVED&#xff1a;任务接收到了通知&#xff0c;也被称为 pending(有数据了&#xff0c;待处理)如下面两个场景…

BEV:隐式相机视角转换-----BEVFormer

一、背景 基于imp投影的相机视角转换&#xff0c;对相机的内外参依赖较高&#xff0c;BEV 网格融合固定&#xff0c;可能对小目标不够敏感&#xff1b;考虑通过transformer的方式进行相机的视角转换&#xff0c;BEV query 可以自适应关注关键区域&#xff0c;提高小目标检测&am…

zsh 使用笔记 命令行智能提示 bash智能

目录 安装&#xff1a; 升级&#xff1a; zsh 有什么用&#xff1f; zsh 安装&#xff1a; sudo apt update sudo apt install zsh -y 升级&#xff1a; omz update zsh 有什么用&#xff1f; 相比 bash&#xff0c;zsh 更智能、更方便&#xff0c;常见优势有&#xff…

Laya的适配模式选择

文章目录SCALE_FIXED_AUTOSCALE_SHOWALLSCALE_FULLSCALE_FIXED_HEIGHTSCALE_FIXED_WIDTHSCALE_NOSCALESCALE_EXACTFITSCALE_NOBORDERdemoSCALE_FIXED_AUTO NO.1会透&#xff0c;拉伸能解决官网解释&#xff1a;应用保持设计比例不变&#xff0c;全屏显示全部内容(类似showall&…

Android中flavor的使用

在我的开发中&#xff0c;有这样的需求&#xff0c;有一个项目&#xff0c;需要适配不同的执法仪设备&#xff0c;这些执法仪都是Android系统的&#xff0c;而且有的有系统签名&#xff0c;有的没有&#xff0c;比如我共有四款型号&#xff0c;有三款有系统签名&#xff0c;每款…

如何使用DeepSeek解析长pdf的文本

直接使用python工具解析pdf文件&#xff0c;可能因为格式兼容问题&#xff0c;导致解析出的文本几乎不可读。 这里尝试使用Deepseek解析pdf文件&#xff0c;这里仅考虑文本&#xff0c;不考虑其他要素。 1 解析第一步 将pdf作为附件上传到deepseekchat界面&#xff0c;输入如…

W3C CSS 活动

W3C CSS 活动 引言 CSS(层叠样式表)是现代网页设计中不可或缺的技术之一。W3C(万维网联盟)作为全球互联网标准制定的主要组织,定期举办各类CSS相关的活动,旨在促进CSS技术的发展与普及。本文将详细介绍W3C CSS活动,包括活动内容、参与方式以及活动意义。 活动内容 1…

React Native 与 UniApp 对比

React Native 优点: 由 Facebook 开发维护&#xff0c;社区生态强大 使用 JavaScript/TypeScript 开发&#xff0c;学习曲线相对平缓 真正的原生渲染&#xff0c;性能接近原生应用 支持热重载&#xff0c;开发效率高 可访问所有原生平台 API 大型应用案例丰富(如 Faceboo…

Dijkstra和多层图 0

众所周知&#xff0c;Dijkstra经常拿来解决不带负权和环的单元最短路。我们先来看一下他的实现过程 (由于朴素版用的不多&#xff0c;我们直接上堆优化) 模板 #include<bits/stdc.h> #define mf(x,y) make_pair(x,y)//x距离&#xff0c;y节点 using namespace std; …

【驱动】RK3576:桌面操作系统基本概念

1、桌面操作系统 我们常说的Ubuntu、Debian、麒麟、统信等都是总包工头; 他们把linux内核、根文件系统(遵循 Linux 标准文件系统层次结构FHS)、包管理(软件、库)、桌面环境(GNOME、Xfce等)、初始化系统(Systemd)、各种服务与守护进程、安全组件等整合成一个完整的桌面…

sfc_os!SfcQueueValidationRequest函数分析之sfc_os!IsFileInQueue

第一部分&#xff1a;1: kd> kc# 00 sfc_os!SfcQueueValidationRequest 01 sfc_os!SfcWatchProtectedDirectoriesWorkerThread 02 kernel32!BaseThreadStart1: kd> dvRegVal 0x01129164ChangeType 5vrd 0x012bfef0Status 0n1988337684vrdexisting 0x012bffdc//// if…

100202Title和Input组件_编辑器-react-仿低代码平台项目

文章目录1 开发两个问卷组件1.1 Title组件1.2 Input组件1.3 画布静态展示TItle和Input2 Ajax获取问卷数据&#xff0c;并存储到Redux store2.1 API接口2.2 组件列表存储到Redux store统一管理2.3 重构useLoadQuestionData3 在画布显示问卷列表&#xff0c;点击可选中3.1 Redux获…

设置计划任务自动备份mysql

windows系统下1.创建mysql自动备份脚本mysqlback.bat需将此脚本存放在mysql的bin文件夹下。确保此脚本执行成功了在进行第2步做计划任务。echo off REM 定义备份目录backup_dir、备份的文件名filename set "backup_dirD:\mysqlback" set "filenamemysqlback_%da…

飞机起落架轮轴深孔中间段电解扩孔内轮廓检测 - 激光频率梳 3D 轮廓检测

摘要&#xff1a;飞机起落架轮轴深孔中间段电解扩孔内轮廓检测存在精度要求高、结构复杂等挑战。本文针对电解扩孔特殊工艺特征&#xff0c;探讨激光频率梳 3D 轮廓检测技术的应用&#xff0c;分析其检测原理、技术优势及在轮轴深孔检测中的实践&#xff0c;为电解扩孔内轮廓高…

【软考中级网络工程师】知识点之入侵防御系统:筑牢网络安全防线

目录一、入侵防御系统基础概念1.1 定义与作用1.2 与其他安全设备的关系二、入侵防御系统工作原理剖析2.1 数据包捕获与预处理2.2 深度包检测&#xff08;DPI&#xff09;技术2.3 威胁特征匹配2.4 行为分析与机器学习辅助检测2.5 威胁处理与响应机制三、入侵防御系统功能全面解析…

Python爬虫实战:研究scrapfly-scrapers库,构建电商/新闻/社交媒体数据采集系统

1. 引言 1.1 研究背景与意义 在大数据与人工智能技术深度渗透各行业的背景下,数据已成为企业决策、学术研究、产品创新的核心驱动力。互联网作为全球最大的信息载体,蕴含海量结构化与非结构化数据(如电商商品信息、新闻资讯、社交媒体动态等),其价值挖掘依赖高效的数据采…

Python爬虫反爬检测失效问题的代理池轮换与请求头伪装实战方案

Python爬虫反爬检测失效问题的代理池轮换与请求头伪装实战方案 &#x1f31f; Hello&#xff0c;我是摘星&#xff01; &#x1f308; 在彩虹般绚烂的技术栈中&#xff0c;我是那个永不停歇的色彩收集者。 &#x1f98b; 每一个优化都是我培育的花朵&#xff0c;每一个特性都是…