数据包格式按照招标书要求,参考业界惯用的标准,采用TLV形式。
T(type )字段表示数据包类型,传输中定义为short类型;L(length)字段表示数据包长度(不包括类型和长度字段本身),传输中定义为long类型。T和L共同组成包头;V(value )表示数据包信息。Type占2字节
length占4字节
value为一个结构typedef struct Type_Struct_Frt_Vhc_Data
{
long bid; //
char xxkbm[8]; //
char dkqbm[8]; //
char cphm[12]; //
char cpys; //
char clpp[4]; //
char csys[3]; //
char fdjh[16]; //
char sd[4]; //
short cdh; //
long sbsj[16]; //
char sfhbc; //
char xcnjsj[16]; //
char bcbz; //
} Type_Struct_Frt_Vhc_Data;
包前后端分别加#和$做为包头和尾
服务端是C#
客户端是C/C++
请问有哪位大大能给个例子什么的让参考参考
主要是想知道服务端接到信息后如何处理粘包,解包并组包返回信息
T(type )字段表示数据包类型,传输中定义为short类型;L(length)字段表示数据包长度(不包括类型和长度字段本身),传输中定义为long类型。T和L共同组成包头;V(value )表示数据包信息。Type占2字节
length占4字节
value为一个结构typedef struct Type_Struct_Frt_Vhc_Data
{
long bid; //
char xxkbm[8]; //
char dkqbm[8]; //
char cphm[12]; //
char cpys; //
char clpp[4]; //
char csys[3]; //
char fdjh[16]; //
char sd[4]; //
short cdh; //
long sbsj[16]; //
char sfhbc; //
char xcnjsj[16]; //
char bcbz; //
} Type_Struct_Frt_Vhc_Data;
包前后端分别加#和$做为包头和尾
服务端是C#
客户端是C/C++
请问有哪位大大能给个例子什么的让参考参考
主要是想知道服务端接到信息后如何处理粘包,解包并组包返回信息
解决方案 »
- 一个正则的问题。。。。。。。
- C# 向datagridview 列中的 combobox 添加选项 哪位高手知道?
- 一行代码看不明白,老师进来讲讲,谢谢了。
- 为什么扫描的图片保存在SQL的IMG字段太大溢出,而其他比它大的图片就能保存成功(2个格式都是JPG).........
- windows服务与桌面交互的问题
- 编码显示很多textbox,并将内容读入数组
- 请问是否可以在子类中有选择地继承父类中的某个成员,而使其他成员隐藏
- 我的程序是生成.ini的方法保存用户的帐号,我不想让用户打开.ini就可以看到密码,我要是加密密码,我提取的时候又解不了,帮忙想个办法!
- 哪位大虾有办法在修改DataGrid,让它也支持Combox?高分相赠!
- 帮忙把我的方法转成泛型方法
- 高分求救!----C#读取二进制到结构体和C++的不同
- Mysql数据导入sqlserver问题
传输的是BYTE数组,SOCKET通讯的好处是同步的,适合于实时通讯系统
static public Byte[] headpack(char head)
{
return BitConverter.GetBytes(head);
}
再用typepack返回一个2字节长度的type的byte[]
static public Byte[] typepack(int type)
{
return BitConverter.GetBytes(type);
}
再用lengthpack返回一个4字节长度的length的byte[]
static public Byte[] lengthpack(int length)
{
return BitConverter.GetBytes(length);
}
再用StructToBytes将结构体转换成byte[]
public static byte[] StructToBytes(object structObj)
{
int size = Marshal.SizeOf(structObj);
byte[] bytes = new byte[size];
IntPtr structPtr = Marshal.AllocHGlobal(size);
Marshal.StructureToPtr(structObj, structPtr, false);
Marshal.Copy(structPtr, bytes, 0, size);
Marshal.FreeHGlobal(structPtr);
return bytes;
}
最后把这些byte[]按顺序 #+Type+length+Type_Struct_Frt_Vhc_Data+$组合成一个新的byte[]
再发送过去?
如果你用现成的库发UDP包,而且你的组包是组的UDP包的data部分,那么不管你怎么组,只要不越界,总是能发出去的
而组包和解包实际是byte数组或者字符串的处理如果是MAC帧,哼哼,考虑的东西就多喽
多很多帧头和至少一个帧尾而如果你说的那些数据是一个数据包data部分的全部数据,那么其实不需要在头和尾上加标示