flutter - Flutter tcp 套接字在发送大数据时似乎丢失了 1-2 个字节
问题描述
我遇到了这个问题,我无法弄清楚发生了什么。我有一个使用 tcp 套接字连接的服务器。它存储了一些图像,我希望将它们发送到我的颤振应用程序。我尝试了两种不同的方法:
- 我监听套接字直到数据包完全到达(服务器在消息末尾发送一些字符,表示消息已完成)。
- 我将消息的长度发送到应用程序并收听,直到我读取所有数据。
在这两种方式中,我可以看到很多时候我丢失了 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]);
}
});
解决方案
我发现了一些非常有趣的东西!问题都出在模拟器上!事实上,使用我的手机,我每次都可以读取所有数据!因此,当您使用模拟器并通过 tcp 套接字发送/侦听数据时要小心。顺便谢谢大家,我希望这对某人有用。
推荐阅读
- pointers - 我可以指向 Fortran 中的可变排名数组吗?
- mysql - 试图在 ubuntu 上设置 wordpress 并想在 mysql 中授予权限
- python - 我怎样才能让我的代码工作,一旦我运行它,我就一直没有定义名称
- regex - 阿帕奇位置匹配
- javascript - 如何在 PayPal 智能按钮交易中发送自定义数据字段
- javascript - 如何访问使用 = 而不是键值对的对象中的属性
- bitbucket - 生成发行说明 (CHANGELOG.md)
- php - 空或空数组值不过滤或从数组列表中删除
- javascript - 在反应应用程序中导入 jQuery 时,如何在内联脚本中使用 jQuery?
- javascript - 如何在 JavaScript 中使用 Mongoose 动态更新文档?