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 楼答案
“如果你的服务器也在同一个wifi网络上,我想这在本地网络中是有效的,而问题出现在远程网络上。对吧