繁体   English   中英

如何从 TCP stream 读取二进制数据?

[英]How to read binary data from TCP stream?

我有一台设备通过 TCP 将数据发送到另一台设备。 当我收到数据并尝试 Byte 数组上的Encoding.Unicode.GetString()方法时,它会变成不可读的文本。

只有 TCP 数据包的第一帧(包头中的前导码)可以转换为文本。 发件人 TCP 文档数据包数据)。

到目前为止,这是我的代码。 我试过编码为 ASCII 也没有结果。

NetworkStream stream = tcpClient.GetStream();
int i;
Byte[] buffer = new Byte[1396];

while ((i = stream.Read(buffer, 0, buffer.Length)) != 0)
{
      data = System.Text.Encoding.Unicode.GetString(buffer, 0, i);
      data = data.ToUpper();
      Console.WriteLine($"Data: {data}");
}

这只是打印在上面的“数据包数据”链接中看到的相同的不可读字符串。 为什么会这样? 官方设备文档说它是用小端编码的。 我错过了什么吗? 我是处理 TCP 数据传输的新手。

链接文档中没有任何内容表明存在任何文本数据,除了“序言”,即固定的四字母 ascii 字符串或具有等效值的 integer,无论您喜欢什么。

它指定了一个二进制 header 和一堆大部分 32 位整数,后跟一个帧序列,其中每个帧有 3 个 32 位数字。

因此,我建议根据格式规范使用将缓冲区包装在 memory stream 中并使用BinaryReader读取值。

请注意,网络通信通常使用大端编码,但 windows 和您的设备都使用小端编码,因此您不必担心字节序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM