【发布时间】:2015-05-28 03:39:09
【问题描述】:
我正在尝试用 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
这是码头错误:
WARN:oejh.HttpParser:qtp1213415012-14: badMessage: 400 for HttpChannelOverHttp@40ec53c2{r=0,c=false,a=IDLE,uri=-}
所以我再次获取了电子网络,但我没有找到任何关于它的线索。 从我读到的 jetty 通常会给出更精确的错误消息,但你会同意这个非常模糊。
它没有告诉我为什么以及我应该解决什么来实现握手。但我怀疑我在握手格式中遗漏了一些东西。
我不明白的另一件事是它说“HttpParser”,但我正在寻找 WebSocket Handshake。
对此的任何启示将不胜感激,并且与往常一样,当我得到答案时,我会使用给定的答案正确地制作一个小教程,以帮助其他开发人员并为他们提供一些代码。
PS : 如果需要,我可以在 GitHub 上上传我的代码。
感谢您的宝贵时间。
【问题讨论】:
标签: c websocket jetty http-status-code-400 cometd