Bisher hat alles perfekt funktioniert. Nur das Problem, das ich habe, ist, dass ich nicht eine Art der Zuweisung oder ich würde sagen, Namen zu den Clients, die mit dem Server verbunden sind, so dass andere Clients, die wissen, ist eine Nachricht schreiben schrieb eine Nachricht schreiben :Unix-Socket Mehrere Client-Gruppen-Chat mit Client-Namen in c
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);
}
}
}
}
}
}
Welche Probleme haben Sie mit dem angezeigten Code? Was ist deine Frage? Bitte nehmen Sie sich etwas Zeit (lesen Sie, wie Sie gute Fragen stellen können) (http://stackoverflow.com/help/how-to-ask). –
Das Problem, das ich hatte, ist, dass ich nicht daran denken kann, dass der Server jede Nachricht schreibt, die ein Client über den Socket an alle anderen Clients sendet. Ich habe andere ähnliche Beiträge hier gelesen und es war hilflos. –
Zunächst schlage ich vor, dass Sie entweder versuchen [Gummi Ente Debugging] (https://en.wikipedia.org/wiki/Rubber_duck_debugging) oder zumindest durchlaufen Sie den Code Zeile für Zeile in einem Debugger. Das liegt daran, dass Sie einige Probleme mit der Handhabung von Threads haben. Behalten Sie für Ihr Problem eine Sammlung aller verbundenen Clients bei und lesen Sie die Eingabeschleife über diese Sammlung, um sie an alle anderen Clients zu schreiben. Ein Array oder eine Liste von Dateideskriptoren ist ein guter Anfang. –