如何构建自定义二进制协议TCP请求

时间:2017-11-16 01:52:45

标签: c# tcp protocols

我正在处理代码质询,简而言之,它提供了一个服务器,用于对请求中发送的数据进行编码/解码。它是具有以下自定义二进制请求/响应结构的TCP / IP服务器:

request/response structures

我需要创建一个桌面客户端,它将发送请求并接收响应,并相应地显示数据。我无法理解请求将如何形成,以及如何将请求发送到TCP / IP服务器(使用C#)。有人可能提供一个这样的例子吗?

1 个答案:

答案 0 :(得分:0)

不确定您的校验和,但构建数据包看起来像

        byte[] CreatePacket(string s, Operation op)
        {
            var packet = new List<byte>();
            packet.AddRange(BitConverter.GetBytes((UInt16) 0x1092));
            packet.Add(1);
            var data = Encoding.ASCII.GetBytes(s);
            packet.AddRange(BitConverter.GetBytes((UInt32) (9 + data.Length)));
            packet.Add((byte) (op == Operation.Encode ? 1 : 2));
            packet.AddRange(data);
            packet.Add(CheckSum(packet));
            return packet.ToArray();
        }

给出

    enum Operation
    {
        Encode,
        Decode,
    }

server.Send(CreatePacket("test string", Operation.Encode))

还有校验和规范......

        byte CheckSum(List<byte> packet)
        {
            return (byte)(packet.Select((b, i) => (value: b, index: i))
                .Sum(o => (o.value & (1 << (o.index % 8))) > 0 ? 1 :0) % 256);
        }