请教indy(IdTCPClient与IdTCPServer)通讯 ( 积分: 200 )

  • 主题发起人 主题发起人 gang18
  • 开始时间 开始时间
G

gang18

Unregistered / Unconfirmed
GUEST, unregistred user!
请教各位,用IdTCPClient和IdTCPServer做的适时通讯程序,应该怎么处理比较合适啊?

1、我在IdTCPClient的execute里面读取接收到的数据,可是当IdTCPClient连接connect之后,cpu占用100%,
execute在不停的执行读取数据的操作,请问应该怎么处理啊?

2、我应该在IdTCPClient里面怎么读取IdTCPServer发给来的数据?

注意,客户端要保持长连接状态,适时发送数据。
 
请教各位,用IdTCPClient和IdTCPServer做的适时通讯程序,应该怎么处理比较合适啊?

1、我在IdTCPClient的execute里面读取接收到的数据,可是当IdTCPClient连接connect之后,cpu占用100%,
execute在不停的执行读取数据的操作,请问应该怎么处理啊?

2、我应该在IdTCPClient里面怎么读取IdTCPServer发给来的数据?

注意,客户端要保持长连接状态,适时发送数据。
 
我这么用没有问题
procedure TForm1.TCPServerExecute(AThread: TIdPeerThread);
var i,j:integer;
s,ss:string;
begin
j:=AThread.Connection.ReadFromStack;
if j=0 then exit;
ss:=AThread.Connection.ReadString(j);
//数据处理..................
end
 
procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);//Indy 10
var i:integer;
FRecvBuffer:TBytes;
s:string;
begin
SleepEx(100,true); //加个这个,

i:=AContext.Connection.Socket.InputBuffer.Size ;
if i<1 then exit;
AContext.Connection.Socket.ReadBytes(FRecvBuffer,i,false);
setlength(s,i+1);
move(FRecvBuffer[0],s[1],i);
memo1.Lines.Add(AContext.Connection.Socket.Host+':'+s);
AContext.Connection.Socket.Write('OK!');

end;
 
参考INDY自带的例子,里面加了个线程控件。
 
不会吧
execute()是在接受到数据时才激发的事件。是不是别的地方有错啊
 
TIdTCPServer和TIdTCPClient之间的通讯必须是连接再断开才完成一次通信。
TIdTCPClient通过writebuffer等方法发送数据给TIdTCPServer,触发TIdTCPServer的OnExecute方法,这时你可以在这个方法里读取TIdTCPClient发来的数据,可以使用readbuffer方法或者currentreadbuffer等,然后再writebuffer方法返回给客户端信息,同样客户端再用readbuffer方法或者currentreadbuffer读取,但是最终要disconnect,因为这些指令在断开的时候才执行,只有即将断开的时候他们才知道你完成了这次通信
 

Similar threads

D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
875
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部