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,因爲我不需要實時性,而且我需要可靠的傳輸。
不,我嘗試在一個朋友家,使用android&wifi,everyting工作正常。問題似乎與3G連接有關。 –