0

这似乎是一个流行的问题,但即使在花费大量时间进行故障排除后,我仍然无法找到解决方案。我希望有一个更新的解决方案。

我正在使用 KryoNet Java 网络库设置一个简单的服务器和客户端。我的问题是我的客户端在连接到服务器后立即断开连接。

这是我的代码:

服务器

public class TheServer extends Listener {

    static Server server;
    static final int PORT = 8215;

    public static void main(String[] args) throws IOException {
        server = new Server();
        server.start();
        server.bind(PORT);
        server.addListener(new TheServer());
        System.out.println("server started on " + PORT);
    }

    public void connected(Connection c) {
        System.out.println("connected: " + c.getID());
    }

    public void disconnected(Connection c) {
        System.out.println("disconnected: " + c.getID());
    }

}

客户

public class TheClient extends Listener {

    static Client client;
    static final String IP = "localhost";
    static final int PORT = 8215;

    public static void main(String[] args) throws IOException {
        client = new Client();
        client.start();
        client.connect(5000, IP, PORT);
        client.addListener(new TheClient());
        //client.setKeepAliveTCP(2000);
    }

}

运行TheServerthen 后TheClient,我的控制台打印:

server started on 8215
connected: 1
disconnected: 1

注意连接和断开之间的时间几乎是即时的,肯定小于我设置的连接超时时间。另请注意,我注释掉了该setKeepAliveTCP()方法,因为虽然我认为没有必要,但我将其插入以查看它是否有效。

4

1 回答 1

2

经过更多的挖掘,我发现启动客户端:

new Thread(client).start()

代替

client.start()

解决问题。

“从 r122 开始,客户端更新线程被制成守护线程,导致子进程在完成初始化后立即关闭。”

于 2014-02-17T19:51:26.210 回答