今天发现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吗??

解决方案 »

  1.   

    buf:=athread.connection.readstring(4);
    ===========
    这会告诉Indy,数据是4个字节为一个包,所以到了4个字节就返回,然后继续读剩下的数据。
      

  2.   

    这不奇怪啊,buf:=athread.connection.readstring(4);表示线程度到4个字节后给到buf
    然后再读4个字节给buf,所以会连续两次form1.memo1.lines.add(buf);
      

  3.   

    idtcpserver接收到的数据保存在缓冲区了,你的12345678在缓冲区里你一次读4,正好两次读完