DAY5网络

1.用select实现TCP客户端程序

#include <head.h>
#define PORT 9999 // 服务器端口号
#define IP "192.168.125.74" // 服务器IP地址#define CIP "192.168.125.74" // 客户端
#define CPORT 6666int main(int argc, const char* argv[])
{// 创建套接字int cfd = -1;if ((cfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {perror("socket error\n");return -1;}// 端口快速重用int reus = 1;if ((reus = setsockopt(cfd, SOL_SOCKET, SO_REUSEADDR, &reus, sizeof(reus))) == -1) {perror("setsockopt error\n");return -1;}// 定义地址信息结构体struct sockaddr_in cin;cin.sin_family = AF_INET;cin.sin_port = htons(CPORT);cin.sin_addr.s_addr = inet_addr(CIP);// 绑定(非必须)if (bind(cfd, (struct sockaddr*)&cin, sizeof(cin)) == -1) {perror("bind error\n");return -1;}printf("bind success\n");// 定义服务器地址信息结构体struct sockaddr_in sin;sin.sin_family = AF_INET;sin.sin_port = htons(PORT);sin.sin_addr.s_addr = inet_addr(IP);// 向客户端发送连接请求if (connect(cfd, (struct sockaddr*)&sin, sizeof(sin)) == -1) {perror("connect error");return -1;}// 定义检测描述符集合fd_set readfds;// 清0FD_ZERO(&readfds);// 将0、cfd放入集合FD_SET(0, &readfds);FD_SET(cfd, &readfds);// 收发数据char buf[128] = ""; // 容器fd_set temp; //int res = -1;while (1) {temp = readfds;res = select(cfd + 1, &temp, NULL, NULL, NULL);if (res < 0) {perror("select error");return -1;} else if (res == 0) {printf("time out\n");return -1;}if (FD_ISSET(0, &temp)) {bzero(buf, sizeof(buf)); // 清零fgets(buf, sizeof(buf), stdin);buf[strlen(buf) - 1] = 0;send(cfd, buf, sizeof(buf), 0);}if (FD_ISSET(cfd, &temp)) {bzero(buf, sizeof(buf)); // 清零int res = recv(cfd, buf, sizeof(buf), 0);if(res == 0){printf("服务器下线\n");break;}printf("收到服务器消息:%s\n", buf);}}// 关闭close(cfd);return 0;
}

2.用poll实现服务器

#include <head.h>
#define PORT 9999
#define IP "192.168.125.74"
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;}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;}if(listen(sfd,128)==-1){perror("listen error");return -1;}struct sockaddr_in cin;socklen_t len=sizeof(cin);struct sockaddr_in sock[1024];char ok[50];int newfd=-1;int maxfd=4;struct pollfd fds[1024];fds[0].fd=0;fds[0].events=POLLIN;fds[1].fd=sfd;fds[1].events=POLLIN;int count=2;puts("准备就绪");while(1){if(poll(fds,count,-1)==-1){perror("poll error");return -1;}for(int i=0;i<count;i++){	if(fds[i].revents!=POLLIN){continue;}if(i==0){scanf("%s",ok);printf("终端输入%s\n",ok);if(strcmp(ok,"quit")==0)goto aa;for(int j=2;j<count;j++){send(fds[j].fd,ok,sizeof(ok),0);}}else if(i==1){if((newfd=accept(sfd,(struct sockaddr*)&cin,&len))==-1){perror("accept error");return -1;}printf("[%s-%d]:连接成功,newfd=%d\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),newfd);fds[count].fd=newfd;fds[count].events=POLLIN;count++;sock[newfd]=cin;}else{char buf[128]="";int res=recv(fds[i].fd,buf,sizeof(buf),0);if(res==0){close(fds[i]);printf("[%s-%d]:退出\n",inet_ntoa(sock[fds[i].fd].sin_addr),ntohs(sock[fds[i].fd].sin_port));fds[i]=fds[count--];continue;}printf("[%s-%d]:%s\n",inet_ntoa(sock[fds[i].fd].sin_addr),ntohs(sock[fds[i].fd].sin_port),buf);strcat(buf,"sb");send(fds[i].fd,buf,sizeof(buf),0);}}}
aa:close(sfd);return 0;
}


    
    

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

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

相关文章

pyCharm最新2018激活码

最近开始研究python&#xff0c;因公司需要获取一些数据&#xff0c;比如电影名&#xff0c;航班名&#xff0c;航班号&#xff0c;列车号等等。所以让我来做一个爬虫去获取数据。所以我们就从这篇博文开始吧&#xff01;&#xff01;&#xff01; 首先告诉大家激活方式&#x…

提高电脑反应速度_设计师笔记本电脑推荐——视觉系ThinkBook 15p创造本

说到设计师笔记本电脑推荐&#xff0c;非近期大热的高颜值、高性能、更出彩的ThinkBook 15p创造本莫属了。作为专为时尚青年量身定做的品牌系列&#xff0c;ThinkBook一直都以“锐意破局”、“以思考重构世界”的理念征服着广大优秀的年轻创意用户&#xff0c;此次推出的全新产…

C语言 system函数

Windows函数windows操作系统下system () 函数详解&#xff08;主要是在C语言中的应用&#xff09; 函数名&#xff1a; system功 能&#xff1a; 发出一个DOS命令用 法&#xff1a; int system(char *command);system函数已经被收录在标准c库中&#xff0c;可以直接调用程序例…

Python format功能

1 #通过位置2 print {0},{1}.format(chuhao,20)3 4 print {},{}.format(chuhao,20)5 6 print {1},{0},{1}.format(chuhao,20)7 8 #通过关键字参数9 print {name},{age}.format(age18,namechuhao) 10 11 class Person: 12 def __init__(self,name,age): 13 self.na…

javascript option 菜单图标_MacBook上神奇的Option键

不知道昨天的(Mac上Command键的妙用)有没有帮助到大家呢&#xff1f;今天我们就来讲一讲Mac上的Option键。Option作为Mac上四大控制键(Shift&#xff0c;Command&#xff0c;Control&#xff0c;Option)之一&#xff0c;Option在单独使用的情况下&#xff0c;很多时候是发挥调出…

OpenCV中cvResize函数图象放缩

图像大小变换void cvResize( const CvArr* src, CvArr* dst, int interpolationCV_INTER_LINEAR );src&#xff1a;输入图像. dst&#xff1a;输出图像. interpolation&#xff1a;差值方法: • CV_INTER_NN - 最近邻差值, • CV_INTER_LINEAR - 双线性差值 (缺省使用) • CV_…

面向对象三大特性: 封装

封装 封装&#xff1a;每个对象都包含有它能进行操作的所有信息&#xff0c;这个特性称为封装。这样的方法包含在类中&#xff0c;通过类的实例来实现。 e.g. 我们可以使用遥控器。 遥控器有多个功能 封装的优点 A.良好的封装能够减少耦合&#xff08;比如实现界面和逻辑分离&a…

学生电脑哪个牌子好_家用医用酒精棉球哪个牌子好,酒精棉片哪个牌子好

酒精制品是现在生活中常用的消毒剂&#xff0c;包括酒精消毒液、酒精洗手液、酒精喷雾剂、酒精湿巾、酒精棉球和酒精棉片等。这些酒精制品各有各的作用&#xff0c;市面上的品牌也比较多。下面就来介绍家用医用酒精棉球哪个牌子好。1、家用医用酒精棉球哪个牌子好目前在市面上使…

OpenCV图像的轮廓的匹配

一个跟轮廓相关的最常用到的功能是匹配两个轮廓.如果有两个轮廓,如何比较它们;或者如何比较一个轮廓和另一个抽象模板.矩比较两个轮廓最简洁的方式是比较他们的轮廓矩.这里先简短介绍一个矩的含义.简单的说,矩是通过对轮廓上所有点进行积分运算(或者认为是求和运算)而得到的一个…

Java Servlet 过滤器与 springmvc 拦截器的区别?

前言&#xff1a;在工作中&#xff0c;遇到需要记录日志的情况&#xff0c;不知道该选择过滤器还是拦截器&#xff0c;故总结了一下。 servlet 过滤器 定义 java过滤器能够对目标资源的请求和响应进行截取。过滤器的工作方式分为四种 应用场景 可以通过 doFilter 方法的 reques…

surface pro 6 黑苹果_微软Surface新款超薄触控笔抢鲜评测

微软Surface新款超薄触控笔抢鲜评测中文名&#xff1a;微软 Surface 超薄触控笔英文名&#xff1a;Surface Slim Pen日文名&#xff1a;Surface スリム ペン颜色&#xff1a;典雅黑&#xff08;只有这一个颜色&#xff09;中文官方链接&#xff1a;https://www.microsoftstore.…

C++ function bind以及lamda表达式

本文是C0x系列的第四篇&#xff0c;主要是内容是C0x中新增的lambda表达式, function对象和bind机制。之所以把这三块放在一起讲&#xff0c;是因为这三块之间有着非常密切的关系&#xff0c;通过对比学习&#xff0c;加深对这部分内容的理解。在开始之间&#xff0c;首先要讲一…

java轻松实现无锁队列

1、什么是无锁(Lock-Free)编程 当谈及 Lock-Free 编程时&#xff0c;我们常将其概念与 Mutex(互斥) 或 Lock(锁) 联系在一起&#xff0c;描述要在编程中尽量少使用这些锁结构&#xff0c;降低线程间互相阻塞的机会&#xff0c;以提高应用程序的性能。类同的概念还有 "Lock…

numpy数组按某一维度相加_Python数据分析之NumPy(高级篇)

​一些更高级的ndarray处理where和一些其他的逻辑运算np.where(cond,x,y)&#xff1a;满足条件(cond)输出x&#xff0c;不满足输出yx_arr np.array([1.1, 1.2, 1.3, 1.4, 1.5])y_arr np.array([2.1, 2.2, 2.3, 2.4, 2.5])cond np.array([True, False, True, True, False])pr…

Python入门:局部变量与全局变量2

例子1&#xff1a; names("Lili","Rain","Jack") change_name(name): names[0]"LiLy" print(names) 结果&#xff1a;names("LiLy","Rain","Jack") #列表可以在函数中直接修改 例子2&#xff1a; name…

md5与des算法有何不同_到底AI芯片和传统芯片有何区别?

前两天成立仅两年国内专做人工智能FPGA加速算法的初创公司深鉴科技被国际巨头赛灵思收购了&#xff0c;在业界引起不小的震动。目前国内做AI芯片的公司可谓不少了&#xff0c;AI芯片已然成为了当下芯片行业最热领域。但是大部分人对AI芯片的架构应该都不是太了解。那么AI 芯片和…

BlueTooth 蓝牙音频音质探讨

蓝牙音频音质探讨简介&#xff1a;本文简单介绍了蓝牙无线音频技术 A2DP&#xff0c;并从技术角度探讨其音质。1. 蓝牙 A2DP 简介我们先从蓝牙核心规范说起&#xff0c;目前支持最广泛的蓝牙 2.0/2.1 EDR 连接速率为 3Mbit/s&#xff0c;实际可用数据传输速率为 2.1Mbit/s。蓝…

Active Directory PowerShell模块收集AD信息

0x00 前言简介 Microsoft为Windows Server 2008 R2&#xff08;以及更高版本&#xff09;提供了多个Active Directory PowerShell cmdlet&#xff0c;这大大简化了以前需要将涉及到的ADSI冗长代码行放在一起的任务。 在Windows客户端上&#xff0c;需要安装远程服务器管理工具&…

anaconda对应python版本_Python基础——如何查看python版本、如何查看多个python版本

前言初学者来说&#xff0c;安装python过程是存在一定难度的。在安装过程中&#xff0c;可能安装了多个python版本&#xff0c;可能安装了anaconda导致有自带的python&#xff0c;同时本身电脑也安装了官方下载的python也茫然不知。导致可能有以下情况发生&#xff1a;1.pip in…

MATLAB统计与回归

11.1 前言統計的技巧與資料分析常常形影不離。一般統計使用加法、累加法、平均值&#xff0c;中間值等等&#xff0c;由於處理的對象是矩陣資料&#xff0c;故其基本統計之技巧已經廣為應用&#xff0c;其觀念也會在正常之運作中出現。統計學中比較特殊應用者為機率、亂數、常態…