这似乎是一个受欢迎的问题,但即使花了很多时间进行故障排除,我仍然无法找到解决方案。我希望有更新的解决方案。
我正在使用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);
}
}
运行TheServer
然后TheClient
后,我的控制台会打印:
server started on 8215
connected: 1
disconnected: 1
请注意,连接和断开之间的时间几乎是立即的,当然小于我设置的连接超时时间。另请注意,我注释了setKeepAliveTCP()
方法,因为虽然我认为没有必要,但我插入它以查看它是否可行。
答案 0 :(得分:2)
经过多次digging around之后,我发现用以下方式启动客户端
new Thread(client).start()
而不是
client.start()
解决了这个问题。
“从r122开始,客户端更新线程被制作成守护程序线程,导致子进程在完成初始化后立即关闭。”