Witam. Jestem początkującym programistą Java, przed napisaniem tego postu dużo czasu spędziłem na szukaniu rozwiązania w necie, ale problem nadal występuje. Mianowicie mam tutaj aplikacje klient-serwer, która pomiędzy dwoma użytkownikami przekazuje sobie wiadomości. Jeśli oczekuję na wpisanie wiadomości od strony serwera, to wszystko jest ok, natomiast od strony klienta oczekiwanie dłuższe niż 12 sekund rozłącza połączenie. I tutaj moje pytanie, jak temu zapobiec, próbowałem zrobić nowy wątek, żeby wysyłał co jakiś czas pusty pakiet, ale nie podziałało(może to przez brak moich umiejętności).
Oto kod:

 import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Date;
import java.util.Scanner;

import com.esotericsoftware.kryonet.Client;
import com.esotericsoftware.kryonet.Connection;
import com.esotericsoftware.kryonet.Listener;
import com.esotericsoftware.kryonet.Server;

public class Gracz extends Listener{
static String KorS;
static String usr;
static Server server;
static int udpPort = 27960, tcpPort = 27960;
private static Scanner scanner;
static Client client;
static String ip = "localhost";	
	public static void main(String[] args) throws Exception{	
    scanner = new Scanner(System.in);
	System.out.println("**MENU***\n1.Uruchom serwer\n2.Polacz z graczem\n3.Wyjdz z gry");
	String menu = scanner.nextLine();
	
	switch(menu){
	case "1":
		server = new Server();
		server.getKryo().register(PacketMessage.class);
		server.bind(tcpPort, udpPort);
		server.start();
		server.addListener(new Gracz());
		System.out.println("Serwer dziala!");
		usr = "[S] Tomek";
		KorS = "S";
		break;
	case "2":
		client = new Client();
		client.getKryo().register(PacketMessage.class);
		new Thread(client).start();
		//2147483647
		client.connect(2147483647, ip, 27960, 27960);
		client.setTimeout(2147483647);
		client.setKeepAliveTCP(2147483647);
		client.setKeepAliveUDP(2147483647);
		client.addListener(new Gracz());
		
		usr = "[K] Tomek";
		KorS = "K";
		break;
	case "3":
		break;
	default:
		System.out.println("Zly parametr!");
	}
	}

public void connected(Connection c){
	System.out.println("Polaczono z " + c.getRemoteAddressTCP().getHostString());
	PacketMessage packetMessage = new PacketMessage();
	packetMessage.message = "Poczatek gry " + new Date().toString();
	packetMessage.user = usr;
	c.sendTCP(packetMessage);
	
}

public void disconnected(Connection c){
System.out.println("Klient rozlaczony!");
}

public void received(Connection c, Object p){	
	if(KorS == "K"){client.setKeepAliveTCP(2147483647);
	client.setKeepAliveUDP(2147483647);}
	
	
	BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
	if(p instanceof PacketMessage){
		PacketMessage packet = (PacketMessage) p;
		System.out.println("Odebrano ruch z "+ packet.user +" : " + packet.message);
		System.out.println("Podaj swój ruch(end - koniec): ");
		PacketMessage msg = new PacketMessage();
		try{
		
	    //msg.message = "";
		msg.message = reader.readLine();
		msg.user = usr;
		
//		if((msg.message == "end") && (KorS == "S"))
//		server.stop();	
//		if((msg.message == "end") && (KorS == "K"))
//	    client.stop();		
		
		c.sendTCP(msg);
		} catch (IOException e) {
            e.printStackTrace();
        } 
		
		
	}
}

}