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.
Nein, ich versuchte in einem Freund Haus, mit Android & WiFi, alles funktioniert gut. Problem scheint mit 3G Verbindung verbunden zu sein. –