C, Socket Programming: 1 Server 2 Clients connected by HUB, Chat Application Using TCP -


i have codes connecting , chatting between 1 server 1 client follows:

/*server side*/  #include<stdio.h> #include<sys/types.h> #include<netinet/in.h> #include<string.h> #include<sys/socket.h> #include<stdlib.h> #include<unistd.h>  main() {     int sd,i,len,bi,nsd,port;     char content[30];     struct sockaddr_in ser,cli;      if((sd=socket(af_inet,sock_stream,ipproto_tcp))==-1)     {         printf("\nsocket problem");         return 0;     }      printf("\nsocket created\n");     bzero((char*)&cli,sizeof(ser));     printf("enter port no:\n");     scanf("%d",&port);     printf("\nport address %d\n:",port);     ser.sin_family=af_inet;     ser.sin_port=htons(port);     ser.sin_addr.s_addr=htonl(inaddr_any);     bi=bind(sd,(struct sockaddr *)&ser,sizeof(ser));      if(bi==-1)     {         printf("\nbind error, port busy, plz change port in client , server");         return 0;     }      i=sizeof(cli);     listen(sd,5);     nsd = accept(sd,((struct sockaddr *)&cli),&i);      if(nsd==-1)     {         printf("\ncheck description parameter\n");         return 0;     }      printf("\nconnection accepted!");      if(fork())     {         printf("\nenter data send type exit stop:\n");         scanf("%s",content);          while(strcmp(content,"exit")!=0)         {             send(nsd,content,30,0);             scanf("%s",content);         }          send(nsd,"exit",5,0);     }     else         = recv(nsd,content,30,0);      while(strcmp(content,"exit")!=0)     {         printf("\nclient: %s\n",content);         i=recv(nsd,content,30,0);     }      printf("\nbye");     send(nsd,"offline",10,0);     close(sd);     close(nsd);     return 0; }  /*client side*/  #include<stdio.h> #include<sys/types.h> #include<netinet/in.h> #include<string.h> #include<sys/socket.h> #include<stdlib.h> #include<unistd.h>  int main() {     int sd,con,port,i,res;     char content[30];     struct sockaddr_in cli;      if((sd=socket(af_inet,sock_stream,ipproto_tcp))==-1)     {         printf("\nsocket problem");         return 0;     }      bzero((char*)&cli,sizeof(cli));     cli.sin_family = af_inet;     printf("enter port no:\n");     scanf("%d",&port);     cli.sin_port=htons(port);     cli.sin_addr.s_addr=htonl(inaddr_any);      con=connect(sd,(struct sockaddr*)&cli,sizeof(cli));      if(con==-1)     {         printf("\nconnection error");         return 0;     }      if(fork())     {         printf("\nenter data send type exit stop:\n");         scanf("%s",content);          while(strcmp(content,"exit")!=0)         {             send(sd,content,30,0);             scanf("%s",content);         }         send(sd,"exit",5,0);     }     else     {         i=recv(sd,content,30,0);          while(strcmp(content,"exit")!=0)         {             printf("\nserver: %s\n",content);             i=recv(sd,content,30,0);         }         send(sd,"exit",5,0);     }     close(sd);     return 0; } 

i need connect client can chat using same port. please give me codes that. thank you.

you must fork server's program logic after calling fork(). 1 branch communicates client, other have call accept again.

there no need spawn new process, can handle connections listen process select() function. result of function , result of fd_isset macros indicate, connection needs handled or established.


Comments