当前位置: 首页 > 知识库问答 >
问题:

WebSocket:客户端不会修改我从服务器发送的消息

翟嘉志
2023-03-14

我会尽量解释我的问题,而不附加任何代码,我认为这是不必要的。好的,我有一个JS格式的websocket客户端,它连接到我的java服务器。握手完成,连接的处理程序在客户机上被调用,所以我向服务器发送一条消息,读取该消息。然后,消息被反转并发送回客户机,但不会调用客户机MessageReceived处理程序或任何其他处理程序。

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

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个答案

刘元青
2023-03-14

好的,我已经解决了这个问题。问题是,当我发送标题时,我输入了2"\r\n",而不是只有一个,所以其中一个\r\n成为下一帧的一部分,连接中断(因为它成为下一帧的操作码)。

谢谢你帮助我

翟沈义
2023-03-14

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

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

 类似资料:
  • 我正在运行一个Autobahn/Twisted python websocket服务器,但我在向客户机发送消息时遇到了问题。它似乎只在客户端向它发送消息时才向客户端发送消息。由于某种原因,如果我想将消息强制输出到已连接的客户端,那么消息就会卡在队列中,直到任何客户端向我发送消息。此时,所有排队的消息都发送到所有客户端。 我能够在python Autobahn/Twisted websocket服务

  • 我正在创建我的产品,并与这个问题。有一天,我设置了Socket.io,一切都很好。第二天,我将服务器和客户端从http迁移到HTTPS。迁移后客户端和服务器端仍然连接,但不能从客户端发射到服务器,从服务器发射到客户端。 我的ssl证书位于和中,它们加载正确。运行在上的服务器 我的示例react组件。我的react应用程序运行在上。HTTPS连接良好,工作良好。 我该怎么办?也许我在中错误地使用了s

  • 问题内容: 我是golang和websocket的新手。 我正在尝试编写一个websocket服务器,一旦握手完成,该服务器可以将消息主动发送到客户端。 但是我的服务器只会在收到来自客户端的请求后才将消息发送给客户端。 有谁知道如何实现此功能,或者在哪里可以找到相关的答案? 非常感谢。 源代码如下: 问题答案: 尝试打包websocket。 这是Godoc的一个简单示例:

  • 问题内容: 我将实现类似于Facebook通知和此网站的内容(StackOverflow的通知会通知我们是否有人为我们的问题写评论/答案等)。请注意,用户将使用我的应用程序作为网站而不是移动应用程序。 我遇到以下获取结果的答案,但我需要推送结果而不是获取结果。 根据建议,我在实体类中创建了一个简单方法,并向其中添加了@PostPersist,但此方法不起作用,因此基于此答案,我添加了persist

  • 我正在从服务器向客户端发送自定义web套接字帧。我成功地实现了无缝握手,但发送常规文本帧会给我带来问题(客户端的消息未被接收)。这是我发送的: 数据发送正确(握手成功,jj值为6)。我的代码基于这里的解释,如何在服务器端发送和接收WebSocket消息?。 我的客户非常简单,我只是为了完成发布: 我从客户端获得的Web套接字版本是13。 知道为什么握手有效而普通文本无效吗?

  • 问题内容: 所以现在,我正在制作一个基于客户端服务器应用程序的多线程。在服务器端,我为接受的每个连接创建了一个线程。 在线程类中,我创建了一种将命令发送到客户端的方法。我只想要的是如何将参数发送到所有正在运行的客户端?为简单起见,我只想使此服务器向所有连接的客户端发送消息。 我已经阅读了这篇文章,并从此链接中找到方法。但是,当我尝试使用自己的代码时,中没有类似的方法。 好的,这是我的服务器和线程示