【问题标题】:Websocket Java Server. Not sending message nor receivingWebsocket Java 服务器。不发送消息也不接收
【发布时间】:2011-11-30 03:08:27
【问题描述】:

我正在尝试制作一个 Java WebSocket 服务器,没什么复杂的,只是一个丑陋的小服务器,可以使用标准定义的 api 从浏览器中尝试 websocket。

我一直在阅读协议的规范,它非常简单。我已经握手,显然它正在工作。

我用 Java 做的是:打开一个套接字,从浏览器的 JavaScript 接收来自new Websocket("ws://...") 的请求,发送服务器的响应,创建“Sec-WebSocket-Accept”。所有这些似乎都在起作用!谷歌 Chrome 开发者工具显示连接成功...(这是图片)

我还做了一个ws.onopen = function(ev){ alert("Opened!!"); 并且有效...(所以连接一定没问题吧?)。

但是现在,我正在尝试将数据从服务器发送到浏览器或浏览器发送到服务器,但没有任何反应......

要将数据从浏览器发送到服务器,我只需执行 ws.send("datos"); 并在服务器中尝试读取此内容,执行 readLine(in)in = clientSocket.getInputStream();... 但什么都没有... 不工作...

为了将数据从服务器发送到浏览器,我执行了out.write(webSockFrame("data")getBytes()),但同样...浏览器中没有任何反应...在浏览器中我正在等待数据执行ws.onmessage = function(ev){....}...

webSockFrame(string) 函数添加了标准要求的两个字节,一个在字符串的开头,一个在字符串的末尾。)

我还尝试使用 telnet 连接到服务器(以检查服务器是否工作正常),一切正常,从 telnet 和服务器发送和接收数据......

我做错了什么?

我正在使用最新版本的 Chrome (14)。

我不想搭建一个繁重的并发服务器,只是想尝试一下这项新技术。

更新:我不知道还能尝试什么...我做了一个 netstat -a 来查看连接是真的活跃还是只是 chrome 的错误,但令我惊讶的是它存在并且一直打开,直到我关闭网络服务器...我不知道为什么 send 和 ws.onmessage 不起作用...

更新二:我在 onopen 事件上更改了文本,文本更改...并且还对文本进行了 onclose 更改,当我关闭服务器时,文本更改...所以连接确实存在并且 onopen 和 onclose 完美地工作......

【问题讨论】:

  • "一个在字符串的开头和一个在字符串的末尾" - 这是旧的草稿版本。 Chrome 14 已经切换到新的草案,这实际上是一次彻底的大修。 tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-17 我认为您将它们混淆了-您的握手响应是正确的(新的)响应,但是消息格式已更改,您似乎尚未实现。
  • 但是从浏览器到服务器我应该只是从浏览器接收数据,对吗?这并没有发生:(
  • +1 尝试自己构建它
  • @Andres:不完全是。如果您执行ws.send("data"),那么您将在服务器上获得编码数据,您必须使用新规范中指定的算法对其进行解码。前段时间,我为此发布了一些伪代码 - 它可能有助于在服务器上解码。请注意,服务器到客户端的消息也应该采用某种格式。 stackoverflow.com/questions/7040078/…
  • @pimvdb 好的,如果我在服务器上执行 ws.send("data") 获得编码数据,至少我的服务器应该能够从该套接字读取一些内容,而这不会发生。 ..我不知道为什么...我仍在研究,但是很难做到这一点...

标签: java javascript sockets websocket


【解决方案1】:

您可能首先想阅读Simple (Java, Javascript) start on Websockets 的答案。你的追求不是新的。在Easy to Program WebSocket Server 帖子中也有一些关于同一主题的聊天。有一个带有 link 的正在运行的演示,用于下载所有 javascript 代码(在服务器上运行)。如果你想关注那个博客(最后一个链接),应该有一个关于 javascript 端的完整教程发布在那里 - 可能在本周。我今天开了个好头。此外,请定期从扳手中选择关于 Google Chrome 以更新您的 chromium 浏览器。

【讨论】:

    【解决方案2】:

    见:Weird websocket behavior: only send data when close the tab

    我只是在 C 中的 websocket 服务器上工作。在成功写入/发送握手标头响应后,我尝试通过浏览器或从服务器向浏览器发送一些数据到服务器,但没有任何反应!我想也许我做错了什么并重新阅读了 websockets 的规范,但无法解决问题!当我看到你的帖子时,我决定测试你的说法,你是对的!也许chrome仍然对websockets很模糊。我将尝试实现新的框架包装消息并查看客户端(浏览器)是否接收到我的数据。同时,在您关闭选项卡或窗口之前,浏览器似乎不会刷新数据...奇怪!

    【讨论】:

      猜你喜欢
      • 2020-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-15
      • 1970-01-01
      • 2022-09-28
      相关资源
      最近更新 更多