我正试图在C中实现一个开源CometD库,以便能够在任何给定设备上运行CometD客户端。
完成握手和与服务器通信的Long_Polling技术,因此逻辑上我必须向用户提供WebSocket选项。
所以我拿起了Inter Web并碰到了NoPoll库来帮我解决WebSocket部分问题。
感谢NoPoll现在我可以到达服务器并敲门,但是当我尝试与它握手时,我总是得到400错误:
这是我的握手:
GET ws://m.zpush.ovh:8080/str/strd HTTP/1.1
Host: m.zpush.ovh:8080
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Extension: permessage-deflate;client_max_window_bits
Sec-WebSocket-Key: Z0WLawAAAADGI3syAAAAAA==
Origin: null
Cookie: BAYEUX_BROWSER=56a9-mchhnynonz6ji8a6hs1sh49; JSESSIONID=8gz8e00htqrl15vcm3o9yi95f
Sec-WebSocket-Version: 13
这是Jetty错误:
WARN:oejh.HttpParser:qtp1213415012-14: badMessage: 400 for HttpChannelOverHttp@40ec53c2{r=0,c=false,a=IDLE,uri=-}
所以我再次获取了网络,但我没有找到任何关于它的线索。 从我看来,我读的码头通常会给出更准确的错误信息,但你会同意这个非常模糊。
它没有告诉我为什么以及我应该如何解决以实现握手。但我怀疑我错过了HandShake格式的东西。
我不理解的另一件事是它说“HttpParser”,但我正在寻找一个WebSocket Handshake。
对此的任何启发都会非常感激,并且当我得到答案时,我会使用给定的答案正确地制作一个小教程,以帮助其他开发人员并给他们一些代码来支持。
PS:如果需要,我可以在GitHub上传我的代码没问题。
感谢您的时间。
答案 0 :(得分:1)