select 学习笔记

来源:互联网 发布:验证算法 编辑:程序博客网 时间:2024/05/16 09:54

写了一个 select 的server + client 在linux 上跑ok

#include<sys/types.h>

#include<sys/socket.h>

#include<stdio.h>

#include<netinet/in.h>

#include<sys/time.h>

#include<sys/ioctl.h>

#include<unistd.h>

#include<stdlib.h>

 

int main()

{

   int server_sockfd,client_sockfd;

   int server_len,client_len;

   struct sockaddr_in server_address;

   struct sockaddr_in client_address;

   int result;

   fd_set readfds, testfds;

 

//  client_len=sizeof(client_address);

 

  server_sockfd=socket(AF_INET,SOCK_STREAM,0);

 

  server_address.sin_family=AF_INET;

   server_address.sin_addr.s_addr=htonl(INADDR_ANY);

  server_address.sin_port=htons(9734);

   server_len=sizeof(server_address);

 

   bind(server_sockfd,(struct sockaddr *)&server_address,server_len);

 

   listen(server_sockfd,5);

 

   FD_ZERO(&readfds);

  FD_SET(server_sockfd,&readfds);

 

while(1)

  {

   char ch;

   int fd;

   int nread;

 

   testfds=readfds;

 

   printf("serverwaiting\n");

 

  result=select(FD_SETSIZE,&testfds,(fd_set *)0,(fd_set *)0,(struct timeval *)0);

 

   if(result<1){

      perror("server5");     

      exit(1);

     }

 

   for(fd=0;fd<FD_SETSIZE;fd++){

      if(FD_ISSET(fd,&testfds))

       {

         if(fd==server_sockfd)

          {

 client_len=sizeof(client_address);

 client_sockfd=accept(server_sockfd,(struct sockaddr*)&client_address,&client_len);

 FD_SET(client_sockfd,&readfds);

 printf("addingclient on fd %d\n",client_sockfd);

           }//end of if

          else

           {

           ioctl(fd,FIONREAD,&nread);

            if(nread==0)

             {

               close(fd);

              FD_CLR(fd,&readfds);

               printf("removing client on fd %d\n",fd);

             }

 

            else

              {

               read(fd,&ch,1);

                sleep(5);

                printf("serving client on fd %d\n",fd);

                ch++;

               write(fd,&ch,1);

              }

 

          }//end of else

 

 

       }//if fd is active deal with it

 

   }//looping all the possible value to check

 

  }//while loop of server

 

}//end

 

 

 

 

 

 

 

 

 

 

#include<sys/types.h>

#include<sys/socket.h>

#include<stdio.h>

#include<netinet/in.h>

#include<arpa/inet.h>

#include<unistd.h>

#include<stdlib.h>

 

int main()

{

   int sockfd;

   int len;

   struct sockaddr_in address;

   int result;

   char ch='A';

 

  sockfd=socket(AF_INET,SOCK_STREAM,0);

 

   address.sin_family=AF_INET;

  address.sin_addr.s_addr=inet_addr("127.0.0.1");

   address.sin_port=htons(9734);

   len=sizeof(address);

 

   result=connect(sockfd,(struct sockaddr *)&address,len);

 

   if(result==-1)

    {

      perror("oops:client2");

      exit(1);

 

    }

 

  write(sockfd,&ch,1);

  read(sockfd,&ch,1);

 

  printf("char from server=%c\n",ch);

  close(sockfd);

 

  exit(0);

}

//end


原创粉丝点击