InternetReadFile()读取数据但返回false并将读取的字节数设置为零

时间:2011-12-30 14:40:27

标签: winapi wininet

使用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上。此外,如果我在InternetReadFile()之前调用Sleep()一秒钟,InternetReadFile()可以正常工作。

Sleep(1000);

result = InternetReadFile( ...

我错过任何一步吗?

1 个答案:

答案 0 :(得分:0)

我遇到过类似的问题,即使使用Sleep(1000)也一样。我正在连接到第三方摄像机流,我已经在调试版本上尝试过,它运行得很好。但是当我回到发布版本时,它就行不通了。

我通过将HttpOpenRequest的lplpszAcceptTypes更改为NULL来修复它,然后一切都开始工作了。

似乎当WinINet处理互联网连接时,使用不同类型的手机/ os / debug或发布二进制版本/有某种我们无法知道的不同操作。