在服务器中运行websocket应用程序,以便从公用IP地址访问

时间:2018-09-05 14:51:17

标签: java websocket

我想使用以下代码运行Websocket服务器应用程序:

import java.net.InetSocketAddress;
import java.nio.ByteBuffer;

import org.java_websocket.WebSocket;
import org.java_websocket.handshake.ClientHandshake;
import org.java_websocket.server.WebSocketServer;

public class SimpleServer extends WebSocketServer {

    public SimpleServer(InetSocketAddress address) {
        super(address);
    }

    @Override
    public void onOpen(WebSocket conn, ClientHandshake handshake) {
        conn.send("Welcome to the server!"); //This method sends a message to the new client
        broadcast( "new connection: " + handshake.getResourceDescriptor() ); //This method sends a message to all clients connected
        System.out.println("new connection to " + conn.getRemoteSocketAddress());
        long start = System.currentTimeMillis();
        conn.sendPing();
        long end = System.currentTimeMillis();
        conn.send("time start= " + (end-start)); //This method sends a message to the new client

    }

    @Override
    public void onClose(WebSocket conn, int code, String reason, boolean remote) {
        System.out.println("closed " + conn.getRemoteSocketAddress() + " with exit code " + code + " additional info: " + reason);
    }

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

    @Override
    public void onMessage( WebSocket conn, ByteBuffer message ) {
        System.out.println("received ByteBuffer from "  + conn.getRemoteSocketAddress());
    }

    @Override
    public void onError(WebSocket conn, Exception ex) {
        System.err.println("an error occured on connection " + conn.getRemoteSocketAddress()  + ":" + ex);
    }

    @Override
    public void onStart() {
        System.out.println("server started successfully");
    }

    public static void main(String[] args) {
        String host = "localhost";
        int port = 8887;

        WebSocketServer server = new SimpleServer(new InetSocketAddress(host, port));
        server.run();

    }
}

但是当我尝试连接到服务器时,它给出了java.net.ConnectException错误:连接被拒绝。我怀疑在VM中打开的端口有问题,但是以前我为我的VM安装Apache Tomcat时没有问题,可以使用端口8080的公共IP地址进行访问。

代码或在VM中打开入站端口的方式是否有问题?

1 个答案:

答案 0 :(得分:0)

事实证明,我需要使用注释中提到的专用IP地址0.0.0.0或InetAddress.getLocalHost()更改服务器中的本地主机地址