发送TCP数据包

时间:2018-06-22 07:18:53

标签: c# tcp tcpclient tcp-ip

我正在尝试将数据包发送到Tattile流量摄像机。
Tattile摄像机使用自己的TCP数据包协议TOP(Tattile对象协议)

通过阅读文档可以看到我需要
IP> TCP> TOP HEADER> VCR PAYLOAD
TCP Commmunication

要创建TOP Header
,这是要求。

我相信TOP HEADER
需要24个字节。

Command Header
这里是命令头,如上图所示,Header Dimension部分,这是否要求TOP Header需要24个字节?

Header Constructor
这里是Header Constructor,我不明白为什么它存在是否已经有一个Command Header带有我所看到的相同信息。

Building A Message
这里是构建消息的示例,因此对于{ {1}}在这个阶段,直到我有一个更好的理解,我要做的就是发送数据,而不是接收数据,因此,

Start Engine
这里是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);
        }
    }
}

2 个答案:

答案 0 :(得分:1)

您的HeaderDimension应该是包含的4个字节的数组,而不是24个字节的数组。

ErrorDataDimension的长度也应始终为4个字节。

答案 1 :(得分:1)

标头共有24个字节,包含6 x 4个字节的值。前4个字节包含长度,为24(0x18)。在C#中,这些是Int32数据类型,但是请记住字节顺序是什么。网络协议通常具有网络字节顺序(大印度语),可能与您的C#不同。如果需要,请使用System.BitConverter类进行测试和更改。