пишу бэкдор ,застрял на передаче файлов.. Передача вроде как выполняется , но не так как хотелось бы. На входе 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);
предположу что 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); Если не верна, то возможно проблема в записи, и нужно сделать по аналогии как написано выше
функция 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); }
тут готовые функции для передачи\приема файлов,я на на их основе делал свои... /threadnav95054-2-10-TransmitFile.html