Indy相关函数用法

比方说这个读取缓冲区的数据,就有很多种方法。相对于TTcpClient的几种方法来说,TIdTCPClient确实提供了多种选择,不仔细研究真的容易糊涂(其实我比较喜欢用CurrentReadBuffer):
  
  1、ReadFromStack
  原型:function ReadFromStack(const ARaiseExceptionIfDisconnected: boolean; const ATimeout: integer; const AUseBuffer: boolean; ADestStream: TIdBuffer): integer; virtual;
  用于判断缓冲区里是否还有数据可读,返回值:Integer - Number of bytes read.
  
  2、CurrentReadBuffer
  原型:function CurrentReadBuffer: string;
  用于读取Socket数据到缓冲区,注意返回为String类型,如果直接显示该String的数据,对于\0之后的数据可能看不到,因此要读取所有的数据,还必须利用CurrentReadBufferSize()判断该String的长度。
  返回值:String - Contents of the Indy buffer.
  
  3、GetResponse
  原型:function GetResponse(const AAllowedResponses: Array of SmallInt): SmallInt; virtual;
  对于简单的命令应答可以使用这个方法获取应答消息,返回值:SmallInt - The numeric response number.
  
  4、ReadBuffer
  原型:procedure ReadBuffer(var ABuffer; const AByteCount: Longint);
  读取指定数目的字节到缓冲区ABuffer,注意它会调用 ReadFromStack 以检查缓冲区里的数据是否少于AByteCount
  
  5、ReadInteger
  原型:function ReadInteger(const AConvert: boolean): Integer;
  从缓冲区中读取整型数据,它会调用ReadBuffer
  
  6、ReadLn
  原型:function ReadLn(const ATerminator: string; const ATimeout: integer): string; virtual;
  读取移行记录,带有一个TimeOut属性,以防止在读不到新行时死循环。返回值:String - Line read from the buffer.
  注意行分隔符可能是以下几种:
  #0 - Default Line Feed (#10)
  LF - Line Feed (#10)
  CR - Carriage Return (#13)
  EOL - End-of-line (Carriage Return + Line Feed)
  
  7、ReadLnWait:
  原型:function ReadLnWait: string;
  很像ReadLn,但它会一直傻傻的等待
  
  8、ReadSmallInt
  原型:function ReadSmallInt(const AConvert: boolean): SmallInt;
  
  9、ReadStream
  原型:procedure ReadStream(AStream: TStream; AByteCount: LongInt; const AReadUntilDisconnect: boolean);
  
  10、ReadString
  原型:function ReadString(const ABytes: integer): string;
  与CurrentReadBuffer的不同在于它读取指定长度的字符串   
procedure  TReadThread.Execute;
  
var  i:integer;
  s:
string ;
  
begin
  
try
  
while  (Terminated = false)  and  (IdTCPClient1.Connected = true)  do
  
begin
  i:
= IdTCPClient1.ReadFromStack();  // 检查是否需要读取数据
  
if  i > 0   then
  
begin
  s:
= IdTCPClient1.ReadString(i); // 读取数据
  
end ;
  SleepEx(
100 ,true);
  
end // loop
  
except
  
end ;
  
end ;
出处:http://blog.nnsky.com/blog_view_17131.html

转载于:https://www.cnblogs.com/Handll/archive/2009/07/27/1531964.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值