const int _size=4096;
char _buf[_size];
FILE* file;
file = fopen(address.c_str(), "rb");
int BytesRead = 0;
while (!feof(file)) {
ZeroMemory(_buf, _size);
BytesRead = fread(_buf, 1, _size, file);
if (BytesRead > 0) {
send(_skt, _buf, BytesRead, 0); // send data
cout << BytesRead << endl;
ZeroMemory(_buf, _size);
recv(_skt, _buf, _size, 0); // receive SUCCESS
}
}
send(_skt, "eof", 3, 0); // send eof
fclose(file);
cout << "transmitting successful" << endl;
Сервер пишет файлы в определенную папку. Текстовые файлы копируются таким образом на сервер без проблем. Размер и содержимое совпадает. Но с .exe беда. Проблема в отправке. Если разделить размер файла на размер буфера, то количество отправок не совпадает с реальным. В итоге файлы пишутся едва ли на 10% от своего размера и, конечно же, не работают. Где ошибка ?
#define FAIL "-1"
#define SUCCESS "0"
fstream IncFile;
IncFile.open(FileName, fstream::out);
int nbytes = 0;
while (1) {
ZeroMemory(_buf, _size);
nbytes = recv(sock, _buf, _size, 0);
if (nbytes == SOCKET_ERROR) {
cout << GetTime() << "\tERROR while receive: "
<< WSAGetLastError()
<< "\tsocket " << sock << endl;
return 0;
}
if ((string)_buf != "eof") {
IncFile << _buf;
send(sock, SUCCESS, strlen(SUCCESS), 0);
}
else
break;
}
IncFile.close();
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости