客户端服务器程序中的多线程概念

时间:2019-12-24 10:27:13

标签: c multithreading sockets server client

我的程序仅作为服务器的读操作和客户端的写操作。如何使用多线程概念对客户端和服务器进行读和写操作。

我可以在客户端写消息,但是不能在服务器端写消息。请帮助我解决这个问题。

/*server function*/
int server(int argc,char *argv[])
{
        int sock_fd,socknew_fd,portNo,cliLen;//socket file descriptor-sock_fd
        char buff[256];
        struct sockaddr_in serv_addr,cli_addr;
        int n;

       /*first call to socket function*/
        sock_fd=socket(AF_INET,SOCK_STREAM,0); /*socket created of family type IP v4 ,socket type TCP and 0 indicates default protocol to be selected*/

        if(sock_fd<0)  //if -1(sock_fd) returned by socket() it shows socket cant be created
        {
                perror("error opening socket");
                exit(0);
        }

        /*initialize socket structure*/
        bzero((char *)&serv_addr,sizeof(serv_addr));//setting all default structure socket values to 0

                portNo=atoi(argv[1]);
                serv_addr.sin_family=AF_INET;
                serv_addr.sin_addr.s_addr=INADDR_ANY;
                serv_addr.sin_port=htons(portNo);
        //initialize family,server address,portno which should be of network order

        /*now bind the host address using bind() call*/
        if(bind(sock_fd,(struct sockaddr *) &serv_addr,sizeof(serv_addr))<0)
        {perror("error in binding");
        exit(1);
        }
        /*start listening for client and be in sleep mode till any request arises from client*/
        while(1)
         {
                 listen(sock_fd,5);
                cliLen=sizeof(cli_addr);


                /*accept actual connection from client*/
                socknew_fd=accept(sock_fd,(struct sockaddr *) &cli_addr,&cliLen);
                if(socknew_fd<0)
                {
                        perror("error in accept");
                        exit(1);
                }

                 /*if connection is established start communicating*/
                 bzero(buff,256);
                 n=read(socknew_fd,buff,255);
                 if(buff[0]==32)
                        break;
                if(n<0)
                {perror("error in reading from socket");
                exit(1);
                }

                 printf("here is message:%s\n",buff);

                 /*write a response to client*/
                 n=write(socknew_fd,"I got your message",18);
                 if(n<0)
                 {perror("error writing in socket");
                 exit(1);
                 }


         }
return 0;
}

0 个答案:

没有答案