【问题标题】:Flutter tcp socket seems to loose 1-2 bytes when sending big dataFlutter tcp 套接字在发送大数据时似乎丢失了 1-2 个字节
【发布时间】:2021-02-06 15:15:38
【问题描述】:

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

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

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

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

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]);
      }
    });

【问题讨论】:

  • nono 不是问题,“eos”是字符分隔符,所以我不想在我的函数中使用它。顺便说一句,我找到了一个“解决方案”,如下所示。谢谢!

标签: flutter sockets tcp


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-11
    • 1970-01-01
    • 2012-12-10
    • 1970-01-01
    • 2022-06-10
    • 2017-05-30
    • 1970-01-01
    • 2012-10-13
    相关资源
    最近更新 更多