Probleme mit Windows Socket Funktion send



  • Folgendes Problem, ich habe mir in einem char Array Werte definiert
    bei Ausgabe von:

    cout<<"Header Inhalt:"<<(int)myArray[0]<<(int)myArray[1]<<(int)myArray[2]<<(int)myArray[3]<<(int)myArray[4]<<(int)myArray[5]<<hex<<(int)myArray[6]<<hex<<(int)myArray[7]<<...<<hex<<(int)myArray[14]<<endl;
    

    sieht das in etwa so aus:
    Header Inhalt: 00000FF0000000
    Das Problem ich möchte genau diese Werte in dieser Reihenfolge mit der Funktion

    send(s,myArray,strlen(myArray),0)
    

    ( WindowsSocket ) an einen Server verschicken.

    Wenn ich mir auf dem Server nun den Buffer ausgeben lasse , der die Daten empfangen hat

    rc=recv(clients[i],buf,strlen(buf),0);
    		cout<<"Buf "<<hex<<(int)buf[0]<<hex<<(int)buf[1]<<hex<<(int)buf[2]<<hex<<(int)buf[3]<<hex<<(int)buf[4]<<hex<<(int)buf[5]<<hex<<(int)buf[6]<<hex<<(int)buf[7]<<hex<<(int)buf[8]<<hex<<(int)buf[9]<<hex<<(int)buf[10]<<hex<<(int)buf[11]<<hex<<(int)buf[12]<<hex<<(int)buf[13]<<hex<<(int)buf[14]<<endl;
    		cout<<"Client sendet:"<<hex<<(int)buf<<endl;
    

    kommt folgendes heraus:
    Buf FFFFFCC und diese 14 mal hintereinander
    Client sendet: 12fe20
    Buf[7]=fffffcc
    wie kann das sein, wenn ich buf als

    char buf[256]
    

    definiert habe.
    ich möchte hier als Ausgabe das gleiche wie beim Client sehen, doch durch das senden fasst er das wohl zusammen.

    Ich wollte es auch schon in einen String umwandeln und versenden, doch da ich mehrere 0 drin hab geht das nicht.



  • Schau dir den letzten parameter beim send an (DA gibts e defines in der socket.h und wenn dort der name das defines steht kennt man sich auch besser aus
    mfg



  • Dieser Thread wurde von Moderator/in davie aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Der letze Paprameter is 0 steht ja oben,da könnte folgendes rein:

    MSG_DONTROUTE Specifies that the data should not be subject to routing. A Windows Sockets service provider can choose to ignore this flag. 
    MSG_OOB Send out-of-band data (stream-style socket such as SOCK_STREAM only. Also see DECnet Out-Of-band data for a discussion of this topic).
    

    Welches wäre das richtige? wie werden dann die Daten versenden?

    EDIT: Hab mal beide ausprobiert, aber es ändert sich nicht.



  • Erstmal solltest du unbedingt die Rückgabewerte von send() und recv() etc. prüfen.
    Zudem empfängt recv() die Daten unter Umständen nicht in einem Rutsch!
    Wenn du 12 Bytes gesendet hast, kann recv() auch erstmal 3 Bytes empfangen (rückgabewerte wäre dann 3...) und beim nächsten recv()-Aufruf die restlichen 9 Bytes. Der 3. Parameter von recv() gibt lediglich an wieviel Daten maximal in den Buffer passen - nicht die Anzahl Bytes die auch tatsächlich in den Buffer geschrieben werden...

    ...und strlen() halte ich da auch nicht für sehr sinnvoll!



  • Stimmt, hier scheint das Problem zu liegen, send gibt mir ffffffff zurück und recv gibt mir ein -1 zurück, woran kann das liegen?

    EDIT: Der Client scheint gar nicht bis zu send zu kommen, nach öffnen der Verindung bringt er mir folgende Fehlermeldung:

    Nicht abgefangene Ausnahme in ClientAnwendung.exe: 0xC0000005: Access Violation.
    

    Dann bringt er mir irgenwelchen Quellcode
    wo drüber steht:

    // xstring internal header (from <string>)
    

    Und dann zeigt der Pfeil auf:

    && allocator == _X.allocator)
    

    Wie finde ich heraus wo der Fehler liegt?



  • Hab das Problem gelöst, habe immer meine Fehlermeldung in einen string geschrieben und diesen ausgegeben, da lag der Fehler, jetzt funzt auch send und recv, trotzdem Dank an alle. 🕶


Log in to reply