关于 通讯(串口、tcp/ip、udp)接收方式的讨论(50分)

  • 主题发起人 主题发起人 zrx_jyp
  • 开始时间 开始时间
Z

zrx_jyp

Unregistered / Unconfirmed
GUEST, unregistred user!
关于通讯方面的原代码网上有很多,其中以“串口调试助手”比较
的有名,它无非是当命令发送出去后,让返回信息促发 onreceive事件,
把返回的信息显示出来。这是是一种很典型的应用,它适合于调试的环境,
而且效率很高。
但我们知道,还有一种方式就是“查询方式”,这种方式的特点就是控制简单,
但效率低。

我们的程序一般都是在自动运行,不可能知道命令发出后什么时候有信息返回,然后再发底二条
特别是当有多条命令需要安顺序发送时,如果按第一种方式通讯,相当不好控制
而用第二种方式发送,效率却很低下,而且它不能接受主动的上传信息。

我想对于上面的问题,大家已经有了很好的解决方案,能否赐教!!!!!

比方说:我有一个命令队列 命令(1)-> 命令(2) ->命令(3)

只有当命令(1)发出后,并且得到正确的应答才能发命令(2),否则
应该重发命令(1),依次类推,我如何选用第一种方式进行通讯,要知道用第一种方式的
优点是很多的!!!
 
用一个队列吧,将几个命令放入队列,在得到正确的回应后就将队列中的命令1D掉,如果
没有,继续发放队列中的第一个命令
 
>还有一种方式就是“查询方式”,这种方式的特点就是控制简单,
>但效率低
不明白。

我看过一些交换机的程序,无非是使用有限状态机来处理通讯过程。
我想你的可以这样:
设置在3个命令发出后的状态,在设置改变状态的消息:
设置一个定时器,定时检查:(呵呵,是你说的第二中方法)
case Staute
idle:wait;
prepare:send command1;
successCommand1:send command2
failCommand1:status = prepare;
successCommand2 .....
if receivebuf <> nil
changeStaute(receivebuf) //根据接收缓存的信息改变状态机的状态
程控交换机每2ms检查一次,好像也能应付。
希望对你有所帮助
 
我现在的情况是这样的:

我要开发一个网络的通讯程序,该程序能 同 远方 n 个具有主动上传和有被动应答功能的
硬件进行通讯。
那么该程序肯定要是多线程的方式,我想用 tclientsocket、Tserversocket 组件,
通讯方式如上所说。

有人说 Tserversocket 本身具有多线程的功能,如何理解?

如果采用 tclientsocket + Tserversocket 的方式,我如何知道我刚发出的命令有
正确返回。

那里有源码?
 
我建议用TClientSocket加TIdTCPServer方式最好,前者用异步,后者用线程池,开发速度快
 
无忌兄:

能否详细一点;
 
:有人说 Tserversocket 本身具有多线程的功能,如何理解?

ServerSocket有一个Connections属性,是所有连接上来的ClientSocket,
而ServerSocket如何侦听端口,ClientSocket如何连接上来、各个ClientSocket
的数据如何收发、互不干扰,都是由ServerSocket中的多线程机制来协调的,开发者可以
不用去管。
 
多人接受答案了。
 
后退
顶部