winsock recv des NETFILEHEADER klappt nicht



  • typedef struct NETFILEHEADER 
    { 
        unsigned long FileSize; 
        char pFileName[256]; 
    }; 
    
    server:
    
        NETFILEHEADER FileHeader; 
        const char *pFileName = "Datei.txt";
        unsigned long Filesize = 3072;
    
        /////////////// NETFILEHEADER initialisieren ///////////////////
    
        FileHeader.FileSize = FileSize; 
        memset(FileHeader.pFileName, 0, 256); 
        memcpy(FileHeader.pFileName, pFileName, strlen(pFileName)); 
    
        /////////////////// NETFILEHEADER senden ////////////////////////
    
        send(sender, (char*)&FileHeader, sizeof(NETFILEHEADER), 0); 
    
    client:
    
        NETFILEHEADER FileHeader; 
        long FileSize; 
    
        /////////////////// NETFILEHEADER empfangen /////////////////////
    
        char *FileHeader1 = new(char[sizeof(Netfileheader)]; 
    
        unsigned long AlreadyReceived = 0 
        unsigned long rc = 0; 
    
        char* p = Fileheader1; 
    
        do 
        { 
           rc = recv(client, p, sizeof(NETFILEHEADER)-AlreadyReceived, 0); 
           AlreadyReceived += rc; 
           p += rc; 
    
        }while(AlreadyReceived<sizeof(NETFILEHEADER)); 
    
        memcopy(FileHeader1, Netfileheader, sizeof(NETFILEHEADER));   
    
        FileSize = FileHeader.FileSize;
    

    hi!
    der recv des NETFILEHEADER klappt nicht! wenn ich filesize und FileHeader.pFileName auf die konsole ausgebe dann bekomm ich nur mist!;-(
    ist die schleife überhaupt mötig...oder kann der NETFILEHEADER mit einem recv empfangen werden?
    cu



  • Also dein Client-Code ist glaub' nicht ganz so fehlerfrei. Habe zwar noch nir was mit sockets gemacht, aber syntaktisch sollte es doch eher so irgendwie aussehen:

    NETFILEHEADER NetFileHeader; 
        long FileSize; 
    
        unsigned long AlreadyReceived = 0 
        unsigned long rc = 0; 
    
        char *p = (char *)&NetFileHeader; 
    
        do 
        { 
           rc = recv(client, p, sizeof(NETFILEHEADER)-AlreadyReceived, 0); 
           AlreadyReceived += rc; 
           p += rc; 
    
        }while(AlreadyReceived<sizeof(NETFILEHEADER)); 
    
        FileSize = NetFileHeader.FileSize;
    

    Ich hoffe mal, dass der Code so einigermaßen stimmt - Fehlerprüfung ist natürlich auch noch keine eingebaut 😉



  • client:
    
    NETFILEHEADER FileHeader; 
    long FileSize; 
    
    /////////////////// NETFILEHEADER empfangen ///////////////////// 
    
    rc = recv(client, (char*)&FileHeader, sizeof(NETFILEHEADER), 0);
    
    FileSize = FileHeader.FileSize;
    

    wäre ja so besser? hab ja nur ein send...
    rev wartet ja bis alle daten vom netfileheader, welcher eventuell in mehrere pakete gesplitet sind, da sind?

    cu



  • sollte eigentlich auch gehen 🙂



  • weiß jemand:
    rev wartet ja bis alle daten vom netfileheader, welcher eventuell in mehrere pakete gesplitet sind, da sind?

    dann is wohl der letzte code paste der ideale...

    cu



  • surf schrieb:

    weiß jemand:
    rev wartet ja bis alle daten vom netfileheader, welcher eventuell in mehrere pakete gesplitet sind, da sind?

    dann is wohl der letzte code paste der ideale...

    cu

    Kommt auf deine Windowsversion an. Bei Win9x definitv nicht, bei WinNT auch nicht immer, solltest also selber etwas in der Richtung programmieren



  • oh man damit wird alles total kompliziert.


Anmelden zum Antworten