网络编程day2.2~day3——TCP并发服务器

embedded/2024/11/25 12:57:33/

笔记脑图

作业:多进程多线程并发服务器实现一遍提交。

多进程

#include <stdio.h>
#include <string.h>
#include <myhead.h>
#define IP "192.168.60.44"
#define PORT 6666
#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);if(oldfd==-1){perror("socket");return -1;}//int n=1;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;}struct sockaddr_in client;socklen_t client_len=sizeof(client);char buff[1024];while(1){//int newfd=accept(oldfd,(struct sockaddr *)&client,&client_len);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("%s客户端退出\n",inet_ntoa(client.sin_addr));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 <stdio.h>
#include <string.h>
#include <myhead.h>
#define IP "192.168.60.44"
#define PORT 6666
#define BACKLOG 1024
typedef struct 
{struct sockaddr_in client;int newfd;
}stu;
void *fun(void *sss)
{int newfd=((stu *)sss)->newfd;struct sockaddr_in client=((stu *)sss)->client;printf("%s发来消息\n",inet_ntoa(client.sin_addr));char buff[1024];while(1){int len=recv(newfd,buff,sizeof(buff),0);if(len==0){printf("客户端退出\n");break;}printf("收到消息:%s\n",buff);strcat(buff,"1973");send(newfd,buff,sizeof(buff),0);}pthread_exit(NULL);
}
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(bind(oldfd,(struct sockaddr *)&server,sizeof(server))==-1){perror("bind");return -1;}//if(listen(oldfd,BACKLOG)==-1){perror("listen");return -1;}struct sockaddr_in client;socklen_t client_len=sizeof(client);while(1){int newfd=accept(oldfd,(struct sockaddr *)&client,&client_len);stu a;a.newfd=newfd;a.client=client;pthread_t tid;tid=pthread_create(&tid,NULL,fun,&a);if(tid==-1){perror("pthread_create");return -1;}pthread_detach(tid);}return 0;
}


http://www.ppmy.cn/embedded/140381.html

相关文章

Java项目实战II基于SPringBoot的玩具销售商城管理系统(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、核心代码 五、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 随着儿童娱乐与教育需求的…

图像处理 - 色彩空间转换

色彩空间转换的含义与原理 色彩空间转换是指将一种颜色模型或表示方式中的颜色数据映射到另一种颜色模型中的过程。色彩空间&#xff08;Color Space&#xff09;本质上是一个三维坐标系统&#xff0c;每个点都表示图像中的某种颜色。在实际应用中&#xff0c;由于不同的色彩空…

子矩阵的和(矩阵前缀和)

题目链接&#xff1a;用户登录 - C语言网 在这里可以模拟一下就知道了&#xff0c; 记录每个 &#xff08;0&#xff0c;0&#xff09; 到 &#xff08;i,j&#xff09;的矩阵和 然后区间子矩阵的和&#xff0c;就减去多余的部分的矩阵和就可以得到了 子矩阵的和 然后 这里最…

一、语言及算法基础篇--​基础(一) C++语言​--第一章 C++语言入门

一、语言及算法基础篇 基础(一) C语言 第一章 C语言入门 题号题目名称题解1000入门测试题目1000&#xff1a;入门测试题目&#xff08;http://ybt.ssoier.cn:8088/problem_show.php?pid1000&#xff09;2060【例1.1】计算机输出2061【例1.2】梯形面积2061&#xff1a;【例1.…

晶圆测试中自动化上下料的重要性与应用

随着科技的飞速发展&#xff0c;硅光技术在通信、数据处理等领域展现出巨大的应用潜力。硅光晶圆作为硅光技术的核心源头组件&#xff0c;其性能的稳定性和可靠性对于整个系统的运行至关重要。因此&#xff0c;对硅光晶圆的测试成为生产过程中不可或缺的一环。近年来&#xff0…

CentOS8.5.2111(7)完整的Apache综合实验

一、实验目标 1.掌握Linux系统中Apache服务器的安装与配置&#xff1b; 2.掌握个人主页、虚拟目录、基于用户和主机的访问控制及虚拟主机的实现方法。 二、实验要求 练习使用linux系统下WEB服务器的配置方法。 三、实验背景 重庆工程学院为筹备“重庆工程大学”特申请了c…

python 什么是数据类dataclass,以及它的应用场景

一、什么是数据类dataclass? dataclass 是 Python 3.7 引入的一个模块&#xff0c;旨在简化类的定义&#xff0c;特别是对于那些主要用于存储数据的类。它通过自动生成常见的方法&#xff08;如 __init__、__repr__、__eq__ 等&#xff09;来减少样板代码&#xff0c;使得开发…

C#构建一个简单的前馈神经网络

1. 神经网络的基本概念 神经网络是一种模拟人脑神经元结构的计算模型&#xff0c;由多个神经元&#xff08;节点&#xff09;组成&#xff0c;这些神经元通过连接&#xff08;边&#xff09;相互作用。每个连接都有一个权重&#xff0c;用于表示连接的重要性。神经网络通常分为…