【发布时间】:2021-02-06 15:15:38
【问题描述】:
我遇到了这个问题,但我不知道发生了什么。 我有一个使用 tcp 套接字连接的服务器。它存储了一些图像,我希望将它们发送到我的颤振应用程序。 我尝试了两种不同的方法:
- 我一直监听套接字,直到数据包完全到达(服务器在消息末尾发送一些字符,表示消息已完成)。
- 我将消息的长度发送到应用程序并监听直到我读取所有数据。
在这两种方式中,我可以看到很多时候我丢失了 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”是字符分隔符,所以我不想在我的函数中使用它。顺便说一句,我找到了一个“解决方案”,如下所示。谢谢!