首页 > 解决方案 > Flutter tcp 套接字在发送大数据时似乎丢失了 1-2 个字节

问题描述

我遇到了这个问题,我无法弄清楚发生了什么。我有一个使用 tcp 套接字连接的服务器。它存储了一些图像,我希望将它们发送到我的颤振应用程序。我尝试了两种不同的方法:

  1. 我监听套接字直到数据包完全到达(服务器在消息末尾发送一些字符,表示消息已完成)。
  2. 我将消息的长度发送到应用程序并收听,直到我读取所有数据。

在这两种方式中,我可以看到很多时候我丢失了 1 或 2 个字节的数据(很少 3 或 4 个)。我还注意到,我的应用程序似乎错过了我发送的数据包开头的那些数据字节。(例如,如果要发送的消息是“AAAABBBBCCCC”并且由于 2 条消息中的算法而被拆分,我会收到类似“AAAABB”、“BCCCC”之类的信息,如果我加入它们,我会错过“B”)。如果我尝试使用 ac# 应用程序,我开发的一切都很好,我每次都可以接收所有数据。

我在颤振应用程序中用来监听的代码是这样的:(我上面解释的两种方式中的一种)

socket.listen((List<int> event) async {
      String received=(utf8.decode(event));
      message += received;
      if(message.contains(eos)){   //IF THE MESSAGE CONTAINS THE LIMITER CHARACTERS THEN I CALL A FUNCTION
        callback(message.split(eos)[0]);
      }
    });

标签: fluttersocketstcp

解决方案


我发现了一些非常有趣的东西!问题都出在模拟器上!事实上,使用我的手机,我每次都可以读取所有数据!因此,当您使用模拟器并通过 tcp 套接字发送/侦听数据时要小心。顺便谢谢大家,我希望这对某人有用。


推荐阅读