Java Socket 和 JS WebSocket
Posted
技术标签:
【中文标题】Java Socket 和 JS WebSocket【英文标题】:Java Socket and JS WebSocket 【发布时间】:2016-12-21 23:15:13 【问题描述】:所以我试图在我的 Java 应用程序和我的 Web 应用程序之间建立某种连接,我查找了 websockets,它们看起来非常简单易用:)。我自己创建了一个 Java 服务器,它使用了 ServerSocket 类。
现在的问题是我可以使用 websocket 从 Web 连接到服务器,但是我无法将数据发送到服务器......但是当我尝试从 Java 客户端发送数据时它工作正常...可能是什么问题?
我的 Java/Scala(我遵循本教程:https://www.tutorialspoint.com/java/java_networking.htm)服务器:
class Server(val port: Int) extends Thread
private val serverSocket = new ServerSocket(port)
override def run(): Unit =
try
while(true)
println("Waiting for client on port: " + serverSocket.getLocalPort)
val server = serverSocket.accept()
println(server.getRemoteSocketAddress)
val in = new DataInputStream(server.getInputStream())
println(in.readUTF())
val out = new DataOutputStream(server.getOutputStream())
out.writeUTF("Hello world!")
server.close()
catch
case s: SocketTimeoutException => println("Connection timed out!");
case e: Exception => e.printStackTrace()
我的web js(我关注了https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_client_applications):
/**
* Created by samuelkodytek on 20/12/2016.
*/
var conn = new WebSocket('ws://127.0.0.1:8080');
conn.onopen = function(e)
console.log("Connection established!");
conn.send("Hello!");
;
conn.onmessage = function(e)
console.log(e.data);
;
【问题讨论】:
【参考方案1】:Web 套接字服务器与简单的套接字服务器不同。提供 Web 套接字的服务器必须首先提供 HTTP 或 HTTPS 服务,因为 Web 套接字是在 Web 客户端发送带有升级选项和用于建立 Web 套接字的特殊字段的 HTTP 请求时建立的。即使在 Web 套接字建立之后,连接的行为仍然与常规套接字完全不同。 Web Socket 协议使用帧来发送或接收数据。这一切都与您的预期大相径庭。
您应该注意的另一件事是,浏览器将强制执行 Web 套接字必须来自与尝试建立 Web 套接字的页面相同的主机(相同的协议、地址和 TCP端口)。
【讨论】:
好的,谢谢 :) 所以我最好的选择是找到一个与 js websockets 通信的 java 库?对吗? 您需要更进一步,找到支持 Web 套接字的 Web 服务器环境/库。以上是关于Java Socket 和 JS WebSocket的主要内容,如果未能解决你的问题,请参考以下文章
java代码编辑器 pdf文件预览 主流SSM 代码生成器 shrio redis websocke