首页 文章

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

提问于
浏览
0

我正在从服务器向客户端发送自定义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

    我解决了这个问题 . 它现在有效,因为事实证明在握手结束时需要额外的\ 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上进行握手和服务器到浏览器的消息发送

相关问题