Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么WinHttpQueryDataAvailable说0字节可用?_C_Windows_Winapi_Http - Fatal编程技术网

C 为什么WinHttpQueryDataAvailable说0字节可用?

C 为什么WinHttpQueryDataAvailable说0字节可用?,c,windows,winapi,http,C,Windows,Winapi,Http,同步操作GetLastError=0,WinHttpQueryDataAvailable本身返回TRUE(即OK),但要读取的字节数=0 你知道这是什么意思吗?它通常工作正常(从相机读取JPEG流),但偶尔会卡在这里(这会提示代码重新连接) 根据MSDN的说法,WinHttpQueryDataAvailable不应该返回:“如果会话是同步的,请求将等待数据变为可用。” 代码摘录如下: g_HSession = WinHttpOpen( L"Jet", WINHTTP_ACCESS_TYPE_DE

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

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

根据MSDN的说法,
WinHttpQueryDataAvailable
不应该返回:“如果会话是同步的,请求将等待数据变为可用。”

代码摘录如下:

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!

我假设您的
BytesToRead
变量是一个无符号长变量,它应该是什么

您可以尝试重新构造代码,使其看起来更像上“Examples”标题下的示例

有帮助吗


与问题无关,但如果您使用的是Visual Studio,则可以进入项目设置(类似于项目属性>项目默认值>字符集),然后不必像在
g_HSession=WinHttpOpen(L“Jet”)中那样将L放在字符串之前…

已成功接收基础HTTP响应,但该响应为空(即零长度响应)或所有数据均已读取并关闭。
WinHttpQueryDataAvailable
通过返回
TRUE
表示此情况,仍然显示零可用数据计数

想想:

HTTP/1.0 200 OK
Content-Length: 0

这可能适用,请参见备注,第三段。对该值的适当响应是什么?仍然调用WinHttpReadData?或其他东西。这有点奇怪,因为我期望连续的JPEGsUse Wireshark流来验证http消息中是否确实存在实体体;我从来没有让WinHttp无法向我提供实体体(令人毛骨悚然)。只需在同一连接上打开另一个请求。连续的JPEG流听起来像是来自IP摄像头的无穷无尽的流,但如今摄像头经常有很多问题。因此,如果出于某种原因摄像头让您如此惊讶,您可以打开一个新请求并尝试恢复传输。同时,请确保使用网络嗅探器检查实际的流量c(如上所述)。很好,你知道这很可怕。我担心我应该以不同的方式处理它!当它发生时,我关闭连接并重试。不幸的是,新连接往往会立即(至少在几个周期内)做同样的事情.目前有1000多种型号的IP摄像头,可提供JPEG和/或M-JPEG格式。数百种都存在与HTTP兼容的荒谬问题。