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.php

    struct 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.php

    struct 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 senden 🙂 dementsprechen 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 ntohs

    Und select wurde auch schon genannt.

    Tipps findest du u.a auch bei http://www.zotteljedi.de/socket-tipps/index.html


Anmelden zum Antworten