struct per winsock verschicken?
-
hi ich möchte folgendes realisieren:
ich hab n struct, in das ich meine daten packe. dann caste ich das zu nem char*, verschicke es per winsock, und lasse es bei server wieder zu nem struct casten. ist das möglich? wenn nein, wie kann ich dann structs und andere daten (sprich rohdaten) verschicken?
danke!
-
pixartist schrieb:
hi ich möchte folgendes realisieren:
ich hab n struct, in das ich meine daten packe. dann caste ich das zu nem char*, verschicke es per winsock, und lasse es bei server wieder zu nem struct casten. ist das möglich? wenn nein, wie kann ich dann structs und andere daten (sprich rohdaten) verschicken?
danke!Hi,
ja es ist möglich, z.B. so:
http://www.hmug.org/man/2/send.phpstruct my_struct; ssize_t sent = send(socket, (char*)&my_struct, sizeOf(my_struct), 0);
und beim recieve dann so:
http://www.hmug.org/man/2/recv.phpstruct my_struct; ssize_t received = recv(socket, (char*)&my_struct, sizeOf(my_struct), 0);
Ob es allerdings auf Grund der Segmentierung und durch die verschiedenen Bytorders (Little, Big Endian) sinnvoll ist... nein eher nicht...
Bau dir lieber einen ordentlichen Buffer vor dem versenden zusammen den du auf der anderen Seite dann auch wieder ordentlich auslesen kannst.
Wenns um große Mengen geht, könntest du ja sogar noch komprimieren
-
jo danke, ich habs in nem buffer gelöst..mein programm ist nur n ganz einfaches lan chat programm
aber ich hab da noch ein kleines problem..momentan wird in meinem progrämmchen in ner while-schleife etwas gesendet, und dann auf eine antwort gewartet. das ist natürlich suboptimal, da man bei einem chat programm empfangen muss, ohne zu sendendementsprechen brauch ich wohl zwei threads, einen zum empfangen, einen zum senden. wäre toll wenn mir jmd nen tipp geben könnte wie ich so einen thread starte/behandle
Danke!
-
falls du ein Win32-Programm mit einem Fenster-Handle (HWND) hast, könntest du mit der WSAAsyncSelect() funktion http://msdn.microsoft.com/de-de/library/windows/desktop/ms741540%28v=vs.85%29.aspx Windows-Messages abfangen (zBs: FD_ACCEPT annehmen der verbindungen, FD_READ, FD_WRITE...)
Eine Seite die mir persönlich sehr geholfen hat:
http://www.win32developer.com/tutorial/winsock/winsock_tutorial_7.shtm
-
Für das versenden bietet sich die Umwandlzung von der Host-Byte-Order in die Net-Byte-Order
Dafür gibt es auch Funktionen: htonl htons ntohl ntohsUnd select wurde auch schon genannt.
Tipps findest du u.a auch bei http://www.zotteljedi.de/socket-tipps/index.html