Websocket server.run()不允许后面的代码开始

问题描述 投票:1回答:1

我有来自[https://github.com/TooTallNate/Java-WebSocket)的以下网络套接字服务器代码:

public class WebsocketServer extends WebSocketServer {

    private static int PORT = 2005;

    private Set<WebSocket> conns;

    public WebsocketServer() {
        super(new InetSocketAddress(PORT));
        conns = new HashSet<>();
    }

    @Override
    public void onOpen(WebSocket conn, ClientHandshake handshake) {
        conns.add(conn);
        System.out.println("New connection from " + conn.getRemoteSocketAddress().getAddress().getHostAddress());
    }

    @Override
    public void onClose(WebSocket conn, int code, String reason, boolean remote) {
        conns.remove(conn);
        System.out.println("Closed connection to " + conn.getRemoteSocketAddress().getAddress().getHostAddress());
    }

    @Override
    public void onMessage(WebSocket conn, String message) {
        System.out.println("Received: " + message);

        for (WebSocket sock : conns) {
            sock.send(messageToSend);
        }
    }

    @Override
    public void onError(WebSocket conn, Exception ex) {
        ex.printStackTrace();
        if (conn != null) {
            conns.remove(conn);
            // do some thing if required
        }
        System.out.println("ERROR from " + conn.getRemoteSocketAddress().getAddress().getHostAddress());
    }

    public static void main(String[] args) throws IOException, InterruptedException {
        WebsocketServer server = new WebsocketServer();
        server.run();

        BufferedReader sysin = new BufferedReader(new InputStreamReader(System.in));
        while (true) {
            String in = sysin.readLine();
            server.sendToAll(in);
            if (in.equals("exit")) {
                server.stop();
                break;
            } else if (in.equals("restart")) {
                server.stop();
                server.start();
                break;
            }
        }

    }

    public void sendToAll(String text) {
        Collection<WebSocket> con = connections();
        synchronized (con) {
            for (WebSocket c : con) {
                c.send(text);
            }
        }
    }
}

这些代码可以正常工作,但是server.run();之后的所有代码将无法启动/正常工作!这部分我需要将消息从Java控制台发送到客户端。

我做错了什么?

注意:我的客户端使用JavaScript并可以连接到服务器

java websocket java-websocket
1个回答
2
投票

您需要start() Runnable类,不是 run()直接它

server.start();

而不是

server.run();
© www.soinside.com 2019 - 2024. All rights reserved.