小弟刚接触C#网络通信,遇到一个自定义的网络通信协议,如图。我把自己的理解说下,请各位朋友帮忙指正~
1.TCP/IP协议是定好的,所以我说上图是自定义网络通信协议是不是不对?还是说数据帧?
2.在上图的协议中(暂且这么叫),如果数据只有2字节,那么帧长度就是11,不足3字节,其余位是不是补0?
3.CRC校验是TCP/IP中自带的校验还是说我需要再用C#写一个校验函数?
4.我按照之前的理解写了下面的代码,是不是就可以完成数据帧的发送了?(之前已建立连接)
private void ServerResponse()
{
string seatMsg;
byte[] seatBuf = new byte[1024];
byte[] sendRequestBuf = new byte[11];
while (CheckSeatFlag)
{
sendRequestBuf[0] = (byte)0xaa;
sendRequestBuf[1] = (byte)0xbb;
sendRequestBuf[2] = (byte)0x00;
sendRequestBuf[3] = (byte)0x00;
sendRequestBuf[4] = (byte)0x0b;
sendRequestBuf[5] = (byte)'T';
sendRequestBuf[6] = (byte)'B';
sendRequestBuf[9] = (byte)0x0d;
sendRequestBuf[10] = (byte)0x0a;
IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Parse(robotServerIP), robotPort);
robotSocket.SendTo(sendRequestBuf, 11, SocketFlags.None, (EndPoint)ipEndPoint);
}
}
------解决思路----------------------
嗯,你少了 2 字节 CRC 校验数据。