网络编程-day5

IO复用select实现TCP服务端

#define IP "192.168.125.196"
#define PORT 8888
int main(int argc, const char *argv[])
{int sfd = socket(AF_INET, SOCK_STREAM, 0);if(sfd == -1){perror("socket");return -1;}int reuse = 1;if(setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) == -1){perror("setsockopt");return -1;}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");return -1;}if(listen(sfd, 128) == -1){perror("listen");return -1;}fd_set readfds, tempfds;FD_ZERO(&readfds);FD_SET(sfd, &readfds);int maxfd = sfd;int newfd = -1;struct sockaddr_in cin_arr[1024] = {0};struct sockaddr_in cin;socklen_t cinlen = sizeof(cin);char rbuf[128] = {0};while(1){tempfds = readfds;int res = select(maxfd+1, &tempfds, NULL, NULL, NULL);if(res == -1){perror("select");return -1;}else if(res == 0){printf("timeout\n");return -1;}for(int i=0; i<=maxfd; i++){if(!FD_ISSET(i, &tempfds)){continue;}if(i == sfd){newfd = accept(sfd, (struct sockaddr *)&cin, &cinlen);if(newfd == -1){perror("accept");return -1;}printf("[%s:%d]:online\n", inet_ntoa(cin.sin_addr), ntohs(cin.sin_port));cin_arr[newfd] = cin;FD_SET(newfd, &readfds);if(newfd > maxfd){maxfd = newfd;}}else{bzero(rbuf, sizeof(rbuf));int res = recv(i, rbuf, sizeof(rbuf), 0);if(res == 0){                                                                                 printf("offline\n");close(i);FD_CLR(i, &readfds);for(int k=maxfd; k>=sfd; k--){if(FD_ISSET(k, &readfds)){maxfd = k;break;}}continue;}printf("[%s:%d]:%s\n", inet_ntoa(cin_arr[i].sin_addr), ntohs(cin_arr[i].sin_port), rbuf);for(int j=4; j<=maxfd; j++){if(j != i){send(j, rbuf, strlen(rbuf), 0);}}}}}close(sfd);return 0;
}

IO复用poll实现TCP客户端

#include <myhead.h>
#define S_IP "192.168.125.196"
#define S_PORT 8888
#define C_IP "192.168.125.196"
#define C_PORT 7777
int main(int argc, const char *argv[])
{int cfd = socket(AF_INET, SOCK_STREAM, 0);if(cfd == -1){perror("socket");return -1;}int reuse = 1;if(setsockopt(cfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) == -1){perror("setsockopt");return -1;}struct sockaddr_in cin;cin.sin_family = AF_INET;cin.sin_port = htons(C_PORT);cin.sin_addr.s_addr = inet_addr(C_IP);if(bind(cfd, (struct sockaddr *)&cin, sizeof(cin)) == -1){perror("bind");return -1;}struct sockaddr_in sin;sin.sin_family = AF_INET;sin.sin_port = htons(S_PORT);sin.sin_addr.s_addr = inet_addr(S_IP);if(connect(cfd, (struct sockaddr *)&sin, sizeof(sin)) == -1){perror("connect");return -1;}printf("connect success\n");struct pollfd pfd[2];pfd[0].fd = 0;pfd[0].events = POLLIN;pfd[1].fd = cfd;pfd[1].events = POLLIN;char rbuf[128] = {0};char wbuf[128] = {0};while(1){int ret = poll(pfd, 2, -1);if(ret == -1){perror("poll");return -1;}else if(ret == 0){printf("timeout\n");return -1;}if(pfd[0].revents == POLLIN){bzero(wbuf, sizeof(wbuf));fgets(wbuf, sizeof(wbuf), stdin);int len = strlen(wbuf);if(wbuf[len-1] == '\n'){wbuf[len-1] = 0;}send(cfd, wbuf, len, 0);}if(pfd[1].revents == POLLIN){bzero(rbuf, sizeof(rbuf));int res = recv(cfd, rbuf, sizeof(rbuf), 0);if(res == 0){printf("offline\n");break;}printf("[%s:%d]:%s\n", inet_ntoa(sin.sin_addr), ntohs(sin.sin_port), rbuf);}}return 0;
}                                                                                                  

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

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

相关文章

外汇天眼:外汇干预是什么? 谁来做? 怎么做?

日元兑美元汇率持续下跌&#xff0c;市场对外汇干预的警惕性提高。 如果日本政府和日本银行&#xff08;央行&#xff09;进行外汇干预&#xff0c;会是大约1年半以来首次。 日本2022年曾进行过3次干预。 外汇干预由谁来进行&#xff0c;目的是什么&#xff0c;又采取了什么具体…

工况数据导入MATLAB及数据复用

01--数据导入 之前在Matlab/Simulink的一些功能用法笔记&#xff08;二&#xff09;中有介绍过数据的导入到MATLAB工作区间 本次主要是想介绍下数据的复用 我们以NEDC工况数据为例&#xff1a; 通过下列3种方法进行导入&#xff1a; 1.通过导入Excel表数据&#xff0c;使用F…

Date、LocalDateTime、时间戳、日期字符串互转

前言 由于历史原因&#xff0c;项目上使用Date、LocalDateTime、时间戳甚至日期字符串的情况五花八门&#xff0c;在每次参数传递的时候&#xff0c;遇到类型不一致的时候就会很痛苦&#xff0c;接下来就总结下这些类之间到底怎样互转。 1 From Date Date作为老牌的日期处理…

番外篇 | YOLOv5更换主干网络之Conformer:首个CNN + Transformer的backbone模型

前言:Hello大家好,我是小哥谈。Transformer和CNN在处理视觉表征方面都有着各自的优势以及一些不可避免的问题。因此,国科大、鹏城实验室和华为研究人员首次将二者进行了融合并提出全新的Conformer模型,其可以在不显著增加计算量的前提下显著提升了基网表征能力。论文已被IC…

Jenkins部署成功后自动发通知到钉钉群

钉钉上如何配置 选择钉钉群&#xff0c;找到群设置-机器人-添加机器人 选择自定义 选择【添加】 选择【加签】&#xff0c;复制值&#xff0c;后续在jenkins里配置时会用到 复制Webhook地址&#xff0c;后面在jenkins里配置的时候要用到 Jenkins上如何配置 系统管理-插件管…

“Excel+中文编程”衍生新型软件,WPS用户:自家孩子

你知道吗&#xff0c;我们中国人有时候真的挺有创新精神的。 你可能熟悉Excel表格&#xff0c;也可能听说过中文编程&#xff0c;但你有没有脑洞大开&#xff0c;想过如果把这两者结合起来&#xff0c;会碰撞出什么样的火花呢&#xff1f; 别不信&#xff0c;跟着我来看看吧&a…

云WAF:网络安全的未来之选

在数字化时代&#xff0c;网络安全面临着前所未有的挑战。云WAF&#xff08;Web Application Firewall&#xff09;作为一种创新的网络安全解决方案&#xff0c;正以其独特的优势引领网络安全的新潮流。云WAF&#xff08;Web Application Firewall&#xff09;作为保护Web应用安…

flutter出现kotlin版本问题解决办法

.kotlin_module: Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.9.0, expected version is 1.7.1. 在android的settings.gradle下 plugins {id "dev.flutter.flutter-gradle-plugin" version "1.0.0…

几个速度比较快的 Linux 开源镜像站

搜狐开源镜像站 https://mirrors.sohu.com/ File Name CPAN/ FreeBSD/ QpenBSD/ RockyL apache/ archlinux/ centos/ ceph/ cygwin/ debian/ debian–cd/ debian-security/ deepin/ deepin-cd/ docker-ce/ fedora/ fedora-epel/ gentoo/ lib/ mysql/ nginx/ opensuse/ php/ ubu…

计算机视觉中-语义分割

语义分割 语义分割是计算机视觉中的一个关键技术&#xff0c;它涉及对图像中的每个像素进行类别划分&#xff0c;从而识别出图像中的不同物体或区域。具体来说&#xff0c;语义分割就是按照“语义”给图像上目标类别中的每一点打上一个标签&#xff0c;使得不同种类的东西在图像…

力扣-LCR 169. 招式拆解 II

文章目录 力扣题目代码 力扣题目 某套连招动作记作仅由小写字母组成的序列 arr&#xff0c;其中 arr[i] 第 i 个招式的名字。请返回第一个只出现一次的招式名称&#xff0c;如不存在请返回空格。 示例 1&#xff1a; 输入&#xff1a;arr “abbccdeff” 输出&#xff1a;‘…

EI会议的投稿流程是什么?

EI会议是工程技术领域的学术会议&#xff0c;为研究人员提供展示研究成果、交流学术观点的平台。下面是EI会议投稿的详细流程&#xff1a; EI会议论文的投稿流程是什么&#xff1f; 确定会议信息&#xff1a; 首先&#xff0c;确定你感兴趣的EI会议的相关信息&#xff0c;包括…

数据结构:树(3)【二叉树链式结构实现】【二叉树的前序,中序,后序遍历】【求二叉树全部结点个数】【求二叉树叶子结点个数】【求二叉树的深度】【单值二叉树】

一.二叉树链式结构的实现 二叉树的链式结构的实现相对于顺序结构的实现就没有那么多的讲究了。就是普通的链表&#xff0c;只不过多了一个指向的指针。 具体结构如下&#xff1a; typedef int BTDataType; typedef struct BinaryTreeNode {BTDataType data;struct BinaryTre…

消息号 KI261 成本中心 XXXX/123123 冻结而不能直接对 2020.10.08 收入记帐

做AR凭证遇到如上图所示的报错&#xff0c;检查之后发现是科目的成本要素类别与成本中心的控制面板-锁定中的类型不匹配&#xff0c;现在科目的成本要素类别是11&#xff0c;控制面板中锁定了“实际销售收入”与“计划收入”。 成本要素类别“11”代表主营收入或者库存收入&…

WEB攻防【1】——ASP应用/HTTP.SYS/短文件/文件解析/Access注入/数据库泄漏

#知识点&#xff1a; 1、ASP-SQL注入-Access数据库 2、ASP-默认安装-数据库泄漏下载 3、ASP-IIS-CVE&短文件&解析&写入 windows iis asp access &#xff08;sqlsever&#xff09; 常见组合&#xff1a;winiisaspaccess php一般是和mysql搭配 access 数据库 一…

SQL刷题笔记day1

1题目 我的代码&#xff1a; select * from employees order by hire_date desc limit 2,1 标准代码&#xff1a; select * from employees where hire_date (select distinct hire_date from employees order by hire_date desc limit 2,1) 复盘&#xff1a;因为按照入…

[Java]Java后端程序员开发经常使用的方法函数(持续更新)

文章目录 简述数据库&#xff08;MySQL&#xff09;查询所有字段查询所有字段并逗号隔开&#xff08;id,name.code&#xff09;增加或者减少指定的天数查询指定年份的数据数据库表新增信息用 EXISTS 或 NOT EXISTS 代替 IN 或 NOT IN7位设备编码补零生成查询相同id下&#xff0…

FOC之反park变化推导笔记

FOC之反park变化推导笔记 Vd和Vq是Id和Iq电流经过PID控制器后得到的电压值。 至于为什么PID出来就是电压值&#xff0c;因为Ud和Uq的公式中有id和iq&#xff0c;两者之间有关系&#xff0c;具体的我给出两个链接。 https://blog.csdn.net/lanmanck/article/details/105551779 …

excel里如何将数据分组转置?

这个表格怎样转换为下表&#xff1f;按照国家来分组&#xff0c;把不同年份对应的不同序列值进行转置&#xff1f;&#xff1f; 这演示用数据透视表就完成这个数据转换。 1.创建数据透视表 选中数据中任意单元格&#xff0c;点击插入选项卡&#xff0c;数据透视表&#xff0c;…

202472读书笔记|《首先你要快乐,其次都是其次》——快乐至上,允许一切发生

202472读书笔记|《首先你要快乐&#xff0c;其次都是其次》——快乐至上&#xff0c;允许一切发生 《首先你要快乐&#xff0c;其次都是其次》作者林小仙&#xff0c;挺轻松的小漫画&#xff0c;清新的文字。 生而为人&#xff0c;我很抱歉&#xff0c;大可不必。 生活已经很难…