将 javascript WebSocket 连接到 Java ServerSocket

Connect a javascript WebSocket with a Java ServerSocket

我正在尝试将 javascript 连接到 Java,但我遇到了一些错误:

javascript 端错误:

WebSocket connection to 'wss://127.0.0.1:1234/' failed: WebSocket opening handshake timed out

Java 端错误:

java.io.EOFException
at java.io.DataInputStream.readFully(DataInputStream.java:197)
at java.io.DataInputStream.readUTF(DataInputStream.java:609)
at java.io.DataInputStream.readUTF(DataInputStream.java:564)
at networkingtest.Server.start(Server.java:29)
at networkingtest.NetworkingTest.main(NetworkingTest.java:9)

这是我的 javascript 代码:

var connection;

function init() {
    connection = new WebSocket('wss://127.0.0.1:1234/');
    connection.onopen = function () {
        connection.send('Ping');
    };
}

这里是 Java 代码:

package networkingtest;

import java.io.*;
import java.net.*;

public class Server {

    public ServerSocket ss;
    public Socket s;
    public int port;

    public Server(int p) {
        port = p;
    }

    public void start() {
        try {
            ss = new ServerSocket(port);
            s = ss.accept();
            DataInputStream di = new DataInputStream(s.getInputStream());
            while (true) {
                if (s.isConnected()) {
                    System.out.println(di.readUTF());
                } else {
                    System.exit(0);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

我看不出我做错了什么。是Java这边的错误还是javascript这边的错误?

webSocket 不是普通的 TCP 套接字。它有完整的连接方案、安全方案和数据格式。因此,webSocket 客户端只能与 webSocket 服务器通信。如果您尝试将 webSocket 客户端连接到非 webSocket 服务器,客户端将看不到正确的响应并将立即断开连接。您在客户端看到的错误:

WebSocket opening handshake timed out

是因为客户端在第一次连接时没有看到服务器期望的响应。

您可以将 webSocket 库与 Java 服务器一起使用,以在 Java 代码中实现 webSocket 服务器。