InternetReadFile () читает данные, но возвращает false и устанавливает число прочитанных байтов в ноль - PullRequest
1 голос
/ 30 декабря 2011

Делая асинхронный запрос с Wininet, когда функция обратного вызова состояния вызывается с INTERNET_STATUS_REQUEST_COMPLETE, я получаю код состояния http.

result = HttpQueryInfo(
    this->requestHandle,
    HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER,
    &value,
    &sizeofDword,
    &index);

Код состояния возвращается 200. После этого я вызываю InternetReadFile ().

result = InternetReadFile(
    this->requestHandle,
    ((char*)(this->buffer)) + this->totalBytesReceived,
    this->bufferSize - this->totalBytesReceived,
    &bytesRead);

this->totalBytesReceived += bytesRead;

Возвращает true и устанавливает lpNumberOfBytesRead в ноль. GetLastError () возвращает ERROR_IO_PENDING, затем я жду, что функция обратного вызова вызывается снова с INTERNET_STATUS_REQUEST_COMPLETE.

Когда это происходит, InternetReadFile () возвращает true и снова устанавливает lpNumberOfBytesRead в ноль.

Если я отлаживаю приложение, я вижу после первого InternetReadFile (), что данные ответа уже находятся в lpBuffer. Более того, если я вызываю Sleep () за одну секунду до InternetReadFile (), InternetReadFile () работает правильно.

Sleep(1000);

result = InternetReadFile( ...

Я что-то пропустил?

1 Ответ

0 голосов
/ 15 марта 2012

Я сталкивался с подобной проблемой, и до сих пор такая же, даже при использовании Sleep (1000). Я подключался к стороннему потоку с камеры, пробовал на отладочной версии, которая отлично работала. Но когда я вернулся к релизной версии, это просто не сработало.

Я исправил это, изменив ltlpszAcceptTypes в HttpOpenRequest на NULL, затем все заработало.

Похоже, когда WinINet имеет дело с интернет-соединением, с другим типом мобильного телефона / os / debug или выпуском бинарной версии / имеет какую-то другую операцию, которую мы не можем знать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...