WEBSOCKETS:客户端没有收到我从服务器发送的消息

时间:2013-08-14 22:16:05

标签: java javascript websocket byte unsigned

我会尝试在不附加任何代码的情况下解释我的问题,我认为这不是必需的。 好的,我在JS中有一个连接到我的java服务器的websocket客户端。握手完成,在客户端上调用连接处理程序,因此我向服务器发送消息,该消息被重写。然后消息被反转并发送回客户端,但不调用客户端消息传递处理程序或任何其他处理程序。

这是我发送给客户的消息:

b[0]=-127;//Its the same of 129?
b[1]=1;
b[2]=18;//any char..

我认为问题必须在第一个字节上。我写“b [0] =(byte)129;”但是当我读它时它返回-127,可能是因为,字节129必须是无符号的? 谢谢你的帮助:P


请求的客户端代码:

<html><head><meta charset="utf-8">

<title>WebSocket Test</title>

<script language="javascript" type="text/javascript">

  var wsUri = "ws://localhost:10637/penise";
  var output;

  function init()
  {
    output = document.getElementById("output");
    testWebSocket();
  }

  function testWebSocket()
  {
    websocket = new WebSocket(wsUri);
    websocket.onopen = function(evt) { onOpen(evt) };
    websocket.onclose = function(evt) { onClose(evt) };
    websocket.onmessage = function(evt) { onMessage(evt) };
    websocket.onerror = function(evt) { onError(evt) };
  }

  function onOpen(evt)
  {
    writeToScreen("CONNECTED");
    var msg = String.fromCharCode(1)+ String.fromCharCode(0)+"This is niceeee"
    doSend(msg);
  }

  function onClose(evt)
  {
    writeToScreen("DISCONNECTED");
  }

  function onMessage(evt)
  {
    writeToScreen('<span style="color: blue;">RESPONSE: ' + evt.data+'</span>');
    websocket.close();
  }

  function onError(evt)
  {
    writeToScreen('<span style="color: red;">ERROR:</span> ' + evt.data);
  }

  function doSend(message)
  {
    writeToScreen("SENT: " + message); 
    websocket.send(message);
  }

  function writeToScreen(message)
  {
    var pre = document.createElement("p");
    pre.style.wordWrap = "break-word";
    pre.innerHTML = message;
    output.appendChild(pre);
  }

  window.addEventListener("load", init, false);


function char(i) {
       return String.fromCharCode(i);
     }
</script>

</head><body><h2>WebSocket Test</h2>

<div id="output"><p style="word-wrap: break-word;">CONNECTED</p><p style="word-wrap: break-word;">SENT: This is niceeee</p><p style="word-wrap: break-word;"><span style="color: red;">ERROR:</span> undefined</p><p style="word-wrap: break-word;">DISCONNECTED</p></div>

 </body></html>

2 个答案:

答案 0 :(得分:0)

我建议您使用无符号字节的缓冲区以避免混淆。

您的主要问题是第一个字节表示有效负载是UTF-8文本,但有效负载中的单字节值是180,这不是有效的UTF-8字符。如果您尝试发送二进制值,则需要在第一个字节中通过将操作码设置为0x2而不是0x1(例如130而不是129)来指示。

答案 1 :(得分:0)

好的,我已经解决了这个问题。问题是,当我发送标题时,我推了2“\ r \ n”而不是只有一个,所以\ r \ n中的一个成为下一帧的一部分并且连接被破坏(因为它变成了下一帧的操作码)。

感谢您试图帮助我&lt; 3