【问题标题】:Geeting metadata from TCP从 TCP 获取元数据
【发布时间】:2020-06-07 19:00:36
【问题描述】:

我正在将对象转换为字节数组,并使用 c sharp 通过 TCP(TCPListener) 将此信息从客户端 1 发送到客户端 2。我想告诉客户 2,我必须出于什么目的使用这些信息。我怎样才能做到这一点?

有没有一种方法可以发送元数据以及字节?

【问题讨论】:

    标签: .net tcp


    【解决方案1】:

    您是 TCP 数据包的发送者和接收者。您可以在 TCP 之上设计自己的协议,例如。 TCP 消息的前 3 个字节是用于 (1)、(2) 目的的元数据。 你可以在接收端相应地解析 TCP 消息的有效负载。

    【讨论】:

    • 你能分享我能找到类似实现的任何链接吗?
    【解决方案2】:

    TCP 只是一个字节流;它没有“元数据”与“消息”的概念,实际上它没有“消息”的概念 - 连续消息之间的任何逻辑中断完全取决于您进行编码。因此,通常有一个“框架”的概念。例如,我们可以定义一个“框架”(我们在其中使用元数据的标头):

    • 4 字节,little-endian int32:{标头数} (=H)
    • 4 字节,little-endian int32:{payload length in bytes} (=N)
    • 高 ×
      • 纯 ASCII:{header-name}={header-value}\r\n
    • 有效负载:{N 字节}

    但实际上我们可以使用任何方案。在某些情况下,元数据是简单且可预测的,您基本上可以将其视为消息的一部分,将 真实 消息视为子数据;例如,假设我们正在发送 JSON;而不是发送:

    {
        "somedata": 12345,
        // ...
    }
    

    我们发送:

    {
        "blah-meatadata-whatever": "foo",
        "more-metadata": true,
        "content":
        {
            "somedata": 12345,
            // ...
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-07-04
      • 2012-12-02
      • 2014-09-15
      • 1970-01-01
      • 2012-05-17
      • 2016-06-24
      • 1970-01-01
      • 2012-09-10
      • 2020-08-24
      相关资源
      最近更新 更多