【发布时间】: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,因为我不需要实时,我需要可靠的传输。
【问题讨论】: