我使用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,因为我不需要实时,我需要可靠的传输。
答案 0 :(得分:0)
'如果你的服务器也在同一个wifi网络上,那么我认为这可以在本地网络中运行,而问题出现在远程网络上。对吗?