带有 JavaScript 客户端的 Java 套接字服务器

Posted

技术标签:

【中文标题】带有 JavaScript 客户端的 Java 套接字服务器【英文标题】:Java Socket Server with JavaScript Client 【发布时间】:2016-05-17 11:26:50 【问题描述】:

我将一个可以相互发送消息的 Java 套接字服务器和客户端放在一起,我想使用 javascript 作为客户端,但是...这是我托管 Java 服务器并加载 JavaScript 客户端时发生的情况.

JavaScript:

    var connection = new WebSocket('ws://127.0.0.1:9005');
connection.onopen = function () 
  connection.send('Ping');
;

这在 chrome 控制台中打印:

WebSocket 连接到“ws://127.0.0.1:9005/”失败:WebSocket 握手期间出错:状态行无效 WebSocket 错误 [对象事件]

我想要做的是向 Java 服务器发送“Ping”,但它发送所有这些东西而不是断开连接......

这会打印在 Java 服务器控制台中:

面包服务器正在运行... 新连接来自:127.0.0.1:51948 127.0.0.1:51948:GET / HTTP/1.1 127.0.0.1:51948:主机:127.0.0.1:9005 127.0.0.1:51948:连接:升级 127.0.0.1:51948:编译指示:无缓存 127.0.0.1:51948:缓存控制:无缓存 127.0.0.1:51948:升级:websocket 127.0.0.1:51948:来源:http://markstuff.net 127.0.0.1:51948:Sec-WebSocket 版本:13 127.0.0.1:51948:用户代理:Mozilla/5.0(Windows NT 6.1;WOW64)AppleWebKit/537.36(Khtml,如 Gecko)Chrome/48.0.2564.103 Safari/537.36 127.0.0.1:51948:接受编码:gzip、deflate、sdch 127.0.0.1:51948:接受语言:en-US,en;q=0.8 127.0.0.1:51948:Sec-WebSocket-Key:D4Epyc7LwvPdfeDWG0sY2g== 127.0.0.1:51948:Sec-WebSocket-Extensions:permessage-deflate; client_max_window_bits 127.0.0.1:51948: 错误:软件导致连接中止:recv 失败

JavaScript 客户端: markstuff.net/socket/-markstuff.net/socket/client.js Java 服务器: pastebin com cdZjUWQp Java客户端: pastebin com efEeezcR

【问题讨论】:

【参考方案1】:

听起来您正在尝试将 Websocket 客户端连接到服务器端的裸套接字侦听器。请注意,Websocket 不等于套接字。 Websocket 是 tcp 连接之上的协议(就像 http 在 tcp 之上的方式一样)。 因此,您应该将服务器实现更改为 Websocket(您可以在 Internet 上找到许多 Java Websocket 库)或将客户端更改为套接字。 我不确定如何在 JS 中创建套接字连接,但这个主题可能有助于解决这个问题:Connecting to TCP Socket from browser using javascript

【讨论】:

谢谢!对于任何想知道的人,我让 WebServer 使用这个 github.com/TooTallNate/Java-WebSocket/blob/master/src/main/…

以上是关于带有 JavaScript 客户端的 Java 套接字服务器的主要内容,如果未能解决你的问题,请参考以下文章

带有不错的 java 查询客户端的 Timeseries DB

带有 WCF 客户端的 Java JAX-WS 服务

将字符串从 JavaEE 后端推送到 Javascript 客户端的任何简单方法?

实现带有数据库、客户端和后端的列表的延迟加载

EXTJS

来自客户端的 Java (Tomcat) websocket 参数