Java TCP服务器-android客户端丢包

标签 java android tcp

我正在尝试使用 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/

相关文章:

java - 维护 Junit 中测试的执行顺序

android - Google Play订阅的付款方式?

c - 通过 UDP 实现 ack?

networking - 忽略 SYN/ACK

java - 泽西编码成员名单问题

用于检索 HttpServletRequest 参数的 Java 库

java - ANT - 我如何无法将文件移动到 JAR

android - 备份和恢复 SQLite 数据库到 SD 卡

android - 如何将 ImageView 转换成不同的形状?

c# - 使用 TCP 发送和接收纯文本