Kryonet客户端在超时后断开连接

时间:2013-10-05 13:29:08

标签: java client libgdx kryonet

当我使用此线路进行连接时,我的Kryonet服务器在5000ms后断开连接 client.connect(5000, host, Network.port); 我认为5000是连接超时,但是当我运行连接时,它能够连接并且它接收我发送的类,但它在5000ms后断开与服务器的连接。

我正在修改Kryonet提供的基本ChatClient.java。这就是我想出来的。

import java.awt.EventQueue;
import java.io.IOException;

import com.badlogic.gdx.ApplicationListener;
import com.esotericsoftware.kryonet.Client;
import com.esotericsoftware.kryonet.Connection;
import com.esotericsoftware.kryonet.Listener;
import com.me.mygdxgame.Network.Obstacles;

public class GameClient implements ApplicationListener{
    Client client;
    String name;

    public GameClient () {
        client = new Client();
        client.start();

        // For consistency, the classes to be sent over the network are
        // registered by the same method for both the client and server.
        Network.register(client);

        client.addListener(new Listener() {
            public void connected (Connection connection) {
                System.out.println("connected");
            }

            public void received (Connection connection, Object object) {
                if (object instanceof Obstacles) {
                    Obstacles obs = (Obstacles)object;
                    System.out.println("Obstacle recieved on client - " + obs.obstacles.size());
                    return;
                }else {
                    System.out.println("invalid packet");
                }
            }

            public void disconnected (Connection connection) {
                EventQueue.invokeLater(new Runnable() {
                    public void run () {
                        client.close();
                        // Closing the frame calls the close listener which will stop the client's update thread.
                    }
                });
            }
        });

        final String host = "localhost";

        // We'll do the connect on a new thread so the ChatFrame can show a progress bar.
        // Connecting to localhost is usually so fast you won't see the progress bar.
        new Thread("Connect") {
            public void run () {
                try {
                    client.connect(5000, host, Network.port);
                    // Server communication after connection can go here, or in Listener#connected().
                } catch (IOException ex) {
                    ex.printStackTrace();
                    System.exit(1);
                }
            }
        }.start();
    }

    @Override
    public void create() {
        // TODO Auto-generated method stub

    }

    @Override
    public void resize(int width, int height) {
        // TODO Auto-generated method stub

    }

    @Override
    public void render() {
        // TODO Auto-generated method stub

    }

    @Override
    public void pause() {
        // TODO Auto-generated method stub

    }

    @Override
    public void resume() {
        // TODO Auto-generated method stub

    }

    @Override
    public void dispose() {
        // TODO Auto-generated method stub

    }
}

2 个答案:

答案 0 :(得分:1)

尝试使用client.SetKeepAliveTCP(int smallerthendisconnecttime);

答案 1 :(得分:0)

如果您将服务器配置为TCP UDP,然后让客户端 通过TCP连接,则可能会出现您所描述的问题。

如果您想要利用主机发现但之后只需要TCP连接,那么建议您"run a separate server for UDP discovery"

基本上,您需要确保客户端和服务器协议使用情况匹配(服务器和客户端都只为TCP设置,或者服务器和客户端都设置为TCP和UDP)。