[英]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.