Android 3G上的TCP ACK延迟

时间:2016-05-13 08:04:38

标签: java android tcp libgdx

我使用LibGDX网络库将数据从客户端发送到我的服务器。

桌面客户端上的一切正常。

在通过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,因为我不需要实时,我需要可靠的传输。

1 个答案:

答案 0 :(得分:0)

'如果你的服务器也在同一个wifi网络上,那么我认为这可以在本地网络中运行,而问题出现在远程网络上。对吗?