Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Socket Recv/Snd Problem

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
19.02.2007, 19:00 Uhr
~kazekage
Gast


Hi,

ich hab ein kleines Problem beim Senden des Dateinamen über eine Socketverbindung. Der Name der ankommt ist total zerhackt und es steht nur müll drin.

Das Senden mache ich so:


C++:
        /* Größe der Datei die gesendet werden soll vorraus schicken */
        char * size = (char*) &sizeOfFile;
        send(sendSocket, size, sizeof(unsigned long), 0);

        /* Dateiendung/Größe der Dateiendung - der Datei die gesendet wird vorraus schicken */
        fileName = GetFileNameToSend(buf);
        sizeOfFileName = sizeof(fileName);
        size = (char*) &sizeOfFileName;
        send(sendSocket, size, sizeof(unsigned int), 0);



Das Empfangen des Dateinamen so:

C++:
    char            sizeFileNameBuffer[sizeof(unsigned int)];
    char            fileName[100];
    std::string        fileNameAsString;

    /* Größe der Datei empfangen die gesendet wird */
    recv(recvSocket, sizeBuffer, sizeof(unsigned long), 0);
    sizeOfFileToReceive = *(unsigned long*) &sizeBuffer;

    /* Länge des Dateinamen empfangen der gesendet wird */
    recv(recvSocket, sizeFileNameBuffer, sizeof(unsigned int), 0);
    sizeOfFileNameToReceive    = *(unsigned int*) &sizeFileNameBuffer;



Die Übertragung der Größe funktioniert noch, aber der Dateiname der empfangen wird ist totaler Schrott. Woran kann das liegen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
19.02.2007, 21:19 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


hi
altbekannter/-bewährter Fehler:

sizeof wird bei compilezeit ausgewertet, liefert bei einem char-array dann meist 4 oder 8,

textuelle Länge von einem char-array: strlen(chararray)
bei std::string stringvar.length() benutzen.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
20.02.2007, 19:58 Uhr
~kazekage
Gast



Zitat von FloSoft:
hi
altbekannter/-bewährter Fehler:

sizeof wird bei compilezeit ausgewertet, liefert bei einem char-array dann meist 4 oder 8,

textuelle Länge von einem char-array: strlen(chararray)
bei std::string stringvar.length() benutzen.


hm....

Also, beim senden habe ich derzeit eine größe des dateinamen von 4 Byte, die größe ermittle ich mir jetzt mit .length() wie du gesagt hast.


C++:
        fileName = GetFileNameToSend(buf); /* filename = std::string */
        sizeOfFileName = sizeof(fileName.length());
        size = (char*) &sizeOfFileName;
        send(sendSocket, size, sizeof(unsigned int), 0);/* Größe Dateiname */
        send(sendSocket, fileName.c_str(), fileName.length(), 0); /* Dateiname */


Wenn ich mir die sizeofFileName mit sizeof(fileName) ermittle komme ich auf 32, was der doppelten größe des eigentlich gespeicherten textes entspricht.

Mit den 4 kommen aber immerhin schonmal die ersten 4 zeichen das dateinamen an. Während bei den 32 kein lesbares zeichen ankommt, also keins das den namen entspricht den ich da eigentlich verschicke.

ich bin etwas verwirrt, warum es mit der viel zu kurzen länge (4) besser klappt, als mit der zu langen länge (32)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
20.02.2007, 20:03 Uhr
Oliver
S2-Pixelgeneral



C++:
sizeOfFileName = sizeof(fileName.length());



Jetzt setzt du die Größe vom Rückgabewert von .length().
Das sizeof da weg...
--
Demokratie ist die Diktatur der Mehrheit.

www.siedler25.org/ ( Siedler2 - Remake )
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
22.02.2007, 08:04 Uhr
~kazekage
Gast



Zitat von Oliver:

C++:
sizeOfFileName = sizeof(fileName.length());



Jetzt setzt du die Größe vom Rückgabewert von .length().
Das sizeof da weg...


ahhh, siehe da es funktioniert. Danke
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: