我只想将WebSockets添加到在异步模式下使用WinHTTP
的应用。
当我需要WebSocket时,我会调用以下内容。
在发送请求之前:
WinHttpSetOption(context->hRequest, WINHTTP_OPTION_UPGRADE_TO_WEB_SOCKET, NULL, 0);
在WINHTTP_CALLBACK_STATUS_SENDREQUEST_COMPLETE
:
appContext->pIoRequest->hWebSocketHandle = WinHttpWebSocketCompleteUpgrade(appContext->hRequest, NULL);
WinHttpWebSocketReceive(appContext->pIoRequest->hWebSocketHandle, appContext->pszOutBuffer,RESPONSE_BUFFER_SIZE, NULL, NULL);
一切都没有错误。
现在我在Fiddler中看到服务器将一些数据发送到我的WebSocket,但没有触发WINHTTP_CALLBACK_STATUS_READ_COMPLETE
。
为什么会这样?如何从WebSocket异步读取?将数据发送到WebSocket运行良好。
答案 0 :(得分:2)
OMG!我找到了它的工作方式!
WinHttpSetStatusCallback
来为WebSocketHandle
中返回的WinHttpWebSocketCompleteUpgrade
设置WebSocket回调,并且这个回调必须与来自WinHttpWebSocketCompleteUpgrade
的回调有所不同!WinHttpSetOption
标记WINHTTP_OPTION_CONTEXT_VALUE
设置上下文指针!它不行。 dwContext
在WebSocketCallback
中有错误的数据。在WinHttpQueryOption
中调用WebSocketCallback
会返回错误的上下文数据。我认为这是Windows 8.1中的一个BUG。我编写自己的处理程序以将我的上下文与WebSocketHandle
连接起来。所有这些都没有在MSDN中记录!最重要的是,我没有谷歌任何关于异步winhttp websocket使用的信息...所以,我是第一个=)如果我的研究能帮到你,我将非常高兴!
答案 1 :(得分:0)
似乎websockets没有收到PING和PONG消息给回调!