有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Android 3G上的java TCP确认延迟

我正在使用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算法,但没有成功

以下是一个线鲨捕捉:

Screenshot of Wireshark capture

除了切换到UDP,有人知道解决方法吗

我不喜欢使用UDP,因为我不需要实时,我需要可靠的传输


共 (1) 个答案

  1. # 1 楼答案

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