WebSocket Java服务器。无法发送消息或接收消息。

5
我正在尝试创建一个Java WebSocket服务器,没有什么复杂的内容,只是一个小型、丑陋的服务器,用来尝试使用浏览器中定义的标准API的websockets。我已经阅读了协议的规范,它很简单。我进行了握手,看起来它是有效的。
我在Java中做的事情是:打开一个socket,接收来自浏览器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的错误,但出乎我的意料,它存在并且已打开,直到我关闭web服务器为止...我不知道为什么send和ws.onmessage不起作用...
更新II:我对事件onopen进行了文本更改,文本更改了...并且还进行了onclose文本更改,当我关闭服务器时文本也更改了...所以连接确实存在,而且onopen和onclose完美地工作...

但是从浏览器到服务器,我应该只需在浏览器中执行“ws.send(“data”)”即可接收数据,但这并没有发生 :( - Andres
尝试自己构建它,加1分 - home
@Andres:不完全是这样。如果您执行ws.send("data"),则在服务器上会得到编码数据,您必须使用新规范中指定的算法进行解码。一段时间以前,我发布了一些伪代码-它可能有助于在服务器上解码。请注意,从服务器到客户端的消息也应该采用特定格式。https://dev59.com/nVrUa4cB1Zd3GeqPhjMh#7045885 - pimvdb
@pimvdb 好的,如果我在服务器上使用ws.send("data")发送编码数据,那么至少我的服务器应该能够从该套接字读取一些内容,但事实并非如此...我不知道为什么...我仍在研究,但这很难使其正常工作... - Andres
@Andres:所以,如果我理解正确——你确实收到了握手请求,并且能够发送正确的握手回复,但是从ws.send(...)调用中发送的任何数据都没有到达服务器? - pimvdb
显示剩余2条评论
2个回答

0

你可能首先想阅读Websockets上的简单(Java,Javascript)入门的答案。你的问题并不是新问题。在帖子易于编程的WebSocket服务器中也有关于同一主题的一些讨论。有一个正在运行的演示,其中包含一个链接以下载所有javascript代码(它们在服务器上运行)。如果你想跟随博客(最后一个链接),那里应该会发布javascript方面的完整教程——可能是本周。今天我已经开始了很好的开端。此外,定期从扳手菜单中选择“关于Google Chrome”以更新你的Chromium浏览器。


0

请参见:奇怪的 websocket 行为:只有在关闭选项卡时才发送数据

我正在使用 C 编写 WebSocket 服务器。在成功编写/发送握手头响应后,我尝试从浏览器向服务器发送一些数据,或者从服务器向浏览器发送一些数据,但是什么都没有发生!我以为可能是我做错了什么,重新阅读了 WebSocket 的规范,但无法解决问题!当我看到你的帖子时,我决定测试你的说法,你是对的!也许 Chrome 对 WebSocket 还有点模糊不清。我将尝试实现新的帧包装消息,并查看客户端(浏览器)是否接收到我的数据。在此期间,浏览器似乎不会刷新数据,直到您关闭选项卡或窗口...... 奇怪!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接