我正在尝试使用 Java TCP 服务器和 Android 客户端为 Android 创建一个基本的多人游戏。问题是发送TCP数据包速度慢。当我放置 Thread.sleep(100) 时它就起作用了。
服务器端:
for(int i = 0; i<50; i++) {
client.send("test_" + i);
}
客户端刚刚收到(~3 个数据包)
测试_0
测试_1
处于 sleep 状态的服务器:
for(int i = 0; i<50; i++) {
client.send("test_" + i);
Thread.sleep(100);
}
客户收到~45
编辑:客户端:
while (true) {
if (!running)
break;
inFromServer = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8"), 2 * 1024);
String rawRecervied = inFromServer.readLine();
if (rawRecervied == null) {
close();
break;
}
final String recervied = rawRecervied.substring(2); // for skip utf bom chars
new Thread() {
public void run() {
listener.dataRecervied(recervied);
Log.e("TCP recervied", recervied); // debug
}
}.start();
}
最佳答案
也许关键在 BufferedReader
中。您处于一个循环中,不断创建一个 BufferedReader 来检查服务器是否发送了某些内容。一旦检测到数据,您就开始处理它,但数据不断出现,并缓冲在 BufferedReader 中。处理完最初检测到的数据后,您再次创建一个 BufferedReader,但是,之前创建的 BufferedReader 中已经缓冲的所有数据会发生什么情况呢?也许已经丢失了。
您可以尝试在循环之外创建 BufferedReader
吗?
关于Java TCP服务器-android客户端丢包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9690716/