Я хочу создать многопользовательский сервер чата с использованием TCP на C, в котором, когда клиент отправляет сообщение на сервер.оно будет отправлено всем другим клиентам.
Я не могу найти какой-либо метод для отправки данных нескольким клиентам, есть ли какой-то метод для перебора всех клиентов, которые подключены к сокету, или какой-то метод для широковещательной рассылки сообщениявсем клиентам.
Вот мой код
server.c
#include <stdio.h>
#include <sys/socket.h> //for sock()
#include <string.h>//for using memset
#include <arpa/inet.h>// for inet_addr()
#include <unistd.h>//for using write() function
int main(){
int sock=0, client_conn=0,counter=0,pid;
char data_send[1024],data_received[1024];
struct sockaddr_in ServerIp;
sock = socket(AF_INET, SOCK_STREAM, 0);
memset(&ServerIp,'0',sizeof(ServerIp) );
ServerIp.sin_family = AF_INET;
ServerIp.sin_port = htons(1234);
ServerIp.sin_addr . s_addr = inet_addr("127.0.0.1");
if( bind( sock,(struct sockaddr* )&ServerIp, sizeof(ServerIp)) == -1 )
printf("\n Socket binding failed ");
if( listen(sock,20) == -1)
printf("Error\n");
else
printf("\n Server started\n");
for(;;){
label:
client_conn = accept( sock, (struct sockaddr*)NULL, NULL);
pid = fork();
if( pid < 0 )
printf("\n Process creation failed ");
else if( pid > 0 ){
counter++;
///close(client_conn);
goto label;
}
else{
counter++;
if( recv(client_conn, data_received, 1024, 0 ) == -1 )
printf(" Error !! cannot get response \n");
printf(" data from client is %s\n",data_received);
sprintf(data_send," Hi client %d !! from server ",counter);
write( client_conn, data_send, sizeof(data_send) );
}
}
close( sock );
return 0;
}
client.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h> //for sock()
#include <string.h>//for using memset
#include <arpa/inet.h>// for inet_addr()
#include <unistd.h>//for using write() function
int main(){
enter code here
char data_received[1024],data_send[1024];
int sock=0;
struct sockaddr_in ServerIp;
if( (sock = socket(AF_INET, SOCK_STREAM ,0 )) == -1 )
printf(" socket creation failed ");
ServerIp.sin_family = AF_INET;
ServerIp.sin_port = htons(1234);
ServerIp.sin_addr . s_addr = inet_addr("127.0.0.1");
if( (connect( sock, (struct sockaddr *)&ServerIp, sizeof(ServerIp) )) == -1 ){
printf("\n connection to the socket failed ");
exit(0);
}
else
printf("\n connected to socket \n");
strcpy(data_send,"hello server");
if( send(sock,data_send,sizeof(data_send),0) == -1 )
printf("sending failed ");
while(1){
printf("\n waiting for respose !! \n");
if( recv(sock, data_received, 1024, 0 ) == -1 )
printf(" Error !! cannot get response |n");
else
printf("\n Response Received is : %s", data_received );
}
}
любые предложения ??