所以我试图在我的 Java 应用程序和 Web 应用程序之间建立某种连接,我查找了 websockets,它们看起来非常简单且易于使用:)。我自己创建了一个 Java 服务器,它使用 ServerSocket 类。
现在的问题是我可以使用 websocket 从网络连接到服务器,但我无法将数据发送到服务器...但是当我尝试从 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()
}
}
}
我的网络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);
};
最佳答案
Web 套接字服务器与简单的套接字服务器不同。提供 Web 套接字的服务器必须首先提供 HTTP 或 HTTPS 服务,因为当 Web 客户端发送带有升级选项和用于建立 Web 套接字的特殊字段的 HTTP 请求时,就会建立 Web 套接字。即使在建立 Web 套接字之后,连接的行为仍然与常规套接字不完全一样。 Web Socket 协议(protocol)使用帧来发送或接收数据。这与您的预期有很大不同。
您应该注意的另一件事是,浏览器将强制执行以下规则:Web 套接字必须与尝试建立 Web 套接字的页面来自同一主机(相同的协议(protocol)、地址和 TCP)端口)。
关于javascript - Java Socket 和 JS WebSocket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41273502/