【问题标题】:Flutter - Dart Socket reads half messageFlutter - Dart Socket 读取一半消息
【发布时间】:2020-06-06 15:03:33
【问题描述】:

我正在开发一个从 Scala 服务器接收 JSON 格式数据的 Flutter 应用。
一切正常,但有时我收到一条不完整的消息。

我正在使用 Streambuilder 来处理这个过程,代码如下:

return StreamBuilder(
      stream: Utils.socket,
      builder: (_, snapshot) {
        if (snapshot.connectionState == ConnectionState.waiting) {
          return Scaffold(
            body: Center(
              child: AdaptiveSpinner(
                withMessage: 'Connecting to game server',
              ),
            ),
          );
        }

        if (snapshot.error != null) {
          return NetworkErrorScreen();
        }

        final message = String.fromCharCodes(snapshot.data);
[...]
);

在正常行为中,String.fromCharCodes(snapshot.data); 给了我一个有效的 JSON,然后我对其进行解析,等等……但有时 json 不完整(套接字只读取它的一部分,从头开始直到一个未定义的点,或者从一个未定义的点开始到同一个 json 的结尾)。

关于如何解决这个问题的任何想法?可能与缓冲区大小问题有关?请帮忙!

【问题讨论】:

  • Utils.socket是如何实现的?
  • Utils.socket = await Socket.connect(IP, Port);
  • 没有人,也许我解释得不好。问题是我要解析的 json 不完整。例如我收到 { "key": { "subkey1": 1, "subkey2": "someval
  • 因为你不使用transform(json.decoder) - 你看到我发布的链接了吗?他们展示了如何使用transform - 在你的情况下,你必须使用两个transforms - transform(utf8.decoder).transform(json.decoder) 或使用保险丝:transform(utf8.decoder.fuse(json.decoder))

标签: sockets flutter dart tcpsocket


【解决方案1】:

我们终于设法解决了这个问题。 我们不知道为什么,但是由于服务器返回了格式正确的 json(带有换行符和制表符),因此有时会出现问题中的错误。 一旦我们没有在服务器中格式化 json,将其作为纯字符串返回,错误就会自行消失...... 这对我来说是一个谜,如果有人有解释,答案被认为是正确的答案。谢谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-24
    • 1970-01-01
    • 2018-11-27
    • 1970-01-01
    • 2016-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多