将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;

}

相关推荐
octopus_c43 分钟前
数据结构:堆(Heap)详解
c语言·数据结构·算法
YH55269846 小时前
GPT‑5.6 Sol 原本支持 1M 上下文,Codex 现已放开此前限制,如何看待这次调整?
java·jvm·人工智能·gpt·算法·chatgpt
遥感知识服务8 小时前
从局部阈值、双极化到暗地表剔除:NASA OPERA DSWx-S1全球动态水体算法拆解
大数据·人工智能·深度学习·神经网络·算法·机器学习
晚风醉蝶8 小时前
1-13-TimSort
算法
ZJU_统一阿萨姆8 小时前
【算子开发】算子融合与Softmax_LayerNorm实现
人工智能·算法·语言模型·硬件架构
叩码以求索10 小时前
浅谈:前序遍历反转法求解N叉树的后序遍历
算法
北风toto11 小时前
中缀、前缀、后缀表达式
算法·软件设计师
听取WA声一片(无恶意)12 小时前
CSP-J/CSP-S 深度优先搜索(DFS)完全讲义
c++·算法·深度优先
码流怪侠12 小时前
2026年8月GitHub热榜深度拆解:Agent Skills席卷开源圈,一个“技能包“收割5万星
算法·程序员·github
hold?fish:palm12 小时前
30 两两交换链表中的节点
数据结构·算法·链表