有点麻烦的问题,请帮忙看看

skycaop 2007-08-15 04:22:15
我编写的客户端通过TCP/IP抓取到服务器发送的数据包,现在我的问题是,我要如何去解码这个数据包?目前我知道的对数据包的定义如下
DWORD wFlag; //四字节数据包头标志 0x67FDFDFD
BYTE iCtrlType; //控制码
//D7....D0 D7=0表示下行(上位机->下位机) =1则相反
//D6...D0
const int ACT = 0; //激活连接,主要任务是保持连接,以免被控制系统强行断开。---
const int DEVICE_PARAM = 1; //召唤设备参数----
const int CALL_ALL = 2; //召唤所有实时数据----
const int YKCMD = 3; //遥控命令
const int GET_TIME = 4; //读系统时间
const int SET_TIME = 5; //设置系统时间
const int RESET = 6; //复位系统
const int GET_INFO = 7; //取信息
const int GET_YC_HIST = 8; //取模拟量历史数据
const int GET_YX_HIST = 9; //取状态量历史数据
const int SET_GJG_PARAM = 10; //设置工具柜参数
const int GET_GJG_PARAM = 11; //读工具柜参数
const int GET_PASSWORD = 12; //读密码
const int SET_PASSWORD = 13; //设置密码
const int GET_NAME = 14; //读单位名称
const int SET_NAME = 15; //设置单位名称
const int GET_NET = 16; //读网络参数
const int SET_NET = 17; //设置网络参数
const int GET_COM = 18; //读COM参数(发送间隔、超时)
const int SET_COM = 19; //设置COM参数(发送间隔、超时)
const int START_TRAN = 20; //启动变化数据自动传输----
const int STOP_TRAN = 21; //停止变化数据自动传输
const int GET_DX24 = 22; //读24位地线
const int SET_DX24 = 23; //设24位地线
const int START_CODE = 30; //启动发收码显示
const int STOP_CODE = 31; //停止发收码显示
WORD wPacketLength; //数据包长度(后面数据字节数,不含本数据)0

***************************
//获取设备配置参数(上行)
WORD wSumDeviceSize;//设备总个数
WORD wDeviceSize; //此包报文的设备个数

/////////
BYTE iPortNo; //通讯端口号---
BYTE iGjgNo; //所属工具柜号----
BYTE iType; //设备类型:1 - B型控制器; 10 - 24位地线状态控制器; 11 - 32地线状态控制器; 12 - 64地线状态控制器-----
WORD iHostAddr; //设备地址----
BYTE iYCDataSize; //YC数据个数
BYTE iYXDataSize; //YX数据个数----

WORD iYXFun; //遥信的功能----
WORD iYKFun; //遥控的功能
SHORT iYKYXNo; //YK对应的YX号 -1 表示无对应
BYTE iNameSize; //名称字节数-----
char *sName; //YX名称-----
......
WORD iYXFun; //遥信的功能
WORD iYKFun; //遥控的功能
SHORT iYKYXNo; //YK对应的YX号 -1 表示无对应
BYTE iNameSize; //名称字节数
char *sName; //YX名称
/////////
.....
////////

////////
//获取设备配置参数(上行)

//实时数据格式(上行)
WORD wDeviceSize; //设备个数

//第1个设备
BYTE iPortNo; //通讯端口号
BYTE iGjgNo; //所属工具柜号
BYTE iType; //设备类型:1 - B型控制器; 10 - 24位地线状态控制器; 11 - 32地线状态控制器; 12 - 64地线状态控制器
WORD iHostAddr; //设备地址
BYTE iYCDataSize; //YC数据个数
BYTE iYXDataSize; //YX数据个数
BYTE iStatus; //通讯状态 =状态常量
float * fYCData; //YC数据缓冲区 = ERRDATA 表示无效数据
BYTE * iYXData; //YX数据缓冲区 = 0 或 1 为有效数据(分、合) ,其它为无效数据
BYTE * iEnableDX; //是否放置接地线
......
//第n个设备
BYTE iPortNo; //通讯端口号
BYTE iGjgNo; //所属工具柜号
BYTE iType; //设备类型:1 - B型控制器; 10 - 24位地线状态控制器; 11 - 32地线状态控制器; 12 - 64地线状态控制器
WORD iHostAddr; //设备地址
BYTE iStatus; //通讯状态 =状态常量
BYTE iYCDataSize; //YC数据个数
BYTE iYXDataSize; //YX数据个数
float * fYCData; //YC数据缓冲区 = ERRDATA 表示无效数据
BYTE * iYXData; //YX数据缓冲区 = 0 或 1 为有效数据(分、合) ,其它为无效数据
BYTE * iEnableDX; //是否放置接地线
//实时数据格式(上行)
*/
...全文
181 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
skycaop 2007-08-15
  • 打赏
  • 举报
回复
现在是可以接收,而且我也知道是FD FD FD 67判断数组头,现在问题在于,比如说如何从FD FD FD 67 81 F0 00 06 00 01 00 01 01 0A 73 00 00 18 00 00 。。。这些数据中分析出哪段是设备总个数,哪段是通讯端口号---哪段是//所属工具柜号----,现在感觉没有一点头绪
wds 2007-08-15
  • 打赏
  • 举报
回复

1、你的数据是可以正常接收,不能解析?

2、还是连接收程序也没有实现?

如果已经实现接收,临时数据可以保存在符数组中,可以用标志 FD FD FD 67判断数组的头和尾,之后当字符串处理即可。

如果还没有实现接收,那么需要利用winsock 控件实现TCP/IP的通信接收。




skycaop 2007-08-15
  • 打赏
  • 举报
回复

获得包的数据如下


FD FD FD 67 81 F0 00 06 00 01 00 01 01 0A 73 00 00 18 00 00
00 00 00 00 01 31 00 00 00 00 00 00 01 32 00 00 00 00 00 00
01 33 00 00 00 00 00 00 01 34 00 00 00 00 00 00 01 35 00 00
00 00 00 00 01 36 00 00 00 00 00 00 01 37 00 00 00 00 00 00
01 38 00 00 00 00 00 00 01 39 00 00 00 00 00 00 02 31 30 00
00 00 00 00 00 02 31 31 00 00 00 00 00 00 02 31 32 00 00 00
00 00 00 02 31 33 00 00 00 00 00 00 02 31 34 00 00 00 00 00
00 02 31 35 00 00 00 00 00 00 02 31 36 00 00 00 00 00 00 02
31 37 00 00 00 00 00 00 02 31 38 00 00 00 00 00 00 02 31 39
00 00 00 00 00 00 02 32 30 00 00 00 00 00 00 02 32 31 00 00
00 00 00 00 0C BD D3 B5 D8 CF DF 32 31 D7 B4 CC AC 00 00 00
00 00 00 04 B1 A3 C1 F4 00 00 00 00 00 00 0C BD D3 B5 D8 CF
DF 32 33 D7 B4 CC AC FD FD FD 67 81 57 00 06 00 01 00 01 01
01 3A 00 04 08 01 00 01 00 00 00 04 BC D3 C8 C8 02 00 02 00
01 00 04 B3 FD CA AA 03 00 03 00 02 00 04 D7 D4 B6 AF 04 00
04 00 03 00 04 D4 BD CF DE 05 00 05 00 04 00 04 CD A8 B7 E7
00 00 00 00 05 00 00 00 00 00 00 06 00 00 00 00 00 00 07 00
00 FD FD FD 67 81 57 00 06 00 01 00 01 01 01 03 00 04 08 01
00 01 00 00 00 04 BC D3 C8 C8 02 00 02 00 01 00 04 B3 FD CA
AA 03 00 03 00 02 00 04 D7 D4 B6 AF 04 00 04 00 03 00 04 D4
BD CF DE 05 00 05 00 04 00 04 CD A8 B7 E7 00 00 00 00 05 00
00 00 00 00 00 06 00 00 00 00 00 00 07 00 00 FD FD FD 67 81
C9 01 06 00 01 00 01 01 0A 04 00 00 18 65 00 65 00 00 00 0B
BD D3 B5 D8 CF DF 30 D7 B4 CC AC 65 00 65 00 01 00 0B BD D3
B5 D8 CF DF 31 D7 B4 CC AC 65 00 65 00 02 00 0B BD D3 B5 D8
CF DF 32 D7 B4 CC AC 65 00 65 00 03 00 0B BD D3 B5 D8 CF DF
33 D7 B4 CC AC 65 00 65 00 04 00 0B BD D3 B5 D8 CF DF 34 D7
B4 CC AC 65 00 65 00 05 00 0B BD D3 B5 D8 CF DF 35 D7 B4 CC
AC 65 00 65 00 06 00 0B BD D3 B5 D8 CF DF 36 D7 B4 CC AC 65
00 65 00 07 00 0B BD D3 B5 D8 CF DF 37 D7 B4 CC AC 65 00 65
00 08 00 0B BD D3 B5 D8 CF DF 38 D7 B4 CC AC 65 00 65 00 09
00 0B BD D3 B5 D8 CF DF 39 D7 B4 CC AC 65 00 65 00 0A 00 0C
BD D3 B5 D8 CF DF 31 30 D7 B4 CC AC 65 00 65 00 0B 00 0C BD
D3 B5 D8 CF DF 31 31 D7 B4 CC AC 65 00 65 00 0C 00 0C BD D3
B5 D8 CF DF 31 32 D7 B4 CC AC 65 00 65 00 0D 00 0C BD D3 B5
D8 CF DF 31 33 D7 B4 CC AC 65 00 65 00 0E 00 0C BD D3 B5 D8
CF DF 31 34 D7 B4 CC AC 65 00 65 00 0F 00 0C BD D3 B5 D8 CF
DF 31 35 D7 B4 CC AC 65 00 65 00 10 00 0C BD D3 B5 D8 CF DF
31 36 D7 B4 CC AC 65 00 65 00 11 00 0C BD D3 B5 D8 CF DF 31
37 D7 B4 CC AC 65 00 65 00 12 00 0C BD D3 B5 D8 CF DF 31 38
D7 B4 CC AC 65 00 65 00 13 00 0C BD D3 B5 D8 CF DF 31 39 D7
B4 CC AC 65 00 65 00 14 00 0C BD D3 B5 D8 CF DF 32 30 D7 B4
CC AC 65 00 65 00 15 00 0C BD D3 B5 D8 CF DF 32 31 D7 B4 CC
AC 65 00 65 00 16 00 0C BD D3 B5 D8 CF DF 32 32 D7 B4 CC AC
65 00 65 00 17 00 0C BD D3 B5 D8 CF DF 32 33 D7 B4 CC AC FD
FD FD 67 81 C9 01 06 00 01 00 01 01 0A 05 00 00 18 65 00 65
00 00 00 0B BD D3 B5 D8 CF DF 30 D7 B4 CC AC 65 00 65 00 01
00 0B BD D3 B5 D8 CF DF 31 D7 B4 CC AC 65 00 65 00 02 00 0B
BD D3 B5 D8 CF DF 32 D7 B4 CC AC 65 00 65 00 03 00 0B BD D3
B5 D8 CF DF 33 D7 B4 CC AC 65 00 65 00 04 00 0B BD D3 B5 D8
CF DF 34 D7 B4 CC AC 65 00 65 00 05 00 0B BD D3 B5 D8 CF DF
35 D7 B4 CC AC 65 00 65 00 06 00 0B BD D3 B5 D8 CF DF 36 D7
B4 CC AC 65 00 65 00 07 00 0B BD D3 B5 D8 CF DF 37 D7 B4 CC
AC 65 00 65 00 08 00 0B BD D3 B5 D8 CF DF 38 D7 B4 CC AC 65
00 65 00 09 00 0B BD D3 B5 D8 CF DF 39 D7 B4 CC AC 65 00 65
00 0A 00 0C BD D3 B5 D8 CF DF 31 30 D7 B4 CC AC 65 00 65 00
0B 00 0C BD D3 B5 D8 CF DF 31 31 D7 B4 CC AC 65 00 65 00 0C
00 0C BD D3 B5 D8 CF DF 31 32 D7 B4 CC AC 65 00 65 00 0D 00
0C BD D3 B5 D8 CF DF 31 33 D7 B4 CC AC 65 00 65 00 0E 00 0C
BD D3 B5 D8 CF DF 31 34 D7 B4 CC AC 65 00 65 00 0F 00 0C BD
D3 B5 D8 CF DF 31 35 D7 B4 CC AC 65 00 65 00 10 00 0C BD D3
B5 D8 CF DF 31 36 D7 B4 CC AC 65 00 65 00 11 00 0C BD D3 B5
D8 CF DF 31 37 D7 B4 CC AC 65 00 65 00 12 00 0C BD D3 B5 D8
CF DF 31 38 D7 B4 CC AC 65 00 65 00 13 00 0C BD D3 B5 D8 CF
DF 31 39 D7 B4 CC AC 65 00 65 00 14 00 0C BD D3 B5 D8 CF DF
32 30 D7 B4 CC AC 65 00 65 00 15 00 0C BD D3 B5 D8 CF DF 32
31 D7 B4 CC AC 65 00 65 00 16 00 0C BD D3 B5 D8 CF DF 32 32
D7 B4 CC AC 65 00 65 00 17 00 0C BD D3 B5 D8 CF DF 32 33 D7
B4 CC AC FD FD FD 67 81 57 00 06 00 01 00 01 02 01 4E 00 04
08 01 00 01 00 00 00 04 BC D3 C8 C8 02 00 02 00 01 00 04 B3
FD CA AA 03 00 03 00 02 00 04 D7 D4 B6 AF 04 00 04 00 03 00
04 D4 BD CF DE 05 00 05 00 04 00 04 CD A8 B7 E7 00 00 00 00
05 00 00 00 00 00 00 06 00 00 00 00 00 00 07 00 00

1,502

社区成员

发帖
与我相关
我的任务
社区描述
VB 网络编程
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧