recv mit int?



  • buf zeigt irgendwo hin, aber nicht auf gültigen speicher



  • probier's mal damit:

    int receiveI( void ) {
       int buf = 0;
       rc=recv( c, static_cast<char*>( &buf ), sizeof(int), 0 );
       if ( rc != sizeof(int) ) c=INVALID_SOCKET;
       return buf;
    }
    

    bedenke aber, dass das ueber's Netzwerk schiefgehen kann, wenn auf der anderen Seite eine Maschine mit anderer Architektur ist. Auf Intel-Prozessoren werden integers meist als 32-Bit Zahlen mit der Ordnung LSB..MSB gespeichert. Z.B. bei PowerPC-Prozessoren wird die Ordnung MSB..LSB verwendet.

    Dafuer gibt's Makros wie ntohl(), die die Bytes rumdrehen (hier: ntohl() = network to host long).

    Siehe auch das Netzwerk-/Socket-Programmier-Kapitel in der Microsoft Platform SDK Documentation ( http://msdn.microsoft.com/library/ ).



  • Am besten ich deklariere char buf[256] einfach außerhalb der Methode. 👍

    Aber wie soll ich denn nu so ne aToInt funktion schreiben?
    Wenn ich "(int)" benutze verkorkst der mir doch den inhalt, oder? 😕

    MfG RoaN;



  • Nimm doch ne fertige:

    #include <stdlib.h>
    
    char buf[512];
    
    // ...
    
    int a = atoi( buf );
    


  • Achso, gibt da schon ne Fertige. 😃
    Danke für die schnellen Posts.

    MfG RoaN;



  • Ich hab das soweit probiert, aber bei der itoa() funktion gibt es 3 Parameter.
    Wieso 3?
    Welche Argumente gehören da rein?

    1.int 2.char* 3.int

    Als ich es mit itoa(wert,buf,4); (4 wie 4 byte) probiert habe kam am enderen Ende der Leitung 113 raus! 😕

    Ich hab keine Ahnung was das soll.

    MfG RoaN;



  • Bitte schreibt mir, ich weiß sonst nicht wie ich weiterarbeiten soll!

    MfG RoaN;



  • Der dritte Parameter von atoi ist wahrscheinlich die Zahlenbasis, mit der die Zahl in den Puffer geschrieben werden soll, also 10 fuer dezimal, 8 fuer oktal oder 16 fuer hexadezimal.

    Besser lesbar ist sprintf().

    char buf[100];
    sprintf( buf, "%d", val );
    

    Bedenke auch, dass die Zahl von atoi() bzw. sprintf() als Text in den Puffer geschrieben wird, also z.B. "123" bei 123.

    Bei Binaerdaten kannst Du Dir den Puffer u.U. sparen.



  • Power Off schrieb:

    Bedenke auch, dass die Zahl von atoi() bzw. sprintf() als Text in den Puffer geschrieben wird, also z.B. "123" bei 123.

    Danke für die Antwort, aber dass will ich ja gar nicht. 🙄
    Ich möchte Integer Variablen mit send() und recv() versenden, die Funktionen nehmen aber nur char* an.
    Den Integer in einen Char umwandeln

    i=(char)i;
    

    geht auch so, nur belegt der dann halt nur noch ein Byte und jeder Werd über 255 ist futsch.

    Bin jetzt aber nach einiger Zeit selbst auf die Lösung gekommen und benutze einfach die naheliegende Lösung memcpy() zu verwenden.

    Da ich bis jetzt mit C selbst nichts am Hut hatte kannte ich diese olle Funktion blöderweise nicht.

    MfG RoaN;



  • int i = 2000;
    send(socket, reinterpret_cast<char*>(&i), sizeof(i), 0);



  • Man bemerke das "&" vor dem "i" in asdfasfd's Post. Das ist der Address-Of-Operator. Er ermittelt die Adresse der Variablen "i". Diese Adresse laesst sich dann mittels reinterpret_cast z.B. in einen char* (Zeiger auf Character) umwandeln. Ich hatte diese Loesung bereits auf der ersten Seite vorgeschlagen.


Anmelden zum Antworten