javascript - Java Socket 和 JS WebSocket

标签 javascript java sockets networking websocket

所以我试图在我的 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/

相关文章:

javascript - 为什么当我选择另一个文件并提交时,会发送另一个包含旧文件的请求?

javascript - JavaScript Image 对象如何与浏览器缓存交互?

c++ - 使用 C++ Socket API 通过套接字连接将 HTML 标记发送到浏览器

linux - 两台主机(vps 和专用服务器)之间的隧道 Gre 问题

php - 我如何查看已建立的套接字是否卡在期望输入的服务器上?

javascript - 为什么 JavaScript bind() 调用反转函数的参数?

java - 为什么我的 AJAX 请求收到空响应文本

java - 致命异常 : main Android

java - Mock beans 与 Mockito 的 Spring Boot 单元测试

java - Binder 线程上的 GPS 警告消息