【问题标题】:How to differentiate types of objects through a byte array如何通过字节数组区分对象类型
【发布时间】:2019-08-01 07:58:22
【问题描述】:

我目前正在开发一个远程桌面应用程序,我偶然发现了一个主要问题。请记住,我使用的是一个简单的 TCP 库,可以像这样向服务器发送数据:MainClient.Send(Byte[] Data);

我遇到的问题是我需要能够区分数据,例如将标头附加到数据上,以便服务器知道如何处理它。我目前的解决方案是根据客户端是否正在流式传输屏幕来打开和关闭布尔值,以便服务器知道如何处理它接收的数据。 (当 bool 为真时,接收到的任何数据都会自动转换为图像。)

如何在带有图像的敏感字节数组中执行此操作,然后让服务器能够读取标头以判断它是什么。 (这样我就可以和客户端同时执行多个其他功能了)

【问题讨论】:

  • 您将需要实现一个基本协议,发送带有字节的内容元数据,包括长度,如果您真的很小心,还需要校验和。另一方面,读取元数据,获取你需要的字节,然后做你需要的事情
  • 您也可以尝试将其序列化为 JSON 流,此链接可能会有所帮助 stackoverflow.com/questions/44370046/…

标签: c# arrays networking byte


【解决方案1】:

如果我对您的问题的理解正确,那么您正在尝试区分收到的数据类型。

这可以通过将“头字节”添加到要发送的字节中来轻松完成,并在服务器端对其进行分析。

List<Byte> bytesToBeSend = new List<Byte>();

bytesToBeSend.Add(0);    //Assuming 0 is the image type.
bytesToBeSend.AddRange(dataToBeSend);
MainClient.Send(bytesToBeSend.ToArray());

当收到数据后,做:

Byte[] bytesToBeProcess = bytes.Skip(1).ToArray();

switch(bytes[0])
{
    case 0:    //Image type.
        //Do whatever you want with bytesToBeProcess.
        break;
    case 1:    //Text type, for example, and so on.
        //...
        break;
    default:
        //...
        break;
}

这只是基本思路,请根据需要更改代码!

【讨论】:

  • 我注意到您在 .AddRange() 中传入了 dataToBeSent。这只是一个占位符,用于放置我需要发送的数据吗?
  • 是的。它应该是一个字节数组。希望它对你有用!
猜你喜欢
  • 1970-01-01
  • 2023-02-11
  • 1970-01-01
  • 2018-12-15
  • 2021-08-20
  • 2012-03-15
  • 2018-09-09
  • 1970-01-01
  • 2023-03-20
相关资源
最近更新 更多