2016-05-13 4 views
0

Ich verwende LibGDX Netzwerkbibliotheken, um Daten von Clients an meinen Server zu senden.TCP ACK Verzögerung auf Android 3G

Alles funktioniert gut auf einem Desktop-Client.

Alles funktioniert auch gut auf einem Android-Client über WiFi verbunden.

Aber ich habe einige seltsame Probleme auf einem Android-Client über eine 3G-Verbindung verbunden.

Hier ist meine Server-Seite Code:

ServerSocketHints serverSocketHint = new ServerSocketHints(); 
serverSocketHint.acceptTimeout = 0; 

ServerSocket serverSocket = Gdx.net.newServerSocket(Protocol.TCP, Parameters.getInstance().getServerPort(), serverSocketHint); 

while(true) 
{ 
    SocketHints socketHints = new SocketHints(); 
    socketHints.connectTimeout = 10000; 

    Socket socket = serverSocket.accept(socketHints); 

    new ClientRequestsHandler(socket).start(); 
} 

Und hier ist der Client-Seite:

this.socketHints = new SocketHints(); 

try { 
    this.socket = Gdx.net.newClientSocket(Net.Protocol.TCP, "8*********", 9021, socketHints); 

    this.clientHandler = new ClientHandler(socket, this.aesImplementation); 
} 
catch (Exception e) 
{ 
    Gdx.app.log("TCP CONNECTION",e.getMessage(),e); 
} 

Das Problem ist, dass die ACK-Pakete verzögert zu sein scheint. Ich habe versucht, Nagle-Algorithmus ohne Erfolg zu deaktivieren.

Hier ist eine Wireshark Capture:

Screenshot of Wireshark capture

Kennt jemand eine Abhilfe, außer UDP zu wechseln?

Ich bevorzuge nicht UDP zu verwenden, da ich keine Echtzeit brauche und ich brauche eine zuverlässige Übertragung.

Antwort

0

'wenn Ihr Server auch auf dem gleichen WiFi-Netzwerk war Ich denke, dann funktionierte dies in einem lokalen Netzwerk, und das Problem kommt, wenn es um Remote-Netzwerke kommt. Recht ?

+0

Nein, ich versuchte in einem Freund Haus, mit Android & WiFi, alles funktioniert gut. Problem scheint mit 3G Verbindung verbunden zu sein. –

Verwandte Themen