请问按下面的通讯协议要求,通过delphi7的winsoctet该如何实现呢?(100)

Z

zjgu99

Unregistered / Unconfirmed
GUEST, unregistred user!
请教个问题------------- 请问按下面的通讯协议要求,通过delphi7的winsoctet该如何实现呢?系统工作方式描述: 客户端PC上的控制程序Client用于向检测站服务器端的Server程序传送数据。数据传输采用帧格式传递。格式如下: 帧起始符(1字节)+ 数据包长度(4字节)+ 数据包(可变长度字节)+ 数据包结束符(1字节)+ 帧校验符(1字节)+ 帧结束符(1字节)其中各部分的含义为:① 帧起始符 : 帧起始符有两种选择,若为#$02(即16进制数0x02所对应的字符,下同),则表示传递的是测试数据,若为#$03, 则表示传递的是位置信息。② 数据包长度: 数据包长度为4字符长度,如长度为40个字节则用“0040”表示。③ 数据包: 数据包分两类,一类为位置信息,它的格式为: 当前触发位址(1字节)+设备号(16字节)+该设备测试次数(2字节) 其中当前触发位址字符为‘1’、‘2’、‘3’、‘4’、‘5’。 如果只有四个位置,则最大数字字符为‘5’,依次类推。 另一类为测试数据打包串。④ 数据结束符 固定为:#$17⑤ 帧校验符:STX^…^ETB checksum=帧起始符xor…xor数据包结束符。即数据包结束符及以前所有单字节的异或和。如果checksum等于#$0 或 ‘$’,则将checksum替换为#$18。⑥ 帧结束符。 固定为:‘$‘
 
我来学习的
 
具体情况具体分析:SOCKET可以传送字符串,你把整个帧按照你规定的格式整成一个字符串传过去,然后解析就行了。如#$020004aaaa#$17STX^…^ETB$
 
你这个帧其实就是字符串我记得Socket有sendText之类的函数的,直接调就可以了
 
数据帧都有起始位和停止位,怎么发送怎么接收,主要是看下位机。
 
先谢谢各位了,我按照上面的思路处理了之后,服务端接收的时候报“数据校验错”,是怎么回事呢?
 
你的校验函数有问题吧?校验是从第一字节开始,一直到倒数第三字节止。。
 
你获取的可能是一半的帧,每次你接受过得数据把它给导出来,看看是否和发送的时候一样。
 
用记录体发出去不就行了,也不用效验了
 

Similar threads

S
回复
0
查看
961
SUNSTONE的Delphi笔记
S
S
回复
0
查看
784
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
顶部