使用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( ...
我错过任何一步吗?
答案 0 :(得分:0)
我遇到过类似的问题,即使使用Sleep(1000)也一样。我正在连接到第三方摄像机流,我已经在调试版本上尝试过,它运行得很好。但是当我回到发布版本时,它就行不通了。
我通过将HttpOpenRequest的lplpszAcceptTypes更改为NULL来修复它,然后一切都开始工作了。
似乎当WinINet处理互联网连接时,使用不同类型的手机/ os / debug或发布二进制版本/有某种我们无法知道的不同操作。