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();
}
}
}
}