TIdTCPClient 详解

2023-11-09 08:08
文章标签 详解 tidtcpclient

本文主要是介绍TIdTCPClient 详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

转发地址:http://blog.csdn.net/cowcga/article/details/6198382

关于TIdTCPClient的几种方法 收藏
其实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的不同在于它读取指定长度的字符串
IdTCPClient和IdTCPServer主要属性
2008-10-13 12:40
IdTCPClient属性
1 : IOHandler 如果有相应的输入/输出操作,那么IOHandler相对应的组件或
接口将提供一个虚拟/抽象的输入/输出接口给相应的网络连接
2 : Intercept 如果有一个网络连接正在使用,那么Intercept 提供的组件或接
口将可以拦截相应的网络数据流中的数据
3 : BoundIP 指定使用IdTCPClient组件的计算机系统的IP地址,也就是说,其
中是空白那么什么样的计算机都可以使用,但如果指定的IP地址为239.126.12.2,那么
就只有IP地址为239.126.12.2的计算机可以使用它.
4 : BoundPor 网络端口的概念,指定使用IdTCPClient组件的计算机系统网络
端口,也就是说,如果BoundPort中指定了以整数为端口的网络端口,那么通讯时就只能
使用这个商品进行通讯
5 : Host 如果不是使用BoundIP中的地址起先通讯,那么Host就是诣将
要通讯的计算机系统的名称或它的IP地址,可以是计算机名也可以是IP地址.
6 : Port 与BoundPort的概念是基本一样的,只是它与HOst相配合来决
定IdTCPClient组件要与哪一个计算机系统中的什么样的网络通讯端口进行通讯
方法
IdTCPClient 主要使
用Write,WriteBuffer,WriteCardinal,WriteFile,WriteHeader,WriteInteger,WriteL
n,WriteRFCReply,WriteRFCStrings,WriteSmallInt,WriteStream,WriteStrings.
通过它们 IdTCPClient 可以发送非常多的类型的数据到相应的服务端,而这些都是非
常的简单
如: Write的函数说明是:
procedure Write(Const Aout : String) ; Virtual;
它的目的很简单,就是发送一个字符串到相应的服务端.其中Aout就是被发送的字符串.
而 WriteLn的函数说明是:
procedure WriteLn(Const Aout : String = ''); Virtual;
它的目的就是在Write的基础上,在被发送的字符串后加入相应的回车控件符.
注意 : 虽然IdTCPClient可以直接使用,它不可以被单独的使用,它必须与相应
的IdTCPServer组件相配合才能发挥特定的作用,当然,如果相应的网络系统中具有这
样的TCP服务器应用,那么IdTCPClient也可以直接与它们进行通讯.
IdTCPServer
属性
1 : Bindings 包括了相应的服务端所允许的所有的Socket(套接字)的相关信
息,比如它们的IP地址和端口号
2 : ListenQueue 是规定在服务端失效之前最多可以允许的监听网络连接的纯种
数目.默认情况下它的值是15,但这个值可以根据自己的需要和系统的最大承受能力来
进行改变
3 : MaxConnects 它表示的内容就是服务端可以承载的最大的网络连接数目,如果
它的值是0,那么就表明它没有最大的限制值,可以使用任意数目的连接.
4 : MaxConnectionReply 与MaxConnects相配合,当连接数目大
于MaxConnects的数目时,它将返回一个错误的信息,而这个信息是由TIdRFCReply
类所定义的
5 : ThreadMgr 就是使用相应的 ThreadMgr 组件来对于网络连接线程进行管
理.

 

这篇关于TIdTCPClient 详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/374936

相关文章

pycharm远程连接服务器运行pytorch的过程详解

《pycharm远程连接服务器运行pytorch的过程详解》:本文主要介绍在Linux环境下使用Anaconda管理不同版本的Python环境,并通过PyCharm远程连接服务器来运行PyTorc... 目录linux部署pytorch背景介绍Anaconda安装Linux安装pytorch虚拟环境安装cu

一文详解如何在Python中使用Requests库

《一文详解如何在Python中使用Requests库》:本文主要介绍如何在Python中使用Requests库的相关资料,Requests库是Python中常用的第三方库,用于简化HTTP请求的发... 目录前言1. 安装Requests库2. 发起GET请求3. 发送带有查询参数的GET请求4. 发起PO

Python进行PDF文件拆分的示例详解

《Python进行PDF文件拆分的示例详解》在日常生活中,我们常常会遇到大型的PDF文件,难以发送,将PDF拆分成多个小文件是一个实用的解决方案,下面我们就来看看如何使用Python实现PDF文件拆分... 目录使用工具将PDF按页数拆分将PDF的每一页拆分为单独的文件将PDF按指定页数拆分根据页码范围拆分

Java中的Cursor使用详解

《Java中的Cursor使用详解》本文介绍了Java中的Cursor接口及其在大数据集处理中的优势,包括逐行读取、分页处理、流控制、动态改变查询、并发控制和减少网络流量等,感兴趣的朋友一起看看吧... 最近看代码,有一段代码涉及到Cursor,感觉写法挺有意思的。注意是Cursor,而不是Consumer

SpringBoot项目注入 traceId 追踪整个请求的日志链路(过程详解)

《SpringBoot项目注入traceId追踪整个请求的日志链路(过程详解)》本文介绍了如何在单体SpringBoot项目中通过手动实现过滤器或拦截器来注入traceId,以追踪整个请求的日志链... SpringBoot项目注入 traceId 来追踪整个请求的日志链路,有了 traceId, 我们在排

HTML5中下拉框<select>标签的属性和样式详解

《HTML5中下拉框<select>标签的属性和样式详解》在HTML5中,下拉框(select标签)作为表单的重要组成部分,为用户提供了一个从预定义选项中选择值的方式,本文将深入探讨select标签的... 在html5中,下拉框(<select>标签)作为表单的重要组成部分,为用户提供了一个从预定义选项中

Python中多线程和多进程的基本用法详解

《Python中多线程和多进程的基本用法详解》这篇文章介绍了Python中多线程和多进程的相关知识,包括并发编程的优势,多线程和多进程的概念、适用场景、示例代码,线程池和进程池的使用,以及如何选择合适... 目录引言一、并发编程的主要优势二、python的多线程(Threading)1. 什么是多线程?2.

Java 8 Stream filter流式过滤器详解

《Java8Streamfilter流式过滤器详解》本文介绍了Java8的StreamAPI中的filter方法,展示了如何使用lambda表达式根据条件过滤流式数据,通过实际代码示例,展示了f... 目录引言 一.Java 8 Stream 的过滤器(filter)二.Java 8 的 filter、fi

Rust中的BoxT之堆上的数据与递归类型详解

《Rust中的BoxT之堆上的数据与递归类型详解》本文介绍了Rust中的BoxT类型,包括其在堆与栈之间的内存分配,性能优势,以及如何利用BoxT来实现递归类型和处理大小未知类型,通过BoxT,Rus... 目录1. Box<T> 的基础知识1.1 堆与栈的分工1.2 性能优势2.1 递归类型的问题2.2

springboot的调度服务与异步服务使用详解

《springboot的调度服务与异步服务使用详解》本文主要介绍了Java的ScheduledExecutorService接口和SpringBoot中如何使用调度线程池,包括核心参数、创建方式、自定... 目录1.调度服务1.1.JDK之ScheduledExecutorService1.2.spring