Jusqu'à présent, tout fonctionnait parfaitement. Juste le problème que j'ai eu est que je ne peux pas penser à une façon d'attribuer ou je dirais donner des noms aux clients qui se connectent au serveur de sorte que d'autres clients qui savent est écritUnix socket Discussion de groupe de clients multiples avec le nom du client dans c
serveur :
while (1) {
FD_ZERO(&read_set);
//FD_ZERO(&write_set);
FD_SET(fd, &read_set);
//FD_SET(fd, &write_set);
for (i = 0; i < num_clients; i++) { //at first this part will not excute
FD_SET(clients[i], &read_set);
}
select(fd + num_clients + 1, &read_set, NULL, NULL, NULL);
if (FD_ISSET(fd, &read_set)) {
if ((clients[num_clients++] = accept(fd, NULL, NULL)) == -1) {
perror("accept error");
continue;
}
printf("we got a connection!\n");
}
for (i = 0; i < num_clients; i++) {
if (FD_ISSET(clients[i], &read_set)) {
msg = read(clients[i], buf, sizeof(buf));
if (msg > 0) {
int savedclnt = clients[i];
printf("client %d says: %s\n", i, buf);
for (int p = 0; p<num_clients; p++)
{
if (clients[p] != savedclnt) {
//write("from %d",clients[p]);
//char msg2 = strcat(clients[i],msg);
write(clients[p], buf, msg);
}
}
}
}
}
}
Quels problèmes avez-vous avec le code que vous montrez? Quelle est ta question? S'il vous plaît prenez le temps de [lire sur la façon de poser de bonnes questions] (http://stackoverflow.com/help/how-to-ask). –
Le problème que j'ai eu, c'est que je ne peux pas penser à un moyen de faire le serveur écrire tous les messages qu'un client envoie sur le socket dans tous les autres clients. J'ai lu d'autres articles similaires ici et il était impuissant. –
Pour commencer, je vous suggère soit d'essayer un [débogage canard en caoutchouc] (https://en.wikipedia.org/wiki/Rubber_duck_debugging) ou au moins passer par le code ligne par ligne dans un débogueur. C'est parce que vous avez des problèmes flagrants concernant votre manipulation de fil. En ce qui concerne votre problème, gardez une collection de tous les clients connectés, et lorsque vous lisez la boucle d'entrée sur cette collection pour écrire à tous les autres clients. Un tableau ou une liste de descripteurs de fichiers est un bon début. –