Я пытаюсь написать небольшой код для отправки файла по сети в Windows, но, похоже, он не работает должным образом.
Это мой код:
char *arrFile = readFile("test.exe");
int fileSize = getFileSize("test.exe");
int sentSize = 0;
int justSent;
while(sentSize < fileSize) {
justSent = send(sock, arrFile + sentSize, fileSize - sentSize, 0);
sentSize += justSent;
}
После нескольких циклов произошла ошибка при отправке, я не знаю почему. Может кто-нибудь сказать мне причину (и решение проблемы couse: D)?
Обновить
Я использую неблокирующий сокет и получаю ошибку ‘WSAEWOULDBLOCK’, но он все равно ничего не отправляет после ошибки, пока клиент не отправит что-то обратно 🙁
Выше код C, но C ++ также: D
Похоже на функцию send
не работает правильно. Он возвращает -1, который затем добавляется к justSent
, После нескольких итераций justSent
является достаточно отрицательным, чтобы вызвать ошибку сегментации.
Чтобы исправить эту проблему, вы должны добавить код для обработки ошибки (когда send
возвращает значение < 0).
Примерно так будет хорошим началом:
while(sentSize < fileSize)
{
justSent = send(sock, arrFile + sentSize, fileSize - sentSize, 0);
if(justSent < 0)
{
printf("Error!\n");
break;
}
sentSize += justSent;
}
Других решений пока нет …