WinHttpSendRequest具有dwContext参数,因此我可以从WINHTTP_STATUS_CALLBACK函数读取上下文。此上下文可以确定哪个WinHttpSendRequest用于当前回调。
不幸的是,WinHttpWebSocketSend根本没有这样的上下文参数。结果,无法在WINHTTP_STATUS_CALLBACK函数中区分多个WinHttpWebSocketSend调用。
有人可以帮我吗?
供您参考,我正在尝试修改以下示例以使用网络套接字。
https://msdn.microsoft.com/en-us/library/aa383138%28VS.85%29.aspx#additional
我要获取的websocket资源是:https://api.upbit.com/websocket/v1。 连接后,您可以发送以下资源字符串进行测试:
[{“ ticket”:“ test”},{“ format”:“ SIMPLE”},{“ type”:“ trade”,“ codes”:[“ KRW-BTC”,“ BTC-BCH”] },{“ format”:“ SIMPLE”}]
如果一切顺利,您将收到:
{“ mk”:“ KRW-BTC”,“ tms”:1523531768829,“ td”:“ 2018-04-12”,“ ttm”:“ 11:16:03”,“ ttms”:1523531763000, “ tp”:7691000.0,“ tv”:0.00996719,“ ab”:“ BID”,“ pcp”:7429000.00000000,“ c”:“ RISE”,“ cp”:262000.00000000,“ sid”:1523531768829000,“ st”: “快照”} {“ mk”:“ BTC-BCH”,“ tms”:1523531745481,“ td”:“ 2018-04-12”,“ ttm”:“ 11:15:48”,“ ttms”:1523531748370,“ tp” :0.09601999,“ tv”:0.18711789,“ ab”:“ BID”,“ pcp”:0.09618000,“ c”:“ FALL”,“ cp”:0.00016001,“ sid”:15235317454810000,“ st”:“ SNAPSHOT” } {“ mk”:“ KRW-BTC”,“ tms”:1523531769250,“ td”:“ 2018-04-12”,“ ttm”:“ 11:16:04”,“ ttms”:1523531764000,“ tp” :7691000.0,“电视”:0.07580113,“ ab”:“ BID”,“ pcp”:7429000.00000000,“ c”:“ RISE”,“ cp”:262000.00000000,“ sid”:1523531769250000,“ st”:“ REALTIME” }
我有一个源项目文件,您可以下载: https://1drv.ms/u/s!AiVorOunaPYdhAuHrggDk2EYa2X7
下载后,编译并运行它。然后您将看到一个带有“下载”按钮的对话框,它将显示 -http://www.microsoft.com -禁用WebSocket复选框
单击“下载”按钮将显示与诸如http://www.microsoft.com之类的常规网站一起工作的异步WinHttpSendRequest。
我想为Websocket服务器(https://api.upbit.com/websocket/v1)修改此演示程序。为此,我“#定义” WSS_API_UPBIT 接下来,取消注释AsynchDemo.cpp第19行到
然后再次运行演示。这次,您会看到与 -https://api.upbit.com/websocket/v1 -启用了WebSocket复选框
现在,选中“ Websocket”框,然后按“下载”。 它将由于回调中没有上下文而崩溃。
thx
答案 0 :(得分:0)
我认为这就是https://docs.microsoft.com/en-us/windows/desktop/api/winhttp/nf-winhttp-winhttpwebsocketcompleteupgrade的含义-您传入了专门用于Web套接字的新上下文[请确保在发送之前在句柄上设置winhttp选项-此处有一个同步模式示例可能有帮助:https://github.com/Microsoft/Windows-classic-samples/blob/master/Samples/WinhttpWebsocket/cpp/WinhttpWebsocket.cpp)。我还认为您需要在从CompleteUpgrade()返回的句柄上设置回调函数选项,以便在读取和写入完成后得到通知。