网络编程day3作业

多进程实现TCP并发服务器

#include<myhead.h>#define PORT 8888
#define IP "192.168.125.130"void hadder(int signo)
{if(signo == SIGCHLD){while(waitpid(-1,NULL,WNOHANG) > 0);}
}int information_exchange(int newfd,struct sockaddr_in cin)
{char buf[128]="";while(1){bzero(buf,sizeof(buf));int res = recv(newfd,buf,sizeof(buf),0);printf("%s\n",buf);if(res == 0){printf("断开连接\n");break;}//printf("%s\n",buf);strcpy(buf,"*-*");send(newfd,buf,sizeof(buf),0);}close(newfd);
}int main(int argc, const char *argv[])
{//给信号重新链接if(signal(SIGCHLD,hadder) == SIG_ERR){perror("signal error");return -1;}//创建套接字文件int sfd = -1;if((sfd = socket(AF_INET,SOCK_STREAM,0)) == -1){perror("socket error");return -1;}//重复链接设置端口快速重用int reuse = -1;if(setsockopt(sfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse)) == -1){perror("setsockopt error");return -1;}//传输IP和端口号struct sockaddr_in sin;sin.sin_family = AF_INET;sin.sin_port = htons(PORT);sin.sin_addr.s_addr = inet_addr(IP);if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin)) == -1){perror("bind error");return -1;}printf("bind success\n");//设置监听模式if(listen(sfd,128) == -1){perror("listen error");return -1;}printf("listen success\n");struct sockaddr_in cin;socklen_t addrlen = sizeof(cin);int newfd = -1;pid_t pid = -1;while(1){//接受客户端链接if((newfd = accept(sfd,(struct sockaddr*)&cin,&addrlen)) == -1){perror("accept error");return -1;}pid = fork();if(pid > 0){close(newfd);}else if(pid == 0){close(sfd);information_exchange(newfd,cin);exit(EXIT_SUCCESS);}else{perror("fork error");return -1;}}close(sfd);return 0;
}

 多线程实现TCP并发服务器

#include<myhead.h>#define PORT 8888
#define IP "192.168.125.130"struct pthread_d 
{int newfd;struct sockaddr_in cin;
};void* information_exchange(void* arg)
{int newfd = ((struct pthread_d*)arg)->newfd;struct sockaddr_in cin = ((struct pthread_d*)arg)->cin;char buf[128]="";while(1){bzero(buf,sizeof(buf));int res = recv(newfd,buf,sizeof(buf),0);printf("%s\n",buf);if(res == 0){printf("断开连接\n");break;}//printf("%s\n",buf);strcpy(buf,"*-*");send(newfd,buf,sizeof(buf),0);}close(newfd);pthread_exit(NULL);
}int main(int argc, const char *argv[])
{//创建套接字文件int sfd = -1;if((sfd = socket(AF_INET,SOCK_STREAM,0)) == -1){perror("socket error");return -1;}//重复链接设置端口快速重用int reuse = -1;if(setsockopt(sfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse)) == -1){perror("setsockopt error");return -1;}//传输IP和端口号struct sockaddr_in sin;sin.sin_family = AF_INET;sin.sin_port = htons(PORT);sin.sin_addr.s_addr = inet_addr(IP);if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin)) == -1){perror("bind error");return -1;}printf("bind success\n");//设置监听模式if(listen(sfd,128) == -1){perror("listen error");return -1;}printf("listen success\n");struct sockaddr_in cin;socklen_t addrlen = sizeof(cin);int newfd = -1;pthread_t tid = -1;while(1){//接受客户端链接if((newfd = accept(sfd,(struct sockaddr*)&cin,&addrlen)) == -1){perror("accept error");return -1;}struct pthread_d fifo={newfd,cin};if(pthread_create(&tid,NULL,information_exchange,&fifo) == -1){perror("pthread_create error");return -1;}pthread_detach(tid);}close(sfd);return 0;
}

TCP机械臂测试

#include<myhead.h>#define PORT 9998
#define SPORT 8888
#define IP "192.168.125.249"int main(int argc, const char *argv[])
{//创建套接字文件int sfd = -1;if((sfd = socket(AF_INET,SOCK_STREAM,0)) == -1){perror("socket error");return -1;}//重复链接设置端口快速重用int reuse = 1;if(setsockopt(sfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse)) == -1){perror("setsockopt error");return -1;}/*//传输IP和端口号struct sockaddr_in sin;sin.sin_family = AF_INET;sin.sin_port = htons(PORT);sin.sin_addr.s_addr = inet_addr(IP);if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin)) == -1){perror("bind error");return -1;}printf("bind success\n");*/struct sockaddr_in cin;cin.sin_family = AF_INET;cin.sin_port = htons(SPORT);cin.sin_addr.s_addr = inet_addr(IP);if( connect(sfd, (struct sockaddr *)&cin,sizeof(cin)) ==-1){perror("connet error");return -1;}char rbuf[5]={0xff,0x02,0x00,0,0xff};unsigned char bbuf[5]={0xff,0x02,0x01,90,0xff};send(sfd,rbuf,sizeof(rbuf),0);send(sfd,bbuf,sizeof(bbuf),0);while(1){char flag;printf("请输入要控制的0|1>>>");scanf(" %c",&flag);getchar();switch(flag){case 'a':case 'A':{rbuf[3] += 5; if(rbuf[3] >= 90){rbuf[3] = 90;}send(sfd, rbuf, sizeof(rbuf), 0);}break;case 'b':case 'B':{rbuf[3] -= 5; if(rbuf[3] <= -90){rbuf[3] = -90;}send(sfd, rbuf, sizeof(rbuf), 0);}break;case 'C':case 'c':{bbuf[3] += 5; if(bbuf[3] >= 180){bbuf[3] = 180;}send(sfd, bbuf, sizeof(bbuf), 0);}break;case 'D':case 'd':{bbuf[3] -= 5; if(bbuf[3] <= 0){bbuf[3] = 0;}send(sfd, bbuf, sizeof(bbuf), 0);}break;}}return 0;
}

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

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

相关文章

Redis原理之网络模型笔记

目录 1. 阻塞IO 2. 非堵塞IO 3. IO多路复用 ​3.1 select 3.2 poll 3.3 epoll 4. 信号驱动IO 5. 异步IO 6. Redis是单线程还是多线程 Redis采用单线程模型&#xff0c;这意味着一个Redis服务器在任何时刻都只会处理一个请求。Redis的网络模型涉及到阻塞I/O&#xff08;Blo…

Mac managing Multiple Python Versions With pyenv 【 mac pyenv 管理多个python 版本 】

文章目录 1. 简介2. 安装2.1 brew 安装 pyenv2.2 脚本安装 3. pyenv 安装 Python4. 卸载 python5. 管理 python 1. 简介 Pyenv 是一个用于管理和切换多个 Python 版本的工具。它允许开发人员在同一台计算机上同时安装和使用多个不同的 Python 版本&#xff0c;而无需对系统进行…

STM32与Freertos入门(三)任务的创建、删除

1、串口配置 首先将串口进行配置&#xff0c;后续经常会应用&#xff0c;具体步骤点击&#xff1a;串口配置。 2、任务 创建一个任务&#xff0c;就是开辟一个空间、每个任务中都会有while&#xff08;1&#xff09;死循环。 2.1相关函数 动态创建&#xff1a;xTaskCreate…

vp与vs联合开发-通过CogAcqFifoTool工具连接相机

1.完成相机硬件配置后 2.完成vp与vs联合开发配置功能后 1.创建winform 项目 目的 : 搭建 界面应用 2. 1. vpp文件存入 项目的debug 目录中 目的&#xff1a; 在项目中加载本地vpp文件 读取相机工具 1.控件CogRecordDisplay 用于显示相机拍摄照片和实施显示的窗口 2和3 …

TortoiseGit通过SSH连接配置,生成SSH密钥方法

生成SSH密钥&#xff1a; Win环境下命令(git ssh key是可以自定义命名的)&#xff1a; ssh-keygen -t ed25519 -C "git ssh key" && start "" "C:\Windows\notepad.exe" "C:\Users\%username%\.ssh\id_ed25519.pub" 打开cm…

弹幕情感分析可视化

弹幕情感分析可视化 引言1. 弹幕数据爬取2. 弹幕数据处理3. 弹幕数据可视化4. 弹幕情感分析5. 创新点&#xff1a;弹幕情感倾向分布 引言 当今互联网时代&#xff0c;大量的弹幕数据蕴含着丰富的信息&#xff0c;通过对这些数据进行分析和可视化&#xff0c;我们能够深入了解用…

【C语言】自定义类型——枚举、联合体

引言 对枚举、联合体进行介绍&#xff0c;包括枚举的声明、枚举的优点&#xff0c;联合体的声明、联合体的大小。 ✨ 猪巴戒&#xff1a;个人主页✨ 所属专栏&#xff1a;《C语言进阶》 &#x1f388;跟着猪巴戒&#xff0c;一起学习C语言&#x1f388; 目录 引言 枚举 枚举…

idea添加外部jar包

在日常开发中在lib包的里面添加了外部的jar&#xff0c;如何将外部的包添加到java类库中&#xff0c;这样项目就可以引用相应的jar包&#xff0c;操作如下&#xff1a; 1.先将需要的jar复制到lib包如下&#xff0c;如下截图&#xff0c;图标前面没有箭头&#xff0c;表示还未添…

清晨早安问候祝福语精选,早晨的微笑是全天幸福的开始

1、真情是大海&#xff0c;一辈子不枯&#xff1b;缘分是桥梁&#xff0c;一辈子相连&#xff1b;友情是棵松&#xff0c;一辈子常青&#xff1b;短信是条路&#xff0c;一辈子畅通&#xff01;清晨的鲜花&#xff0c;永远芬芳&#xff01;结下的缘分&#xff0c;永远不忘&…

【华大】HC32F420JATB-LQ48学习资料及开发环境

1. 产品特点 ⚫ 84MHz Cortex-M4 32位CPU平台 ⚫ 128K 字节 FLASH 存储器&#xff0c;具有擦写保护功能 ⚫ 24K 字节 RAM 存储器 ⚫ 6 通道 DMAC ⚫多达 52 个通用 I/O 管脚 ⚫ 时钟、晶振 ‒ 外部高速晶振 8MHz~32MHz ‒ 内部高速时钟 22MHz~24MHz ‒ 内部低速时钟 3…

【分享】5种方法将Excel设置为“只读”

将Excel表格设置以“只读方式”打开&#xff0c;可以提醒或者防止表格被随意改动&#xff0c;今天小编来分享一下将Excel设置为“只读”的5种方法。 方法一&#xff1a;通过“保护工作簿”设置 首先&#xff0c;打开Excel表格依次点击菜单选项卡【文件】→【信息】→【保护工作…

万能在线答题考试小程序源码系统 网课必备 既能刷题又能考试 附带完整的搭建教程

在当前的数字化时代&#xff0c;移动应用程序已经成为人们日常生活的重要组成部分。其中&#xff0c;小程序因其无需下载、即用即走的特性&#xff0c;备受用户青睐。现如今&#xff0c;将在线答题考试功能集成到小程序中&#xff0c;可以极大地提高学习者的学习效率和兴趣。 …