2016-05-13 72 views
0

我正在使用LibGDX網絡庫將數據從客戶端發送到我的服務器。Android 3G上的TCP ACK延遲

在桌面客戶端上,一切工作正常。

在通過WiFi連接的Android客戶端上,一切工作都正常。

但是,我在通過3G連接連接的Android客戶端上遇到了一些奇怪的問題。

這裏是我的服務器端代碼:

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

這裏是客戶端:

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

的問題是,ACK數據包似乎要推遲。我試圖禁用Nagle算法,但沒有成功。

這裏是Wireshark的捕獲:

Screenshot of Wireshark capture

有誰知道除了切換到UDP解決方法?

我不喜歡使用UDP,因爲我不需要實時性,而且我需要可靠的傳輸。

回答

0

'如果你的服務器也在同一個wifi網絡上,我想這個工作在一個本地網絡中,並且問題出現在遠程網絡上。對 ?

+0

不,我嘗試在一個朋友家,使用android&wifi,everyting工作正常。問題似乎與3G連接有關。 –