INDY中的idtcpclient如果server端有数据过来怎么响应?(100分)

  • 主题发起人 主题发起人 whm
  • 开始时间 开始时间
W

whm

Unregistered / Unconfirmed
GUEST, unregistred user!
我在INDY的DEMO中看CHAT例子是用TIME控件触发的,就是每隔半秒读一次,如果有
就接受,这样如果客户端很多会太占用资源。
是不是应该有一个自动触发的事件?还是它本身就是这么封装的?
听说用DELPHI 6 本身的TCPSERVER、TCPCLIENT不能连太多客户端(几十个)?
请高手解惑
 
他本身就是这样封装,ICS不错,用TClientSocket和TServerSocket来做比较好
 
ICS现在好像没有更新了,我在网上查最新的也是FOR D6的
FOR D5的适用吗?
 
最新的ICS控件包理由FOR D5 的DPK包!
 
不用这么麻烦,你用一个
repeat
str:=tcpclient.currentreadbuffer;
......
处理str
.....
until tcpclient.disconnect;
就行了,这样做的问题是,如果服务器不给你数据,程序可能会一直等待,所以,做成一根线程一切就OK了。

要是不想做线程,就只要在form上面放一个tidantifreeze对象,放上去就行,就能解决问题了。不过用这个方法,在等待的时候,会有点迟钝。
 
indy本身就有这样的机制。
如它的ReadLn函数。你可以设置超时时间。
 
hehe,indy的timeout不是这个概念,我用了很长时间的indy了,哪个timeout不起作用的
 
to DNChen:
不起作用?我可是每次都是正常。不信,indy的demo有个BasicClientServer目录。
如果你把ServerMain.pas中的WriteLn('Hello from Basic Indy Server server.');
这一句去掉,client端将永远等待。
你再将ClientMain.pas中的lstMain.Items.Add(TCPClient.ReadLn);改成
lstMain.Items.Add(TCPClient.ReadLn('',5*1000));它将在5秒后返回。
 
是吗?可是我这里怎么用都不返回,我用的是indy9
 
我是D6自带的。
 
多人接受答案了。
 
后退
顶部