问个 Indy TIdTcpserver很奇怪很奇怪的问题。 ( 积分: 10 )

  • 主题发起人 主题发起人 mill666
  • 开始时间 开始时间
M

mill666

Unregistered / Unconfirmed
GUEST, unregistred user!
今天发现Indy TIdTcpserver的一个很奇怪问题啊:
比如说客户端发送了如下的字符串:1234567890
然后我在Indy TIdTcpserver的Execute事件里面只读取4个字符法:
buf:string;
buf:=athread.connection.readstring(4);
form1.memo1.lines.add(buf);

这个时候你会发现form1.memo1里面显示了:
1234
5678

好像读了2次的感觉啊【剩下的两个90估计是没有达到4个字符,TIdTcpserver估计在那里使劲等待了】;

我想分步骤读取的,它怎么一下子给读出来了;

为什么会读出这么多啊??按理说我只读取4个字符啊,readstring(4)的啊。

我用的是delphi 7里面自带的Indy,估计是indy 9吗??
 
OnExecute是在线程中循环调用的!会不停的由Indy内部的Yarn对象反复调用,所以OnExecute会重复触发。
 
To zqw0117:

我程序里面需要分步读取数据的,请问要怎么做啊??
就是说,客户送信息上来后,我需要首先取出前面几位的,然后 进行处理,根据处理的结果再读取剩余的数据;

请问怎么达到这个目的呢??
 
OnExecute里面写
begin
buf:=athread.connection.readstring(4); //读4个字节
if buf = 'xxxx' then
Data := AThread.Connection.ReadString(长度)
else if buf = 'xxxx' then
Data := AThread.Connection.ReadString(长度)
end;
以此类推.即可。
 
后退
顶部