将select实现的TCP并发服务器和pol实现的TCP客户端各自实现一遍

#include<myhead.h>

#define MYIP "192.168.125.154"

#define MYPORT 9999

#define YOUIP "192.168.125.154"

#define YOUPORT 1888

int main(int argc, const char *argv\[\])

{

int cfd=socket(AF_INET,SOCK_STREAM,0);

if(cfd==-1)

{

perror("socket error");

return -1;

}

printf("socket success %d\n",cfd);

int reuse=1;

int reuse = 1;

if(setsockopt(cfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse))==-1)

{

perror("setsockopt error");

return -1;

}

printf("端口号快速重用成功\n");

struct sockaddr_in cin;

cin.sin_family=AF_INET;

cin.sin_port=htons(YOUPORT);

cin.sin_addr.s_addr=inet_addr(YOUIP);

if(bind(cfd,(struct sockaddr*)&cin,sizeof(cin))==-1)

{

perror("bind error");

return -1;

}

printf("bind success\n");

struct sockaddr_in sin;

sin.sin_family=AF_INET;

sin.sin_port=htons(MYPORT);

sin.sin_addr.s_addr=inet_addr(MYIP);

if(connect(cfd,(struct sockaddr*)&sin,sizeof(sin))==-1)

{

perro("connect error");

return -1;

}

printf("connect success\n");

//

struct poldfd pfds2;

pfds0.fd==0;

pfds0.events=POLLIN;

pfds1.fd=cfd;

pfds1.events=POLLIN;

char wbuf128="";

while(1)

{

int res=poll(pfds,2,-1);

if(res==0)

{

printf("time out\n");

return -1;

}

else if(res==-1)

{

perror("poll error");

return -1;

}

if(pfds0.revents==NULL)

{

fgets(wbuf,sizeof(wbuf),stdin);

wbufstrlen\[wbuf-1]=0;

if(strcmp(wbuf,"quit")==0)

{

break;

}

send(cfd,wbuf,sizeof(wbuf),0);

}

if(pfds1.revents==POLLIN)

{

bzero(wnuf,sizeof(wnuf));

recv(cfd,wbuf,sizeof(wbuf),0);

printf("收到服务器的消息为:%s\n",wbuf);

}

}

close(cfd);

return 0;

}

#include<myhead.h>

#define MYIP "192.168.243.131"

#define MYPORT 9999

int main(int argc, const char *argv\[\])

{

//1、套接字的创建,也就是载体

int sfd=socket(AF_INET,SOCK_STREAM,0);

if(sfd==-1)

{

perror("socket error");

return 1;

}

printf("socket success\n");

//2、绑定

struct sockaddr_in sin;

sin.sin_family=AF_INET;

sin.sin_port=htons(MYPORT);

sin.sin_addr.s_addr=inet_addr(MYIP);

if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin))==-1)

{

perror("bind error");

return -1;

}

printf("bind success\n");

//3、listen模式

if(listen(sfd,128)==-1)

{

perror("listen erro");

return -1;

}

printf("listen success\n");

//4、接受终端的申请

struct sockaddr_in cin;

socklen_t socklen = sizeof(cin);

int newfd =-1;

/**********************/

//

fd_set readfds,tempfds;

FD_ZERO(&readfds);

FD_SET(0,&readfds);

FD_SET(sfd,&readfds);

//

int maxfd=sfd;

struct sockaddr_in cin_arr1024;

while(1)

{

//

tempfds =readfds;

int res =select(sfd+1,&tempfds,NULL,NULL);

if(res==0)

{

printf("time out\n");

return -1;

}

else if(res ==-1)

{

perror("slect error");

return -1;

}

//

for(int i=0;i<maxfd;i++)

{

if(!FD_ISSET(i,&tempfds))

{

continue;

}

//

if(i===sfd)

{

newfd=accept(sfd,(struct sockaddr*)&cin,&socklen);

if(newfd==-1)

{

perror("accept error");

return -1;

}

printf("%s:%d:已连接,%d",\

inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),newfd);

FD_SET(newfd,&readfds);

cin_arrnewfd=cin;

if(maxfd<newfd)

{

maxfd=newfd;

}

}

}

//

else if(i==0)

{

char buf128="";

fgets(buf7,sizeof(buf),stdin);

bufstrlen(buf)-1=0;

printf("触发了键盘输入事件\n");

//

for(int i=4;i<maxfd;i++)

{

send(i,buf,strlen(buf),0);

}

}

else

{

//5、读写

char rbuf128="";

while(1)

{

bzero(rbuf,sizeof(rbuf));

// int ret=recv(newfd,rbuf,sizeof(rbuf),0);

int ret=recv(i,rbuf,sizeof(rbuf),0);

if(ret==0)

{

printf("客户端以下线\n");

close(i);

FD_CLR(i,&readfds);

for(int j=maxfd;j>sfd;i++)

{

if(FD_ISSET(i,&readfds))

{

maxfd=j;

break;

}

}

continue;

}

printf("%s:%d:%s\n",\

inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),rbuf);

/* strcat(rbuf,"*_*");

send(newfd,rbuf,sizeof(rbuf),0);

printf("发送成功\n");

*/

for(int i=4;i<maxfd;i++)

{

send(i,rbuf,strlen(rbuf),0);

}

}

}

}

//6、关闭

close(sfd);

return 0;

}

相关推荐
2601_962218612 小时前
万象生鲜系统业财一体化底层打通技术自动生成经营账单
大数据·数据库·人工智能·python·算法
吞下星星的少年·-·2 小时前
The 2026 ICPC Asia East Continent Online Contest (II)(构造)
数据结构·算法
stolentime4 小时前
洛谷P10515 转圈题解
c++·算法·数学建模·贪心算法
和裕5 小时前
蜂窝板 vs 七层瓦楞重型纸箱:大件工业设备运输性能与成本全对比
大数据·运维·网络·人工智能·算法
衡石科技5 小时前
Data_Agent记忆机制与经验复用衡石分析智能体会话记忆与长期学习技术解析
人工智能·科技·学习·算法·企业级bi
Msshu1236 小时前
2~5串锂电快充优选|XSP36 Type‑C升压/升降压快充管理芯片
数据结构·随机森林·贪心算法·排序算法·线性回归·启发式算法
shirsl6 小时前
算法 Day 2 滑动窗口 + 栈 / 单调栈
开发语言·python·算法
土司大王7 小时前
LeetCode hot100 回溯专题总结:Java 通用模板、决策树模型
java·算法·leetcode·决策树
2601_962218617 小时前
万象生鲜系统订单全生命周期状态同步技术实现业务可视
大数据·数据库·人工智能·python·算法
那年窗外下的雪.8 小时前
AIDC 学习日志|第 22 天|All-Active/Single-Active 故障演练设计
服务器·网络·学习·算法·哈希算法