int main()
{
int sock, connected, bytes_recieved , true = 1;
char send_data [1024] , recv_data[1024];
pid_t pid;
struct sockaddr_in server_addr,client_addr;
int sin_size;
if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
perror("Socket");
exit(1);
}
if (setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,&true,sizeof(int)) == -1)
{
perror("Setsockopt");
exit(1);
}
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(5000);
server_addr.sin_addr.s_addr = INADDR_ANY;
bzero(&(server_addr.sin_zero),8);
if (bind(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) == -1)
{
perror("Unable to bind");
exit(1);
}
if (listen(sock, 5) == -1)
{
perror("Listen");
exit(1);
}
printf("\nTCPServer Waiting for client on port 5000\n");
fflush(stdout);
while(1)
{
sin_size = sizeof(struct sockaddr_in);
connected = accept(sock, (struct sockaddr *)&client_addr,&sin_size);
printf("\n I got a connection from (%s , %d)\n", inet_ntoa(client_addr.sin_addr),ntohs(client_addr.sin_port));
//fork this process into a child and parent
pid = fork();
//Check the return value given by fork(), if negative then error,
//if 0 then it is the child.
if ( pid == -1)
{
perror("fork()");
}
//loop until client closes
if (pid == 0)
{
/*Child Process*/
close(sock);
while(1)
{
printf("\n SEND (q or Q to quit) : \n");
gets(send_data);
if (strcmp(send_data , "q") == 0 || strcmp(send_data , "Q") == 0)
{
send(connected, send_data,strlen(send_data), 0);
close(connected);
break;
}
else
send(connected, send_data,strlen(send_data), 0);
bytes_recieved = recv(connected,recv_data,1024,0);
recv_data[bytes_recieved] = '\0';
if (strcmp(recv_data , "q") == 0 || strcmp(recv_data , "Q") == 0)
{
close(connected);
break;
}
else
printf("\n RECIEVED DATA = from(%s,%d)\ndata=%s\n" ,inet_ntoa(client_addr.sin_addr),ntohs(client_addr.sin_port), recv_data);
fflush(stdout);
}
}
}
close(sock);
return 0;}
i want to use the thread for client to client communication.
but how to create the thread and where i have to create the thread for multi client communication.
i have also use fork for accessing the multiple client.
i want to make the multiple client chat program in c using tcp/ip concept
thanks!!!
You can create the client thread when
accept()returns, passing client information to the thread function. From your code, it looks like you’ve managed to do it (I haven’t really compiled and checked, but it looks OK). So perhaps you could add more information about what’s wrong with your code.