TCP并发服务器

一.进程实现TCP并发服务器

#include <func.h>
#define PORT 6666           
#define IP "192.168.124.42"void handler(int arm)
{while(waitpid(-1,NULL,WNOHANG) > 0);
}
int main(int argc, const char *argv[])
{//接受17号信号signal(17, handler);int sfd = socket(AF_INET,SOCK_STREAM,0); //创建流式套接字printf("sfd create success\n");//绑定 ip 和端口//填充结构体信息struct sockaddr_in sin;sin.sin_family   =  AF_INET;sin.sin_port     = htons(PORT);sin.sin_addr.s_addr  =  inet_addr(IP);bind(sfd, (struct sockaddr*)&sin, sizeof(sin));                    //设置为监听模式listen(sfd,128);//接受客户端信息结构体struct sockaddr_in cin;socklen_t len = sizeof(cin);while(1){//创建新的套接字//父进程进行接受信息int newfd = accept(sfd, (struct sockaddr*)&cin, &len);printf("newfd= %d 客户端连接成功 __%d__\n", newfd, __LINE__);int cpid = fork(); //创建父子进程if(0 == cpid ) //子进程进行信息传递{close(sfd);char arr[128] = "";int a = 0;while(1){//收bzero(arr, sizeof(arr));a = recv(newfd, arr, sizeof(arr), 0);if(a < 0){ERR_MSG("recv");return -1;}if(a == 0){printf("newfd= %d 客户端退出\n", newfd);}printf("接受成功 客户端信息arr= %s\n", arr);//发strcpy(arr, "~_~");send(newfd, arr,sizeof(arr),0);printf("%s 发送成功\n", arr);}exit(0);}}close(sfd);return 0;
}
现象

二、线程

#include <func.h>                                                                                        
#include <pthread.h>
#define PORT 6666
#define IP "192.168.124.42"struct demo
{int newfd;struct sockaddr_in cin; //接收客户端的地址信息
};int chlid(int newfd,struct sockaddr_in cin);void* callbake(void * arg)
{int newfd = ((struct demo*)arg)->newfd;   //传参数struct sockaddr_in cin = ((struct demo*)arg)->cin;   chlid(newfd,cin);//传到函数内部相当另存一个 newfdclose(newfd);pthread_exit(NULL);
}int main(int argc, const char *argv[])
{//创建流式套接  int sfd = socket(AF_INET, SOCK_STREAM, 0);if(sfd < 0){ERR_MSG("sfd");return -1;}printf("socket create succes sfd=%d __%d__\n", sfd, __LINE__);//定义并填充地址信息结构体,给服务器绑定//真实的地址信息结构体根据地址族指定 AF_INET :man ip(7)struct sockaddr_in sin;sin.sin_family      = AF_INET;sin.sin_port        = htons(PORT);      //端口号的网络字节序 : 1024-49151sin.sin_addr.s_addr = inet_addr(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;}printf("listen succress __%d__\n", __LINE__);struct demo info; //定义结构体socklen_t addrlen = sizeof(info.cin);//获取连接成功的客户端信息,生成一个新的套接字while(1){info.newfd = accept(sfd,(struct sockaddr *)&info.cin, &addrlen);if(info.newfd < 0){ERR_MSG("accept");return -1;}printf("newfd= %d 客户端连接成功 __%d__\n",info.newfd,__LINE__);pthread_t tid;pthread_create(&tid, NULL,callbake,(void*)&infoi); // 创建一个线程pthread_detach(tid);}//关闭文件描述符if(close(sfd) < 0){ERR_MSG("close");return -1;}return 0;
}int chlid(int newfd,struct sockaddr_in cin)
{ssize_t a = 0;ssize_t b = 0;char arr[128] = "";char crr[128] = "";while(1){//接收客户端数据bzero(arr, sizeof(arr));a = recv(newfd, arr, sizeof(arr), 0);if(a < 0 ){ERR_MSG("recv");return -1;}if(a == 0){printf("对端关闭发送结束\n");printf("[%s:%d]\n",inet_ntoa(cin.sin_addr), ntohs(cin.sin_port));//客户端的端口 ipbreak;}printf("[%s:%d]\n",inet_ntoa(cin.sin_addr), ntohs(cin.sin_port));//客户端的端口 ipprintf("对端成功接收\n");printf("客户端信息:%s\n", arr);//向客户端发送数据printf("请输入需要发送的数据-->");fgets(crr,sizeof(crr), stdin);b = send(newfd, crr, sizeof(crr), 0);printf("发送成功");}
}
现象

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

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

相关文章

Matlab之State Flow

打开方式 方式一&#xff1a;在命令窗口输入State Flow或者简写sf就能打开&#xff0c;并且会自动打开State Flow 的Library。从左到右分别是图表、真值表、状态转换表、例子、顺序查看&#xff0c;可以加入到Simulink当中。 方式二&#xff1a;从Simulink Library里面添加Sta…

EB tresos 配置I2c - 实现与PF8200的读写操作

文章目录 前言一、EB工具链配置1、I2c模块1&#xff09;新建模块2&#xff09;配置General3&#xff09;配置I2cChannel 2、Port模块1&#xff09;配置SDA2&#xff09;配置SCL 二、代码分析1、申明一个I2c配置结构体数组&#xff0c;用于I2c所有读操作。2、搭建读操作函数 三、…

得物大模型平台,业务效果提升实践

一、背景 得物大模型训练与推理平台上线几个月后&#xff0c;我们与公司内部超过 10 个业务领域展开了全面的合作。在一些关键业务指标方面&#xff0c;取得了显著的成效&#xff0c;例如&#xff1a; 效率相关部门的合作&#xff0c;多维度打标总正确率取得 2 倍以上提升。利…

Spring中的上下文工具你写的可能有bug

文章目录 前言功能第一种&#xff1a;ApplicationContext第二种方式&#xff1a;ApplicationContextAware第三种&#xff1a;BeanFactoryPostProcessor 源码第一种第二种第三种 前言 本篇是针对如何写一个比较好的spring工具的一个探讨。 功能 下面三种方式&#xff0c;你觉…

智能三维数据虚拟现实电子沙盘

一、概述 易图讯科技&#xff08;www.3dgis.top&#xff09;以大数据、云计算、虚拟现实、物联网、AI等先进技术为支撑&#xff0c;支持高清卫星影像、DEM高程数据、矢量数据、无人机倾斜摄像、BIM模型、点云、城市白模、等高线、标高点等数据融合和切换&#xff0c;智能三维数…

CTF特训(一):ctfshow-RCE挑战

CTF特训(一)&#xff1a;ctfshow-RCE挑战 FLAG&#xff1a;可后来&#xff0c;除了梦以外的地方&#xff0c;我再也没有见过你 专研方向: 代码审计&#xff0c;PHP 每日emo&#xff1a;其实挺迷茫的&#xff0c;不知道该干什么,(骗你的) RCE挑战1 <?phperror_reporting(0)…

Qt Creator可视化交互界面exe快速入门3

上一期介绍的通过Qt Creator的组件直接拖拽的方式完成了一个界面&#xff0c;这期介绍按钮的信号交互。 专有名称叫信号与槽 实现方法1&#xff1a; 鼠标右键选择转化为槽就会跳出这样的界面 选择第一个为单击信号。然后就会跳转到代码界面。多了on_pushButton_clicked()。 …

2024深入评测CleanMyMac X4.14.6破解版新的功能

随着时间的推移&#xff0c;我们的Mac电脑往往会变得越来越慢&#xff0c;存储空间变得越来越紧张&#xff0c;这时候一个优秀的清理工具就显得尤为重要。作为一款备受好评的Mac清理工具&#xff0c;它能够为你的Mac带来全方位的清理和优化。在本文中&#xff0c;我们将深入评测…

ADRC-跟踪微分器TD的Maltab实现及参数整定

目录 问题描述&#xff1a; 跟踪微分器TD基本概念&#xff1a; Matlab及其实现&#xff1a; 跟踪效果&#xff1a; 例1&#xff1a;跟踪信号 sin(t) 0.5*rand(1,1)。 例2&#xff1a;跟踪部分时段为方波的信号&#xff0c;具体形式见代码get_command。 参数整定&#xf…

HarmonyOS - 基础组件绘制

文章目录 所有组件开发 tipsBlankTextImageTextInputButtonLoadingProgress 本文改编自&#xff1a;<HarmonyOS第一课>从简单的页面开始 https://developer.huawei.com/consumer/cn/training/course/slightMooc/C101667360160710997 所有组件 在 macOS 上&#xff0c;组…

【WSL2】安装和配置ubuntu

文章目录 1. 安装WSL22. 安装ubuntu2.1. 通过Microsoft Store2.1. 通过命令行 3. ubuntu的使用3.1. 创建管理员root账户3.2. 换源3.3. 安装图形化界面 1. 安装WSL2 在控制面板 - 程序 - 程序与功能中点击启用或关闭Windows功能&#xff0c;选择 虚拟机平台适用于Linux的Window…

Android Studio 如何隐藏默认标题栏

目录 前言 一、修改清单文件 二、修改代码 三、更多资源 前言 在 Android 应用中&#xff0c;通常会有一个默认的标题栏&#xff0c;用于显示应用的名称和一些操作按钮。但是&#xff0c;在某些情况下&#xff0c;我们可能需要隐藏默认的标题栏&#xff0c;例如自定义标题栏…

File Inclusion(Pikachu)

File Inclusion(local) 这里随便点击一个提交 观察url&#xff0c;显示是一个文件file1.php 可以直接通过url修改这个文件 找到自己的文件&#xff08;本地文件&#xff09;shell.php的路径写上去 就可以看到 File Inclusion&#xff08;remote&#xff09; 提交的是一个目标…

桶装水送水小程序:提升服务质量的利器

随着移动互联网的发展&#xff0c;越来越多的消费者通过手机在线购物和订购商品。如果你是一名桶装水供应商&#xff0c;想要拓展线上业务&#xff0c;那么开发一个桶装水微信小程序将是一个明智的选择。本文将指导你从零开始开发一个桶装水微信小程序&#xff0c;让你轻松完成…

Oracle初始化参数修改后,是否需要重启才能生效

可以查看 v$parameter或v$parameter2动态性能视图的ISSYS_MODIFIABLE列。此列指示是否可以使用 ALTER SYSTEM 更改参数以及更改何时生效&#xff1a; IMMEDIATE - 无论用于启动实例的参数文件的类型如何&#xff0c;都可以使用 ALTER SYSTEM 更改参数。 更改立即生效。DEFERRE…

如何底层调用最快地复制OPC数据到关系数据库

计算机上的二大应用&#xff0c;一是从WEB服务器上获得数据&#xff0c;另一种是向关系数据库中写入数据。在上集我已提出了一个从WEB上获得OPC数据的独创方法&#xff0c;现在谈谈第二种如何快速地把OPC数据写进到数据库中&#xff0c;这也是Calssic OPC最典型的一个应用场景。…

2023.12.25 关于 Redis 数据类型 Hash 常用命令、内部编码、应用场景

目录 Hash 数据类型 Hash 操作命令 HSET HGET HEXISTS HDEL HKEYS HVALS HGETALL HMGET HLEN HSETNX HINCRBY HINCRBYFLOAT HSTRLEN Hash 编码方式 理解什么是压缩 Hash 实际应用 Cache 缓存 Hash 数据类型 整体上来说 Redis 是键值对结构&#xff0c;其中 …

【深度学习目标检测】十一、基于深度学习的电网绝缘子缺陷识别(python,目标检测,yolov8)

YOLOv8是一种物体检测算法&#xff0c;是YOLO系列算法的最新版本。 YOLO&#xff08;You Only Look Once&#xff09;是一种实时物体检测算法&#xff0c;其优势在于快速且准确的检测结果。YOLOv8在之前的版本基础上进行了一系列改进和优化&#xff0c;提高了检测速度和准确性。…

物联网协议Coap之Californium CoapServer解析

目录 前言 一、CoapServer对象 1、类对象定义 2、ServerInterface接口 3、CoapServer对象 二、CoapServer服务运行分析 1、CoapServer对象实例化 1.1 调用构造方法 1.2 生成全局配置 1.3 创建Resource对象 1.4-1.8、配置消息传递器、添加CoapResource 1.9-1.12 创建线…

文献研读|Prompt窃取与保护综述

本文介绍与「Prompt窃取与保护」相关的几篇工作。 目录 1. Prompt Stealing Attacks Against Text-to-Image Generation Models&#xff08;PromptStealer&#xff09;2. Hard Prompts Made Easy: Gradient-Based Discrete Optimization for Prompt Tuning and Discovery&#…