将select实现的TCP并发服务器和pol实现的TCP客户端各自实现一遍
创始人
2025-01-19 18:04:00
0

#include
#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 pfds[2];

        pfds[0].fd==0;
        pfds[0].events=POLLIN;

        pfds[1].fd=cfd;
        pfds[1].events=POLLIN;


        char wbuf[128]="";
        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(pfds[0].revents==NULL)
                {
                        fgets(wbuf,sizeof(wbuf),stdin);
                        wbuf[strlen[wbuf]-1]=0;
                        if(strcmp(wbuf,"quit")==0)
                        {
                                break;
                        }
                        send(cfd,wbuf,sizeof(wbuf),0);

                }

                if(pfds[1].revents==POLLIN)
                {
                        bzero(wnuf,sizeof(wnuf));
                        recv(cfd,wbuf,sizeof(wbuf),0);
                        printf("收到服务器的消息为:%s\n",wbuf);
                }
        }
        close(cfd);
        return 0;
}
 

 

#include
#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_arr[1024];

        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                 {
                        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_arr[newfd]=cin;

                if(maxfd                 {
                        maxfd=newfd;
                }
         
                }
                }
//
                else if(i==0)
                {
                        char buf[128]="";
                        fgets(buf7,sizeof(buf),stdin);
                        buf[strlen(buf)-1]=0;
                        printf("触发了键盘输入事件\n");

//

                        for(int i=4;i                         {
                                send(i,buf,strlen(buf),0);
                        }

                }

                else
                {
        //5、读写
        char rbuf[128]="";
        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                 {
                        send(i,rbuf,strlen(rbuf),0);
                }
        }
        }
        }
        //6、关闭
        close(sfd);

        return 0;
}
 

相关内容

热门资讯

不少玩家反映!科乐游戏辅助脚本... 不少玩家反映!科乐游戏辅助脚本视频(辅助)其实真的有辅助插件(发现有挂)1、科乐游戏辅助脚本视频脚本...
有了最新消息!三哥玩辅助(辅助... 有了最新消息!三哥玩辅助(辅助)一直确实有辅助教程(有挂方略)1、打开软件启动之后找到中间准星的标志...
软件辅助挂!九游破解辅助插件官... 软件辅助挂!九游破解辅助插件官网(辅助)都是是真的有辅助方法(有挂教程)1、上手简单,内置详细流程视...
事发当天!盛世透视辅助工具(辅... 事发当天!盛世透视辅助工具(辅助)切实是有辅助app(有人有挂)1)盛世透视辅助工具有没有挂:进一步...
黑科技辅助挂!南宁友乐辅助(辅... 黑科技辅助挂!南宁友乐辅助(辅助)原来确实有辅助挂(有挂教程)1、玩家可以在南宁友乐辅助线上大神俱乐...
为了进一步!微信闲来神器软件下... 为了进一步!微信闲来神器软件下载(辅助)确实是真的有辅助神器(有挂技巧)1、微信闲来神器软件下载有没...
现场直击!微信边锋辅助器(辅助... 现场直击!微信边锋辅助器(辅助)都是真的有辅助教程(有挂攻略)1、每一步都需要思考,不同水平的挑战会...
最新消息!微信超级3+1挂辅助... 最新消息!微信超级3+1挂辅助(辅助)竟然真的是有辅助软件(有挂辅助)1)微信超级3+1挂辅助免费钻...
昨日!789大菠萝有挂吗(辅助... 昨日!789大菠萝有挂吗(辅助)好像是有辅助工具(有挂神器)1、全新机制【789大菠萝有挂吗ai辅助...
黑科技代打!柳州八一字牌辅助(... 黑科技代打!柳州八一字牌辅助(辅助)一直确实有辅助攻略(今日头条)1、全新机制【柳州八一字牌辅助ai...