Netzwerkchat mit Threads

THE_HELL

Grünschnabel
Guten Tag,
Momentan bin ich dabei, einen Netzwerkchat zu schreiben, habe aber das Problem, das auf der weise, wie ich es bisher gemacht habe nur zuerst der Server schreibt und dann kann der Client antworten.

Ich möchte aber, dass der Client und der Server gleichzeitig schreiben und empfangen können.

Habt ihr da i-welche Ideen?

Die bisherigen Dateien habe ich als *.zip als Anhang
 

Anhänge

Schau dir mal Non-Blocking IO an. Für verschiedene Betriebssysteme gibt es da verschiedene Ansätze. z.B.:

Linux & Windows & Andere: select
Linux: poll, epoll
Windows: IOCP (I/O Completion Ports)

Gerade epoll und IOCP sind schon recht anspruchsvoll, lassen aber auch alle Möglichkeiten offen. Ich würde dir empfehlen, dich einmal mit select oder poll an das Thema heranzutasten und dann nach und nach eine Ebene höher zu gehen. Die angegeben Seiten sind jetzt nicht unbedingt die beste Informationsquelle, aber du findest massig zu den meisten Themen über eine Suchmaschine deiner Wahl ;)
 
Egal welche Methode du verwendest, es reduziert sich immer auf 2 Möglichkeiten.

1) Alles in einem Thread, dann musst du mit non blocking Funktionen wie select() immer wieder den Socket abfragen, ob du dafür eine vorgefertigte Funktion verwendest oder nicht macht auch keinen Unterschied, effektiv reduziert sich das auf die Verwendung eines Timers.

2) 2 Threads verwenden, einer fürs Hauptprogramm inkl. send() wann immer Daten zum Senden anstehen und einer der permanent (in einer Endlos-Schleife) im blocking recv() hängt.
Damit kannst du dann senden und empfangen gleichzeitig, hast aber das übliche multithreaded Problem, sprich du musst mit Mutex oder CriticalSection arbeiten.

Ich habe beides ausprobiert, 1) ist einfacher zu coden, 2) läuft am Ende besser, aber da schleichen sich gerne Bugs ein, die einen Haufen Zeit kosten, bevor man sie findet.
 
Zurück