Chris
Chris

Reputation: 2465

Kryonet client disconnecting after timeout

My Kryonet server disconnects after 5000ms when I'm using this line for a connection client.connect(5000, host, Network.port); I thought the 5000 was the connection timeout but when I run the connection, it is able to connect and it receives the classes I send but it disconnects from the server after 5000ms.

I'm modifying the basic ChatClient.java provided with Kryonet.. Here's what I came up with.

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

    }
}

Upvotes: 0

Views: 1358

Answers (2)

Travis
Travis

Reputation: 2026

The problem you are describing can arise if you configure your server for TCP and UDP but then have your client only connect via TCP.

If you're wanting to take advantage of the host discovery but only need a TCP connection thereafter then it is advisable that you "run a separate server for UDP discovery".

Basically, you need to be sure that client and server protocol usage matches (either both server and client are setup for only TCP, or both server and client are setup for both TCP and UDP).

Upvotes: 0

triplesky
triplesky

Reputation: 11

try to use client.SetKeepAliveTCP(int smallerthendisconnecttime);

Upvotes: 1

Related Questions