Kryonet客户端立即断开与服务器的连接

时间:2017-10-22 21:57:26

标签: java android client disconnect kryonet

我目前正在编写一个将手机连接到服务器的应用程序。

客户端和服务器都在使用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搜索都没有取得任何成功。

0 个答案:

没有答案