我目前正在编写一个将手机连接到服务器的应用程序。
客户端和服务器都在使用Kryonet框架。
问题在于:
当服务器运行然后我启动客户端时,客户端立即断开与服务器的连接,但程序本身仍在运行,因此只有客户端线程可能因任何原因而死亡。
我在服务器和客户端都使用kryonet-2.21。 我在Android上以及在PC上尝试过我的代码。 我也试图解决我能做的一切,并尝试了我发现的所有问题。
客户端代码:
public class LogicHandler extends Thread {
private Client client;
public LogicHandler() {
}
public Client getClient() {
return client;
}
public void run() {
client = new Client(33554432, 33554432);
new Thread(client).start();
try {
getClient().connect(5000, "localhost", 54555, 54777);
} catch (IOException e) {
e.printStackTrace();
}
Packets.register(getClient());
getClient().addListener(new Listener() {
public void received(Connection connection, Object object) {
System.out.println("received " + object);
if (object instanceof ConnectionResponse) {
}
if (object instanceof ScheduleResponse) {
}
}
public void disconnected(Connection connection) {
}
});
getClient().sendTCP(new ConnectionRequest());
}
public static void main(String[] args) {
new LogicHandler().start();
while(true) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("wait");
}
}
}
服务器代码:
public class ServerLogicHandler {
private Server server;
private List<Client> clients;
private List<Connection> connections;
public ServerLogicHandler() {
System.out.println("Server is starting!");
server = new Server(33554432, 33554432);
server.start();
try {
server.bind(54555, 54777);
} catch (Exception e) {
server.stop();
System.out.println("Port belegt. Server wird gestoppt!");
System.exit(0);
}
Packets.register(server);
clients = new ArrayList<Client>();
connections = new ArrayList<Connection>();
server.addListener(new Listener() {
public void received(Connection connection, Object object) {
System.out.println("got packet");
if (object instanceof ConnectionRequest) {
System.out.println("size " + connection.sendTCP(new ScheduleResponse()));
}
}
public void disconnected(Connection connection) {
System.out.println("Disco " + connection.getID());
}
public void connected(Connection connection) {
System.out.println(connection.getRemoteAddressTCP().getPort() + " "
+ connection.getRemoteAddressTCP().getAddress());
}
});
System.out.println("Server started!");
}
public Server getServer() {
return server;
}
public static void main(String... args) {
new ServerLogicHandler();
}
}
除了每秒“等待”之外,客户端不会输出任何内容。这意味着服务器未发送任何数据包或客户端已关闭。我的猜测是后者发生的原因是服务器输出以下内容:
Server is starting!
Server started!
54408 /127.0.0.1
Disco 1
当我开始新客户时,最后两行只会重复,例如'54890 /127.0.0.1 迪斯科2 “
据此我猜,客户端甚至在发送任何数据包之前都会因任何原因而关闭。我的Google搜索都没有取得任何成功。