Problem mit Socket-Chat
-
Ich habe mir ein Konsolenbasierendes SOCKET Chat-Programm geschrieben und stehe nun vor einem Problem. Gehen wir von 2 Chatpartnern A und B aus. Immer, wenn A etwas eingibt und B gleichzeitig mit der Eingabe noch nicht fertig war, erscheint der eingegebene Text von A auf EINER Zeile mit dem, was B eingeben wollte in der Konsole von B. Wie kann ich das verhindern?
Win32-Konsole.
-
Speicher die werte zuerst. Wenn dann \0 gesendet wird wird das angezeigt.
-
Du meinst im Puffer oder? Da werden sie ja sowieso schon gespeichert.
-
lk meint wohl eher, dass der Text von User A erst dann ausgegeben werden soll, wenn User B mit Return seine Eingabe beendet hat.
-
Wie könnte man das am besten implementieren? Das sind die beiden Threads, die ich zur Kommunikation benutze:
DWORD WINAPI reader(PVOID pParam) { char line[BUF_SIZ]; SOCKET s; s = *(SOCKET*)pParam; while(fgets(line, sizeof(line) - 3, stdin)) { cut(line); strcat(line, "\r\n"); /* passt sicher */ if (send(s, line, strlen(line), 0) == -1) return 1; } return 0; } DWORD WINAPI writer(PVOID pParam) { char buffer[BUF_SIZ]; int bytes; SOCKET s; s = *(SOCKET*)pParam; while((bytes = recv(s, buffer, sizeof(buffer), 0)) > 0) fwrite(buffer, 1, bytes, stdout); return 0; }
-
Zeile 28:
Schreibe die empfangenen Bytes nicht direkt in den Ausgabestrom sondern in eine separate Variable. Hier macht sich ne Queue ganz gut. Die STL bietet dazu die Klasse queue
ca. Zeile 11:
wäre wohl in dem Code derzeit der beste Platz für die Ausgabe, in dem du deine separate Variable ausgibst oder ueber die queue iterierst.PS: nimm den Code, den du aus dem Internet herkopierst, ruhig mal Zeile für Zeile auseinander und schau, was da genau abläuft
