我正在尝试将数据包发送到Tattile流量摄像机。
Tattile摄像机使用自己的TCP数据包协议TOP(Tattile对象协议)
通过阅读文档可以看到我需要
IP
> TCP
> TOP HEADER
> VCR PAYLOAD
要创建TOP Header
,这是要求。
我相信
需要24个字节。
这里是命令头,如上图所示,Header Dimension
部分,这是否要求TOP Header
需要24个字节?
这里是Header Constructor
,我不明白为什么它存在是否已经有一个Command Header
带有我所看到的相同信息。
这里是构建消息的示例,因此对于{ {1}}在这个阶段,直到我有一个更好的理解,我要做的就是发送数据,而不是接收数据,因此,
这里是command code
命令代码。
这是我的明智代码,到目前为止,它可以连接并“发送消息”,但是引擎无法启动,至于我了解以后的Start Engine
,我应该添加带有命令代码的更多命令。
enum
这是我的称呼方式
class Command
{
public enum Codes
{
START_ENGINE
}
private static readonly byte[] HeaderDimension = new byte[24];
private static byte[] CommandCode;
private static readonly byte[] Sender = new byte[4] { 0xFF, 0xFF, 0xFF, 0xFF };
private static readonly byte[] Receiver = Sender;
private static readonly byte[] Error = new byte[] { 0 };
private static readonly byte[] DataDimension = new byte[] {0};
public static void Execute(Codes code)
{
if (code == Codes.START_ENGINE)
{
CommandCode = new byte[4]{ 0x35, 0x0, 0x0, 0x4};
}
using (TcpClient tcpClient = new TcpClient("192.168.1.21", 31000))
{
NetworkStream networkStream = tcpClient.GetStream();
byte[] bytesTosend = HeaderDimension.Concat(CommandCode)
.Concat(Sender)
.Concat(Receiver)
.Concat(Error)
.Concat(DataDimension).ToArray();
networkStream.Write(bytesTosend, 0, bytesTosend.Length);
}
}
}
答案 0 :(得分:1)
您的HeaderDimension
应该是包含值的4个字节的数组,而不是24个字节的数组。
Error
和DataDimension
的长度也应始终为4个字节。
答案 1 :(得分:1)
标头共有24个字节,包含6 x 4个字节的值。前4个字节包含长度,为24(0x18)。在C#中,这些是Int32数据类型,但是请记住字节顺序是什么。网络协议通常具有网络字节顺序(大印度语),可能与您的C#不同。如果需要,请使用System.BitConverter类进行测试和更改。