Chat Programm - über TCP oder UDP?
-
TCP natürlich
-
Nanobot schrieb:
Mit TCP hab ichs schon ausprobiert, aber die accept Funktion blockiert mein
ganzes Programm.Logisch, ist nicht die einzige Funktion, die potentiell blockierend ist.
Du kannst das Problem elegant umgehen, wenn Du WSAAsyncSelect verwendest um damit auf asynchrone Sockets umzusteigen. Damit werden die blockierenden Funktionen in Threads ausgelagert (konkret: Du verwendest damit weiterhin die Standard-Funktionen, wie select, accept, ..., nur werden diese von Windows aus in seperaten Threads ausgeführt, kehren also sofort zurück und Dein Programm wird nicht blockiert) und Windows benachrichtigt Dich darüber, wenn es was Neues gibt
.Wichtig ist dabei allerdings, dass der Return-Wert (dieser Standard-Funktionen, wie z.B.: select) immer einen 'Fehler' liefert; du musst also mit WSAGetLastError() prüfen, ob *wirklich* ein Fehler aufgetreten ist
.Happy X-Mas! :xmas1:
-
CodeFinder was du da geschrieben hast ist ziemlich falsch. Hab aber keinen Bock dich zu berichtigen.

-
eeky schrieb:
CodeFinder was du da geschrieben hast ist ziemlich falsch. Hab aber keinen Bock dich zu berichtigen.

Solange Du Dich nicht konstruktiv äußern kannst (mal ganz davon abgesehen, dass man als Unregistrierte sowieso jeden Müll posten kann), behandle ich Deinen Beitrag mal als nicht existierend
.
Was ist daran falsch?
-
wenn man WSAAsyncSelect benutzt braucht man doch kein select mehr!!
-
unreg2 schrieb:
wenn man WSAAsyncSelect benutzt braucht man doch kein select mehr!!
- da hast Du allerdings Recht. Wobei eigentlich gings mir ja nicht um select, sondern generell um die Standard-(Win-)Socket-Funktionen, wie dann, das Beispiel wäre wohl passender gewesen, accept
. Aber hassu Recht
!
-
Du kannst das Problem elegant umgehen, wenn Du WSAAsyncSelect verwendest um damit auf asynchrone Sockets umzusteigen.
Hört sich gut an!
Probier ich gleich mal aus, melde mich wieder wenns Probleme gibt^^
-
Wenn man WSAAsyncSelect verwendet, wie differenziert man denn dann zwischen den verschiedenen Clienten ohne select zu verwenden?
Wenn ich jetzt also z.B. eine FD_READ - Nachricht bekomme, woher weiß ich dann von welchem Clienten speziell diese nachricht kommt? Also ohne select zu verwenden.
Wüsste jetzt nicht wie das ohne select geht und für jeden Clienten eine eigene Rückruffunktion zu schreiben ist wegen der großen Redundanz ja auch nicht das wahre.
-
The wParam parameter identifies the socket on which a network event has occurred.
-
Danke für diese Information.