Indy TCP/IP 组件里的几个常用方法
生活随笔
收集整理的這篇文章主要介紹了
Indy TCP/IP 组件里的几个常用方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
其實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的不同在于它讀取指定長度的字符串
? ?
? 比方說這個讀取緩沖區的數據,就有很多種方法。相對于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的不同在于它讀取指定長度的字符串
總結
以上是生活随笔為你收集整理的Indy TCP/IP 组件里的几个常用方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Desktop no head
- 下一篇: Google Chrome浏览器调试入门