WinSocket: Daten versenden und empfangen?



  • Hi,
    Also das mit dem senden und empfangen würde ich ein wenig anders gestalten.

    send(socket, (char*)Integer, sizeof(Integer), 0);
    

    Sowas kannst du natürlich tun aber ist nicht gerade elegant. Denn wann weis der Server denn ob er sein char array in ein int umwandeln soll und wann in etwas anderes.
    Mach dir am besten eine Struktur ala

    struct packet {
       int id,
       char data[256],
    }p;
    

    Die Id verwendest du um dein Packet zu identifizieren. Damit du weist was gesendet/empfangen werden soll. Ein Bsp.

    // Client
    p.id = NET_GetCurPos; // du willst die aktuelle Mausposition erhalten.
    send(socket, (char*)&p, sizeof(struct packet), 0); // zum Server schicken.
    
    // Server
    recv(socket, &p, sizeof(struct packet), 0);
    if( p.id == NET_GetCurPos ) {
       GetCursorPos( &point );
       sprintf(p.data, "%d,%d", point.x, point.y); // Cursor Position ermitteln.
       send(socket, (char*)&p, sizeof(struct packet), 0); // zum Client schicken.
    }
    // Client
    recv(socket, &p, sizeof(struct packet), 0);
    if( p.id == NET_GetCurPos ) {
       // Cursorposition auswerten und was tun
    }
    

    Jetzt kannst du verschiedene Id's vergeben zum Beispiel auch für deine 2. Frage ob er schon eine Verbindung hat. Du sendest an den Server NET_IsConnectet oder so und der Server schickt dann die Antwort.

    Ich hoffe das war verständlich.

    schirrmie



  • vielen dank dafür

    sind diese IDs irgendwo definiert und gibt es eine referenz dazu?



  • Nein ach das ist doch ne eigene Struktur. Am besten du definierst dir eine Header Datei die deine Struktur enthält und ein enum mit allen NetzwerkID's

    enum { NET_Connect, NET_Disconnect, NET_GetCurPos, NET_... };
    

    usw. Die Headerdatei braucht dann nur noch dein Client und dein Server includen und beide haben was sie brauchen. Du kannst deine Struktur natürlich anpassen an deine Bedürfnisse je nachdem was du brauchst das war nur ein minimal bsp.

    schirrmie



  • send(socket, (char*) &Object, sizeof (Object), 0);
    

    so sendet man Objekte.

    Aber ignoriere den Vorschlag mit den Headern nicht, da das wirklich nützlich werden kann.



  • BitWax schrieb:

    send(socket, (char*) &Object, sizeof (Object), 0);
    

    so sendet man Objekte.

    Aber ignoriere den Vorschlag mit den Headern nicht, da das wirklich nützlich werden kann.

    das meinst du hoffentlich nicht ernst!

    was bringt es die adresse auf ein objekt im speicher des server zu übertragen wenn der client keinen zugriff auf den speicher des servers hat ... das gibt nur ein unglück.

    du müsstest schon die daten des objektes in ein array schreiben, so mit trennzeichen oder was in der art und die daten versenden und auf empfängerseite wieder ein objekt gleichen typs erstellen und die daten (ich meine hier die eigenschaften, variablen-werte, zustand des objekt zur sendezeit) in das neue objekt zu kopieren.

    stichwort "factory"



  • hast du schonmal versucht eine struktur über netzwerk zu senden? klappt genau so einwandfrei.

    EDIT: *hust* vorausgesetzt, man macht

    typedef struct {...};
    

    so klappt es^^



  • Ich würde gerne mal wissen was Ihr in der WinApi unter Objekten versteht?

    schirrmie



  • genau das, was ich nicht beschrieben habe.
    objekt = derivat einer klasse.



  • struktur != c++ objekt

    einen struktur ist ein speicherbereich der unterteilt ist, ein objekt besteht aus komplexeren daten die u.a. nicht zusammenhängend im speicher liegen .... mal abgesehen davon das pointer die IM objekt verwendet werden definitiv fehler verursachen würden.

    ausserdem mit &Objekt , sofern es nicht mir new erzeugt wird liefert nur einen 4byte pointer auf die zugriffsadresse des objekt und sizeof(Objekt) liefert nicht zwangsläufig den richtigen wert .... ich meine sogar das der auch nur 4 byte liefert, aber da bin ich gerade ziemlich verunsichert

    au schreck .... ich dacht ich war im c++ forum >_< tut mir unheimlich leid

    EDIT zum post unter mir:

    tut mir leid ich hab auf enter gedrückt eh ich deine edits gelesen habe



  • Ceos schrieb:

    struktur != c++ objekt

    einen struktur ist ein speicherbereich der unterteilt ist, ein objekt besteht aus komplexeren daten die u.a. nicht zusammenhängend im speicher liegen .... mal abgesehen davon das pointer die IM objekt verwendet werden definitiv fehler verursachen würden.

    ausserdem mit &Objekt , sofern es nicht mir new erzeugt wird liefert nur einen 4byte pointer auf die zugriffsadresse des objekt und sizeof(Objekt) liefert nicht zwangsläufig den richtigen wert .... ich meine sogar das der auch nur 4 byte liefert, aber da bin ich gerade ziemlich verunsichert

    au schreck .... ich dacht ich war im c++ forum >_< tut mir unheimlich leid

    deshalb habe ich ja editiert, und geschrieben, wie man eine struktur definieren muss, um sie zu versenden.

    EDIT: -.- -.- -.- -.-


Anmelden zum Antworten