将javascript WebSocket与Java ServerSocket连接

时间:2018-05-26 10:33:15

标签: javascript java websocket 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方面的错误?

1 个答案:

答案 0 :(得分:0)

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

WebSocket opening handshake timed out

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

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