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的主要内容,如果未能解决你的问题,请参考以下文章

vue-native-websocket

java代码编辑器 pdf文件预览 主流SSM 代码生成器 shrio redis websocke

Java Socket IO不会发送到Node.js,但可以连接和接收

说说JSON和JSONP

Symfony 网络通知

Java Socket 和 JS WebSocket