通信转发软件如何实现?(200分)

  • 主题发起人 主题发起人 smsman
  • 开始时间 开始时间
S

smsman

Unregistered / Unconfirmed
GUEST, unregistred user!
动换监控中原有的TCP通讯现在要借助一小灵通系统RNMS的线路,要通过这个系统必须在发送的数据中加上rnms的控制信息,所有的消息都是16进制的。而且要做分包不能超过200B。要根据这个做一个转发软件。各位大侠能不能给点提示,小弟是刚接触DELPHI,对这方面的开发实在是很差,能否帮帮忙给点提示呢。工程实在很急。
 
那位大侠能帮帮忙啊。如何实现转发呢?头痛啊。第一次接触此类的编程。
 
你应该对180b的数据有分析协议吧,根据协议拆包组装即可.
1. 顺序组包发送.
a. 1节,包头数据类型标识(加密,文本,数据流);
b. 8节,包的流水号(以防重发);
c. 1节,写入0表示完整一包,其它表示不完整,并代表后面的多少份之几(n/x) 之类的
长度;如果完整直接进行d,写入数据长度,否则写入组头长度Length(n/x),组头内
容(n/x)。
d. 4节,写入真正的数据的长度。
2. 顺序拆包分析
a. 1节,读取包头数据类型标识(加密,文本,数据流);
b. 8节,读取包的流水号(比较以防重发);
c. 1节,0表示完整一包,其它表示不完整,并代表后面的多少份之几(n/x) 之类的长度;
如果完整直接进行d,读取数据长度,否则读取组头长度Length(n/x),组头内容(n/x)。
d. 4节,真正的数据的长度
 
定义一个结构吧。比如顶一个包头
TPackHead = record
Size: LongInt;
SortID: LongInt;
end;
后面可以使你的数据包。以字节流来做吧。
 
谢谢两位的帮助,这个方法了解了,先临时各加30分,不过我的水平比较菜的,我想了解能否Winsock的Nagle算法达到数据报的自动分为较小的包,这也是我今天刚想到的,这个方法能否用indy来实现呢,或者用其他的方法?因为现在的程序是使用D7+indy9.11写的,最好能在indy 中实现。
我记得好像Nagle算法将较大的包分为1046,而我想将它设的再小一点。上面我表达错了,是限制在180以内,不好意思。
 
挺感兴趣的,帮你顶下
 
谢谢,问题已解决,放分jfyes,crazyman2006。尤其感谢jfyes,讲的很详细,
jfyes 110 ,crazyman2006 90
 
后退
顶部