Indy相关函数用法
生活随笔
收集整理的這篇文章主要介紹了
Indy相关函数用法
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
比方說這個(gè)讀取緩沖區(qū)的數(shù)據(jù),就有很多種方法。相對(duì)于TTcpClient的幾種方法來說,TIdTCPClient確實(shí)提供了多種選擇,不仔細(xì)研究真的容易糊涂(其實(shí)我比較喜歡用CurrentReadBuffer):
1、ReadFromStack
原型:function ReadFromStack(const ARaiseExceptionIfDisconnected: boolean; const ATimeout: integer; const AUseBuffer: boolean; ADestStream: TIdBuffer): integer; virtual;
用于判斷緩沖區(qū)里是否還有數(shù)據(jù)可讀,返回值:Integer - Number of bytes read.
2、CurrentReadBuffer
原型:function CurrentReadBuffer: string;
用于讀取Socket數(shù)據(jù)到緩沖區(qū),注意返回為String類型,如果直接顯示該String的數(shù)據(jù),對(duì)于\0之后的數(shù)據(jù)可能看不到,因此要讀取所有的數(shù)據(jù),還必須利用CurrentReadBufferSize()判斷該String的長度。
返回值:String - Contents of the Indy buffer.
3、GetResponse
原型:function GetResponse(const AAllowedResponses: Array of SmallInt): SmallInt; virtual;
對(duì)于簡單的命令應(yīng)答可以使用這個(gè)方法獲取應(yīng)答消息,返回值:SmallInt - The numeric response number.
4、ReadBuffer
原型:procedure ReadBuffer(var ABuffer; const AByteCount: Longint);
讀取指定數(shù)目的字節(jié)到緩沖區(qū)ABuffer,注意它會(huì)調(diào)用 ReadFromStack 以檢查緩沖區(qū)里的數(shù)據(jù)是否少于AByteCount
5、ReadInteger
原型:function ReadInteger(const AConvert: boolean): Integer;
從緩沖區(qū)中讀取整型數(shù)據(jù),它會(huì)調(diào)用ReadBuffer
6、ReadLn
原型:function ReadLn(const ATerminator: string; const ATimeout: integer): string; virtual;
讀取移行記錄,帶有一個(gè)TimeOut屬性,以防止在讀不到新行時(shí)死循環(huán)。返回值: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,但它會(huì)一直傻傻的等待
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();?//檢查是否需要讀取數(shù)據(jù)
if?i>0?then
begin
s:=IdTCPClient1.ReadString(i);//讀取數(shù)據(jù)
end;
SleepEx(100,true);
end;?//loop
except
end;
end;
出處:http://blog.nnsky.com/blog_view_17131.html
1、ReadFromStack
原型:function ReadFromStack(const ARaiseExceptionIfDisconnected: boolean; const ATimeout: integer; const AUseBuffer: boolean; ADestStream: TIdBuffer): integer; virtual;
用于判斷緩沖區(qū)里是否還有數(shù)據(jù)可讀,返回值:Integer - Number of bytes read.
2、CurrentReadBuffer
原型:function CurrentReadBuffer: string;
用于讀取Socket數(shù)據(jù)到緩沖區(qū),注意返回為String類型,如果直接顯示該String的數(shù)據(jù),對(duì)于\0之后的數(shù)據(jù)可能看不到,因此要讀取所有的數(shù)據(jù),還必須利用CurrentReadBufferSize()判斷該String的長度。
返回值:String - Contents of the Indy buffer.
3、GetResponse
原型:function GetResponse(const AAllowedResponses: Array of SmallInt): SmallInt; virtual;
對(duì)于簡單的命令應(yīng)答可以使用這個(gè)方法獲取應(yīng)答消息,返回值:SmallInt - The numeric response number.
4、ReadBuffer
原型:procedure ReadBuffer(var ABuffer; const AByteCount: Longint);
讀取指定數(shù)目的字節(jié)到緩沖區(qū)ABuffer,注意它會(huì)調(diào)用 ReadFromStack 以檢查緩沖區(qū)里的數(shù)據(jù)是否少于AByteCount
5、ReadInteger
原型:function ReadInteger(const AConvert: boolean): Integer;
從緩沖區(qū)中讀取整型數(shù)據(jù),它會(huì)調(diào)用ReadBuffer
6、ReadLn
原型:function ReadLn(const ATerminator: string; const ATimeout: integer): string; virtual;
讀取移行記錄,帶有一個(gè)TimeOut屬性,以防止在讀不到新行時(shí)死循環(huán)。返回值: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,但它會(huì)一直傻傻的等待
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();?//檢查是否需要讀取數(shù)據(jù)
if?i>0?then
begin
s:=IdTCPClient1.ReadString(i);//讀取數(shù)據(jù)
end;
SleepEx(100,true);
end;?//loop
except
end;
end;
出處:http://blog.nnsky.com/blog_view_17131.html
轉(zhuǎn)載于:https://www.cnblogs.com/Handll/archive/2009/07/27/1531964.html
總結(jié)
以上是生活随笔為你收集整理的Indy相关函数用法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PYTHON单任务FTP断点续传程序
- 下一篇: C# 将系统时间转换成农历时间