Передача файлов Winsock C++

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by winsock, 15 Aug 2010.

  1. winsock

    winsock New Member

    Joined:
    15 Aug 2010
    Messages:
    57
    Likes Received:
    2
    Reputations:
    0
    пишу бэкдор ,застрял на передаче файлов..
    Передача вроде как выполняется , но не так как хотелось бы.
    На входе 1мб.
    На выходе +inf

    Передача :
    Code:
    HANDLE hFile= CreateFile(file_name,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);  
    
    if(!TransmitFile(socket,hFile,0,1024*1024,NULL,0,TF_REUSE_SOCKET))return 0;

    Прием :
    Code:
    while(recv(sock,buff,sizeof(buff),0)!=SOCKET_ERROR) fwrite(buff,sizeof(buff),255,f);
    
     
  2. WNZRS

    WNZRS Member

    Joined:
    3 Sep 2009
    Messages:
    294
    Likes Received:
    52
    Reputations:
    1
    предположу что buff имеет тип char *
    тогда получается что каждый раз ты получаешь по 4 байта (sizeof(buff) == 4)

    в buff 4 байта, а ты эти 4 байта пишешь как 4*255 (в запись идёт память дальше)

    Как править (если моё предположение верно):

    Code:
    recv(sock,buff,sizeof(char)*size,0) // size - кол-во байт которое даёшь при new
    fwrite(buff,sizeof(char),size,f);
    Если не верна, то возможно проблема в записи, и нужно сделать по аналогии как написано выше
     
  3. winsock

    winsock New Member

    Joined:
    15 Aug 2010
    Messages:
    57
    Likes Received:
    2
    Reputations:
    0
    Как и предполагал не помогло =\
     
  4. just_panic

    just_panic New Member

    Joined:
    5 Jun 2010
    Messages:
    67
    Likes Received:
    2
    Reputations:
    0
    функция recv возвращает количество принятых байт.
    Code:
    while(1)
    {
       int size = recv(sock, buff, sizeof(buff), 0);
       if(size == 0) break;
       else if(size == SOCKET_ERROR) { printf("error"); }
       fwrite(buff, size, size, f);
    }
    
     
  5. winsock

    winsock New Member

    Joined:
    15 Aug 2010
    Messages:
    57
    Likes Received:
    2
    Reputations:
    0
    Теперь не +inf
    передается небольшой кусочек и все,при этом обе функции управление не возвращают..
     
  6. winsock

    winsock New Member

    Joined:
    15 Aug 2010
    Messages:
    57
    Likes Received:
    2
    Reputations:
    0
    в общем написал передачу на send\recv ,все работает.
    спс что попытались помочь
     
  7. Peklots

    Peklots Elder - Старейшина

    Joined:
    28 Sep 2008
    Messages:
    281
    Likes Received:
    144
    Reputations:
    36
    Ну а нам расскажи как, интересный такой :D
     
  8. winsock

    winsock New Member

    Joined:
    15 Aug 2010
    Messages:
    57
    Likes Received:
    2
    Reputations:
    0
    тут готовые функции для передачи\приема файлов,я на на их основе делал свои...

    /threadnav95054-2-10-TransmitFile.html