WebSocket服务器:将文本框架发送到客户端

时间:2016-11-08 23:14:37

标签: websocket

我从服务器向客户端发送自定义Web套接字帧。我设法无缝地获得握手,但发送常规文本框架会导致我出现问题(未收到客户端的消息)。这就是我发送的内容:

unsigned char data2[6] = { 129, 4, 't', 'e', 'x', 't' };
int jj = SDLNet_TCP_Send(client_socket, data2, 6);

正确发送数据(握手工作,jj值为6)。我的代码基于此处How can I send and receive WebSocket messages on the server side?的解释。

我的客户非常简单,我只是为完成而发帖:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>Web Socket Example</title>
    <meta charset="UTF-8">
    <script type="text/javascript">

        var webSocket = new WebSocket("ws://localhost:48884/", "sample");
        webSocket.binaryType = "arraybuffer";
        webSocket.onopen = function(e) { alert("opened"); }
        webSocket.onclose = function(e) { alert("closed"); }
        webSocket.onerror = function(e) { alert("error"); }
        webSocket.onmessage = function(e) { alert("got: " + e.data); }

    </script>
  </head>
    <body>
      <div id="holder" style="width:600px; height:300px"></div>
    </body>
</html>

我从客户端获得的Web套接字版本是13。

任何有关握手工作的想法和常规文本都没有?

1 个答案:

答案 0 :(得分:0)

我解决了这个问题。它现在有效,因为事实证明在握手结束时需要额外的\ r \ n(https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_servers)。所以我的握手不正确但不知何故Firefox接受了它(但后来却不接受消息)。

无论如何,我上面发布的链接说握手格式应为:

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: key
empty line

我遵守了这种格式,然后它在Firefox和IE上运行良好但在Chrome上没有。我发现要使其在Chrome上运行,我还需要指定协议:

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: key
Sec-WebSocket-Protocol: my_protocol_name
empty line

上面的握手格式让我在Firefox,IE和Chrome上进行握手和服务器到浏览器的消息发送