【问题标题】:TCP ACK delay on Android 3GAndroid 3G 上的 TCP ACK 延迟
【发布时间】:2016-05-13 23:23:42
【问题描述】:

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

【问题讨论】:

    标签: java android tcp libgdx


    【解决方案1】:

    ' 如果您的服务器也在同一个 wifi 网络上,我猜这在本地网络中有效,而问题出现在远程网络上。对吧?

    【讨论】:

    • 不,我在朋友家试过,使用安卓和wifi,一切正常。问题似乎与 3G 连接有关。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-02
    • 2014-07-20
    • 1970-01-01
    • 2016-07-11
    • 1970-01-01
    • 2012-04-01
    相关资源
    最近更新 更多