C# 通讯协议封装

1、发送内码文字内容        0x31

**************************************************

FE 5C 4B 89                           包头

5E 00 00 00                    总长

31                                 消息类型

00 00 9E E4                            ID

4B 00 00 00                             数据长度(不包括此四字节及包尾)

30 30 30 30 30 30 30 30 31             素材UID              

2C                                     分隔符‘,‘

01                                     移动方式

01                                     移动速度

01                                     停留时间

30 31 30 31 30 31 39 39 31 32 33 31    播放时间段

13 00 00 00                            素材属性长度(不包括此四字节)

55 AA                                  标志字节

00 00                                  保留字节

37                                     内容属性,默认37

31                                     存储方式

31                                     更新时间

31                                     文本起始标志

32                                     显示屏颜色(单、双基色)

31                                     图片编码方式

00 00                                  保留字节

08 00                                  区域宽度   64

10 00                                  区域高度   16

01 11                                   颜色(红) 字体字号(宋体16*16)

00                                      保留字节

14 00 00 00                             素材内容长度(不含此四字节)

31 32 33 34 35 36 37 38 39 30           素材内容“1234567890”

FF 00                                   素材内容特性字

01 00                                   本次素材内容的序号

01 00 01 00                             固定字节

10 48                                   保留字节

2D 31 2C                                素材内容结束标志  

FF FF                                   包尾

 

 

往UID为000000001发送“1234567890”

发送:

FE 5C 4B 89 5E 00 00 00 31 00 00 9E E4 4B 00 00 00 30 30 30 30 30 30 30 30 31 2C 01 01 01 30 31 30 31 30 31 39 39 31 32 33 31 13 00 00 00 55 AA 00 00 37 31 31 31 32 31 00 00 08 00 10 00 01 11 00 14 00 00 00 31 32 33 34 35 36 37 38 39 30 FF 00 01 00 01 00 01 00 10 48 2D 31 2C FF FF

 

 

返回:FE 5C 4B 89 15 00 00 00 81 00 00 9E E4 02 00 00 00 31 23 FF FF

 

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;


namespace 内码文字协议发送
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
UdpNet();

}

public void UdpNet()
{
Socket socketClient = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse(txtIP.Text), 8800);
byte[] data = Senddata();
socketClient.SendTo(data, endPoint);

IPEndPoint send = new IPEndPoint(IPAddress.Any,0);
EndPoint Remote = (EndPoint)send;

byte[] rec = new byte[21];
int receive = socketClient.ReceiveFrom(rec, ref Remote);
if (rec[17] == 0x31)
{
MessageBox.Show("成功");
}
else
{
MessageBox.Show("失败");
}

}

public byte[] Senddata()
{
byte[] SendBuffer = new byte[500];

int TotalLenth,//总产
OrderLenth,//具体指令的字符串长度
//ScLenth,
StrLen,//发送字符串长度
DataLen;//字符串数据长度
string txt=txtStr.Text.Trim();


//声明字符集
System.Text.Encoding utf8, gb2312;
//utf8
utf8 = System.Text.Encoding.GetEncoding("utf-8");
//gb2312
gb2312 = System.Text.Encoding.GetEncoding("gb2312");
byte[] Str;
Str = utf8.GetBytes(txt);
Str = System.Text.Encoding.Convert(utf8, gb2312, Str);


// byte[] Str = UTF8Encoding.UTF8.GetBytes(txt);
DataLen = Str.Length;
byte[] SData = new byte[84 + DataLen];

//int Width, Height;
//Width = Convert.ToInt32(textBoxWidth.Text.Trim());
//Height = Convert.ToInt32(textBoxHeight.Text.Trim());


//1.帧开始符
SendBuffer[0] = 0xfe;
SendBuffer[1] = 0x5C;
SendBuffer[2] = 0x4B;
SendBuffer[3] = 0x89;

//2.所有字节的长度
//低字节在前,高字节在后
TotalLenth = 84 + DataLen;
SendBuffer[7] = (Byte)(TotalLenth /(256*256*256));
TotalLenth = TotalLenth % (256 * 256 * 256);
SendBuffer[6] = (Byte)(TotalLenth /(256*256));
TotalLenth = TotalLenth % (256 * 256);
SendBuffer[5] =(Byte)( TotalLenth/256);
TotalLenth = TotalLenth % 256;
SendBuffer[4] = (Byte)(TotalLenth);

//3. 固定字符31
SendBuffer[8] = 0x31;

//4.辅助字段无意义(固定)
SendBuffer[9] = 0x00;
SendBuffer[10] = 0x00;
SendBuffer[11] = 0x9E;
SendBuffer[12] = 0xE4;

//5.具体指令的字符串长度
OrderLenth = 65 + DataLen;
SendBuffer[16] = (Byte)(OrderLenth / (256 * 256 * 256));
OrderLenth = OrderLenth % (256 * 256 * 256);
SendBuffer[15] = (Byte)(OrderLenth / (256 * 256));
OrderLenth = OrderLenth % (256 * 256);
SendBuffer[14] = (Byte)(OrderLenth /256);
OrderLenth = OrderLenth % 256;
SendBuffer[13] = (Byte)(OrderLenth);

//6.UID 地址
SendBuffer[17] = 0x30;
SendBuffer[18] = 0x30;
SendBuffer[19] = 0x30;
SendBuffer[20] = 0x30;
SendBuffer[21] = 0x30;
SendBuffer[22] = 0x30;
SendBuffer[23] = 0x30;
SendBuffer[24] = 0x30;
SendBuffer[25] = 0x31;


//7.固定
SendBuffer[26] = 0x2C;

//8.移动方式
SendBuffer[27] = 0x01;
//9.移动速度
SendBuffer[28] = 0x01;
//10.显示方
SendBuffer[29] = 0x01;

//11.固定-播放结束起始年月日
SendBuffer[30] = 0x30;
SendBuffer[31] = 0x31;
SendBuffer[32] = 0x30;
SendBuffer[33] = 0x31;
SendBuffer[34] = 0x30;
SendBuffer[35] = 0x31;
SendBuffer[36] = 0x39;
SendBuffer[37] = 0x39;
SendBuffer[38] = 0x31;
SendBuffer[39] = 0x32;
SendBuffer[40] = 0x33;
SendBuffer[41] = 0x31;

//12.素材指令长度
SendBuffer[42] = 0x13;
SendBuffer[43] = 0x00;
SendBuffer[44] = 0x00;
SendBuffer[45] = 0x00;

//13.素材开始格式标志
SendBuffer[46] = 0x55;
SendBuffer[47] = 0xAA;

//14.固定
SendBuffer[48] = 0x00;
SendBuffer[49] = 0x00;

SendBuffer[50] = 0x37;
SendBuffer[51] = 0x31;

SendBuffer[52] = 0x31; //刷新本区域

//与素材内容属性段配合的12个字节:
SendBuffer[53] = 0x31;
//15.示屏像素色彩:0x31:单基色,0x32:双基色
SendBuffer[54] = 0x32;

//16.固定
SendBuffer[55] = 0x31;
SendBuffer[56] = 0x00;
SendBuffer[57] = 0x00;

//17.长度 64
//SendBuffer[58] =(Byte)( Width % 256);
//SendBuffer[59] =(Byte)( Width / 256);
SendBuffer[58] = 0x08;
SendBuffer[59] = 0x00;

//18.高度 16
//SendBuffer[60] = (Byte)(Height % 256);
//SendBuffer[61] = (Byte)(Height/ 256);
SendBuffer[60] = 0x10;
SendBuffer[61] = 0x00;

//19.字符颜色
SendBuffer[62] =0x01;

//20.字符大小
SendBuffer[63] =0x11;

//21.固定
SendBuffer[64] = 0x00;

//22.发送字符串长度
StrLen = 10 + DataLen;
SendBuffer[68] = (Byte)(StrLen / (256 * 256 * 256));
StrLen = StrLen % (256 * 256 * 256);
SendBuffer[67] = (Byte)(StrLen / (256 * 256));
StrLen = StrLen % (256 * 256);
SendBuffer[66] = (Byte)(StrLen / 256);
StrLen = StrLen % 256;
SendBuffer[65] =(Byte) (StrLen);

//23.字符串数据
for (int i = 0; i < DataLen; i++)
SendBuffer[69 + i ] = Str[i];

 

//24.传送控制
SendBuffer[69 + DataLen] = 0xFF;
SendBuffer[70 + DataLen] = 0x00;

//25.本次通讯发送文本素材的序号
SendBuffer[71 + DataLen] = 0x01;
SendBuffer[72 + DataLen] = 0x00;

//26.固定
SendBuffer[73 + DataLen] = 0x01;
SendBuffer[74 + DataLen] = 0x00;
SendBuffer[75 + DataLen] = 0x01;
SendBuffer[76 + DataLen] = 0x00;

SendBuffer[77 + DataLen] = 0x10;
SendBuffer[78 + DataLen] = 0x48;

//27.发送过程结束标记
SendBuffer[79 + DataLen] = 0x2D;
SendBuffer[80 + DataLen] = 0x31;
SendBuffer[81 + DataLen] = 0x2C;

//28.包尾
SendBuffer[82 + DataLen] = 0xFF;
SendBuffer[83 + DataLen] = 0xFF;

for (int i = 0; i < 84 + DataLen; i++)
SData[i] = SendBuffer[i];

return SData;
}

}
}

 

转载于:https://www.cnblogs.com/laowengdiaodayu/p/4032092.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值