WinHttpQueryDataAvailable

WinHttpQueryDataAvailable

同步操作。 GetLastError = 0,WinHttpQueryDataAvailable本身返回TRUE(即OK),但要读取的字节数= 0

知道这意味着什么吗?它通常可以正常工作(从相机读取JPEG流),但偶尔会卡在这里(这提示代码重新连接)。

根据MSDN,WinHttpQueryDataAvailable不应该返回:“如果 session 是同步的,则请求将等待直到数据可用为止。”

代码摘录在这里:

g_HSession = WinHttpOpen( L"Jet", WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, WINHTTP_NO_PROXY_NAME, WINHTTP_NO_PROXY_BYPASS, 0 );

ResultsOk = WinHttpSendRequest(
    hRequest,
    WINHTTP_NO_ADDITIONAL_HEADERS,
    0, WINHTTP_NO_REQUEST_DATA, 0,
    0, 0);

// End the request.
if (ResultsOk)
{
    ResultsOk = WinHttpReceiveResponse( hRequest, NULL );

    DWORD BytesToRead = 0;

    if (WinHttpQueryDataAvailable( hRequest, &BytesToRead ))
    {
        if (BytesToRead) // THIS IS SOMETIMES 0 - seems wrong to me
        {
            if (WinHttpReadData( hRequest, pReadPos, min(BytesToRead, (unsigned)SizeRemaining), &NumRead ))
            {
                ...etc!

最佳答案

基本的HTTP响应已成功接收,但为空(即零长度响应),或者已读取并关闭所有数据。 WinHttpQueryDataAvailable通过返回TRUE仍显示零可用数据计数来指示这一点。

考虑到:

HTTP/1.0 200 OK
Content-Length: 0

10-06 14:13