DAY3 多进程并发通讯

news/2024/11/25 22:22:13/

服务器代码:

#include <myhead.h>
#define IP "192.168.128.59"
#define PORT 8888
#define BACKLOG 20
void fun(int sss)
{if(sss=SIGCHLD){while(waitpid(-1,NULL,0)>0);}
}
int main(int argc, const char *argv[])
{if(signal(SIGCHLD,fun)==SIG_ERR)//捕获子进程退出的信号{perror("signal");return -1;}int oldfd=socket(AF_INET,SOCK_STREAM,0);//创建TCP类型的套接字if(oldfd==-1){perror("socket");return -1;}int n;int len=sizeof(n);if(getsockopt(oldfd,SOL_SOCKET,SO_REUSEADDR,&n,&len)==-1)//端口号快速复用检测{perror("getsockopt");return -1;}if(n){printf("端口号快速复用已启用\n");}else{printf("端口号快速复用未启用\n");}n=999;if(setsockopt(oldfd,SOL_SOCKET,SO_REUSEADDR,&n,sizeof(n))==-1)//端口号快速复用成功{perror("setsockopt");return -1;}printf("端口号快速复用成功\n");struct sockaddr_in server={.sin_family=AF_INET,.sin_port=htons(PORT),.sin_addr.s_addr=inet_addr(IP),};if(bind(oldfd,(struct sockaddr*)&server,sizeof(server))==-1)//绑定{perror("bind");return -1;}if(listen(oldfd,BACKLOG)==-1)//监听{perror("listen");return -1;}char buff[1024];struct sockaddr_in client;socklen_t client_len=sizeof(client);while(1){int newfd=accept(oldfd,(struct sockaddr*)&client,&client_len);if(newfd==-1){perror("accept");return -1;}printf("%s发来了连接请求\n",inet_ntoa(client.sin_addr));pid_t pid=fork();if(pid>0){close(newfd);}else if(pid==0){close(oldfd);while(1){int len=recv(newfd,buff,sizeof(buff),0);if(len==0){printf("客户端退出\n");break;}printf("客户端%s发来消息:%s\n",inet_ntoa(client.sin_addr),buff);strcat(buff,inet_ntoa(client.sin_addr));send(newfd,buff,sizeof(buff),0);}close(newfd);exit(0);}else{perror("fork");return -1;}}return 0;
}

客户端代码:

#include <myhead.h>
#define IP "192.168.128.59"
#define PORT 8888
int main(int argc, const char *argv[])
{int oldfd=socket(AF_INET,SOCK_STREAM,0);if(oldfd==-1){perror("socket");return -1;}struct sockaddr_in server={.sin_family=AF_INET,.sin_port=htons(PORT),.sin_addr.s_addr=inet_addr(IP),};if(connect(oldfd,(struct sockaddr *)&server,sizeof(server))==-1){perror("connect");return -1;}char buff[1024];while(1){fgets(buff,sizeof(buff),stdin);buff[strlen(buff)-1]='\0';send(oldfd,buff,sizeof(buff),0);int len=recv(oldfd,buff,sizeof(buff),0);if(len==0){printf("服务器意外退出\n");break;}printf("接收服务器:%s\n",buff);}return 0;
}


http://www.ppmy.cn/news/1549035.html

相关文章

在Ubuntu 24.04 LTS上安装飞桨PaddleX

前面我们介绍了《在Windows用远程桌面访问Ubuntu 24.04.1 LTS》本文接着介绍安装飞桨PaddleX。 PaddleX 3.0 是基于飞桨框架构建的一站式全流程开发工具&#xff0c;它集成了众多开箱即用的预训练模型&#xff0c;可以实现模型从训练到推理的全流程开发&#xff0c;支持国内外多…

高级爬虫——数据清洗与处理

数据清洗是数据处理和分析过程中极其重要的一环。爬取的原始数据往往会包含噪声、不完整性、不一致性等问题&#xff0c;因此清洗和规范化数据是获得高质量数据集的必要步骤。本节将详细介绍 Pandas 库的基本使用 和 数据清洗的常用操作&#xff0c;结合代码实例&#xff0c;为…

字符串学习篇-java

API&#xff1a;应用程序编程接口。 ctrlaltv,自动生成一个变量接收数据 字符串&#xff1a; 注意点 创建string对象两种方式 1.直接赋值 2.构造器来创建 详情看黑马JAVA入门学习笔记7-CSDN博客 常用方法&#xff1a;比较 引用数据类型&#xff0c;比较的是地址值。 b…

短剧系统小程序开发产品设计实例解析

短剧系统小程序开发架构深度解析引言 随着数字娱乐市场的蓬勃发展&#xff0c;短剧因其紧凑的情节、创新的表现形式和便捷的观看体验&#xff0c;迅速吸引了大量观众的关注。作为承载短剧内容的重要平台&#xff0c;短剧系统小程序不仅需要在用户体验、内容管理等方面做到极致&…

华纳云:多IP服务器在网站SEO中的作用是什么

搜索引擎优化(SEO)已成为网站运营不可或缺的一部分。它不仅能够提升网站在搜索引擎结果页面(SERP)中的排名&#xff0c;还能有效增加网站的曝光度和流量。而多IP服务器作为一种高级的网络技术&#xff0c;在SEO策略中扮演着越来越重要的角色。多IP服务器是指一台物理服务器上配…

Android 从本地选择视频,用APP播放或进行其他处理

1.效果展示&#xff1a; 点击选择视频按钮后&#xff1a; 点击用相册打开后&#xff1a; 点击视频列表中的某个视频&#xff0c;会返回APP并自动播放所选视频 2.三步实现&#xff1a; 跳转到本地视频列表点击想播放的视频&#xff0c;带回所选视频数据播放该视频&#xff0c;…

基于SpringBoot+Vue的影院管理系统(含演示视频+运行截图+说明文档)

web启动链接地址&#xff1a; http://localhost:8082&#xff08;管理端&#xff09; http://localhost:8081&#xff08;用户端&#xff09; http://localhost:8082&#xff08;员工端&#xff09; 一、项目介绍 基于框架的系统&#xff0c;系统分为用户、员工和管理员三个…

Java-06 深入浅出 MyBatis - 一对一模型 SqlMapConfig 与 Mapper 详细讲解测试

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 大数据篇正在更新&#xff01;https://blog.csdn.net/w776341482/category_12713819.html 目前已经更新到了&#xff1a; MyBatis&#xff…