我正在尝试编写一个C ++客户端来与使用NodeJS和socket.io编写的WebSocket服务器进行通信。我无法让C ++客户端建立WebSocket连接;在客户端请求将HTTP连接升级到WebSocket之后,服务器立即断开连接。
我使用tcpdump来观察数据包的来回传输。当我从浏览器使用WebSocket服务器时,它运行良好,tcpdump输出显示来回的数据包。但是当我尝试使用C ++客户端连接到服务器时,WebSocket连接永远不会建立。 tcpdump的输出显示发送到服务器的升级请求,紧接着是服务器断开连接。
然后我尝试使用nc
复制事件序列。我连接到服务器(在端口8080上运行)并复制粘贴由tcpdump捕获的浏览器发送的确切标头集。即使使用了工作头的副本,连接也被删除了。
服务器端没有输出指示连接被丢弃的原因。
以下是我发送的标题:
GET /socket.io/?type=player&EIO=3&transport=websocket&sid=7MdCLhT_8cTsd6F4AAAC HTTP/1.1
host: localhost:8080
connection: Upgrade
pragma: no-cache
cache-control: no-cache
upgrade: websocket
origin: http://localhost:8080
sec-websocket-version: 13
user-agent: Mozilla/5.0
accept-encoding: gzip, deflate, sdch
accept-language: en-US,en;q=0.8
cookie: io=7MdCLhT_8cTsd6F4AAAC
sec-websocket-key: nm7f0TlagGC2S6sAUPHwaQ==
sec-websocket-extensions: permessage-deflate;client_max_window_bits
x-forwarded-proto: http
x-forwarded-port: 80
x-forwarded-for: 127.0.0.1
我完全不知道为什么socket.io没有升级连接。根据我在WebSocket协议中看到的文档,这应该可行。我能想到的唯一想法是Socket.IO期待一个cookie或其他一些神奇的咒语让客户端与服务器通话。