ganselo
30-07-2009, 18:59
Здравствуйте!
Есть сервер на котором установлена прога (серверная часть). Клиенты посылают запросы серверу на скачку файлов.
Пытаюсь написать клиентскую часть, но возникают проблемы с приёмом файлов. Вот кусок кода, где осуществляется приём и запись:
//command[0] = "File", command[1] = FileName - заголовок приходящий от сервера.
if(command[0] == "File")
{
//создаём поток для записи файла
HANDLE hThread = CreateThread(NULL, 0, DownloadThread, command[1].c_str(), 0, NULL);
if(hThread == INVALID_HANDLE_VALUE)
{
....
}
....
CloseHandle(hThread);
}
//===================================================================
DWORD WINAPI DownloadThread(LPVOID lpParam)
{
LPTSTR Param = (LPTSTR)lpParam;
char recvBuff[4097];
SOCKET sock;
HANDLE hFile;
OVERLAPPED ovlp;
char FileName[MAX_PATH] = "C:\\";
strcat(FileName, Param);
.....
.....
//Создаём файл
hFile = CreateFile(FileName, GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
//запускаем цикл, где считываем сообщения от сервера.
while(1)
{
int ret = recv(sock, recvBuff, sizeof(recvBuff), 0);
if(ret == 0 || ret == SOCKET_ERROR) break;
recvBuff[ret] = '\0';
ovlp.Offset = GetFileSize(hFile, 0);
ovlp.OffsetHigh = 0;
ovlp.hEvent = NULL;
//записываем в файл
WriteFile(hFile, recvBuff, strlen(recvBuff), 0, &ovlp);
}
CloseHandle(hFile);
closesocket(sock);
.....
}
Проблема в том, что текстовые файлы приходят нормально, а бинарные нет.
Точно знаю, что серверная часть работает нормально и серверная часть отсылает файл с помощью функции TransmitFile (mswsock.h).
Кто нибуть знает почему не правильно приходят или я не так записываю бинарные файлы?
Есть сервер на котором установлена прога (серверная часть). Клиенты посылают запросы серверу на скачку файлов.
Пытаюсь написать клиентскую часть, но возникают проблемы с приёмом файлов. Вот кусок кода, где осуществляется приём и запись:
//command[0] = "File", command[1] = FileName - заголовок приходящий от сервера.
if(command[0] == "File")
{
//создаём поток для записи файла
HANDLE hThread = CreateThread(NULL, 0, DownloadThread, command[1].c_str(), 0, NULL);
if(hThread == INVALID_HANDLE_VALUE)
{
....
}
....
CloseHandle(hThread);
}
//===================================================================
DWORD WINAPI DownloadThread(LPVOID lpParam)
{
LPTSTR Param = (LPTSTR)lpParam;
char recvBuff[4097];
SOCKET sock;
HANDLE hFile;
OVERLAPPED ovlp;
char FileName[MAX_PATH] = "C:\\";
strcat(FileName, Param);
.....
.....
//Создаём файл
hFile = CreateFile(FileName, GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
//запускаем цикл, где считываем сообщения от сервера.
while(1)
{
int ret = recv(sock, recvBuff, sizeof(recvBuff), 0);
if(ret == 0 || ret == SOCKET_ERROR) break;
recvBuff[ret] = '\0';
ovlp.Offset = GetFileSize(hFile, 0);
ovlp.OffsetHigh = 0;
ovlp.hEvent = NULL;
//записываем в файл
WriteFile(hFile, recvBuff, strlen(recvBuff), 0, &ovlp);
}
CloseHandle(hFile);
closesocket(sock);
.....
}
Проблема в том, что текстовые файлы приходят нормально, а бинарные нет.
Точно знаю, что серверная часть работает нормально и серверная часть отсылает файл с помощью функции TransmitFile (mswsock.h).
Кто нибуть знает почему не правильно приходят или я не так записываю бинарные файлы?