Re: InternetReadFile - проблема чтения длиного файла
От: Alex Fedotov США  
Дата: 18.10.05 18:57
Оценка:
Здравствуйте, jacque, Вы писали:

J>Доброго времени суток.

J>Приложение посылает xml-запросы серверу и получает их в таком же виде.
J>Имею возможность видеть лог сервиса на сервере, ко мне уходит "большой"(24к) ответ, InternetReadFile читает маленький кусочек и все, а когда я закрываю handle запроса вываливаеться исключение win32.
J>Код
J> if (!HttpSendRequest(hRequest, NULL, 0, (LPVOID)postData, postDataSize)) //шлю хмл
J> {
J> ret = EHTTPERROR_CreateHTTPRequestFailed;
J> break;
J> }

J> if (!HttpEndRequest(hRequest, NULL, 0, 0))

J> {
J> DWORD d = GetLastError();

J> ret = EHTTPERROR_CreateHTTPRequestFailed;

J> break;
J> }
J> // read answer
J> char buff[ 1024 ];
J> int recived = 0;
J> while (1)
J> {
J> DWORD nread = 0;
J> if (!InternetReadFile(hRequest, buff, 1024, &nread)) //читает все время 1736 байт от длиного ответа
J> {
J> ret = EHTTPERROR_CreateHTTPRequestFailed;
J> break;
J> }
J> if (nread)
J> {
J> int oldSize = recived;
J> recived += nread;
J> memcpy(recvData + oldSize, buff, nread);
J> }
J> else
J> break;
J> }

J> recvData[ recived ] = 0;


J> break;

J> }

J> if (hRequest)

J> InternetCloseHandle(hRequest); //исключение, так как не все дочитал


1. По какому условию заканчивается цикл? Если InternetReadFile возвращает FALSE, то какой код ошибки выдает GetLastError?
2. Вы уверены, что в recvData достаточно места, чтобы получить все данные?
3. InternetCloseHandle не будет бросать исключение если не все данные прочитаны. Скорее, вы где-то память портите.

P.S. не recived, a received.
-- Alex Fedotov
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.