我的程序仅作为服务器的读操作和客户端的写操作。如何使用多线程概念对客户端和服务器进行读和写操作。
我可以在客户端写消息,但是不能在服务器端写消息。请帮助我解决这个问题。
/*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;
}