关于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的几种方法的更多相关文章

  1. JS 判断数据类型的三种方法

    说到数据类型,我们先理一下JavaScript中常见的几种数据类型: 基本类型:string,number,boolean 特殊类型:undefined,null 引用类型:Object,Functi ...

  2. DataTable 转换成 Json的3种方法

    在web开发中,我们可能会有这样的需求,为了便于前台的JS的处理,我们需要将查询出的数据源格式比如:List<T>.DataTable转换为Json格式.特别在使用Extjs框架的时候,A ...

  3. Android之数据存储的五种方法

    1.Android数据存储的五种方法 (1)SharedPreferences数据存储 详情介绍:http://www.cnblogs.com/zhangmiao14/p/6201900.html 优 ...

  4. 两个变量交换的四种方法(Java)

    对于两种变量的交换,我发现四种方法,下面我用Java来演示一下. 1.利用第三个变量交换数值,简单的方法. (代码演示一下) class TestEV //创建一个类 { public static ...

  5. C#中实现并发的几种方法的性能测试

    C#中实现并发的几种方法的性能测试 0x00 起因 去年写的一个程序因为需要在局域网发送消息支持一些命令和简单数据的传输,所以写了一个C/S的通信模块.当时的做法很简单,服务端等待链接,有用户接入后开 ...

  6. Atitti 载入类的几种方法    Class.forName ClassLoader.loadClass  直接new

    Atitti 载入类的几种方法    Class.forName ClassLoader.loadClass  直接new 1.1. 载入类的几种方法    Class.forName ClassLo ...

  7. windows下获取IP地址的两种方法

    windows下获取IP地址的两种方法: 一种可以获取IPv4和IPv6,但是需要WSAStartup: 一种只能取到IPv4,但是不需要WSAStartup: 如下: 方法一:(可以获取IPv4和I ...

  8. Python下载网页的几种方法

    get和post方式总结 get方式:以URL字串本身传递数据参数,在服务器端可以从'QUERY_STRING'这个变量中直接读取,效率较高,但缺乏安全性,也无法来处理复杂的数据(只能是字符串,比如在 ...

  9. CSS教程:div垂直居中的N种方法以及多行文本垂直居中的方法

    在说到这个问题的时候,也许有人会问CSS中不是有vertical-align属性来设置垂直居中的吗?即使是某些浏览器不支持我只需做少许的CSS Hack技术就可以啊!所以在这里我还要啰嗦两句,CSS中 ...

  10. 《Web开发中让盒子居中的几种方法》

    一.记录下几种盒子居中的方法: 1.0.margin固定宽高居中: 2.0.负margin居中: 3.0.绝对定位居中: 4.0.table-cell居中: 5.0.flex居中: 6.0.trans ...

随机推荐

  1. 使用Certbot申请证书

    使用certbot申请*通配符证书,使用letsencrypt证书服务,使用DNS方式手动验证 certbot certonly --preferred-challenges dns --manual ...

  2. 升级TLS1.3

    初衷:简简单单在网站上挂个单点登录,先在本地跑起来,然后再放到服务器上.然而问题来了: 请求被中止: 未能创建 SSL/TLS 安全通道 简简单单的百度一下,只需要加上这行就可以了~Easy Serv ...

  3. Centos安装后出现please make your choice from '1' to eter the license information spoke | 'q' to quit |'c' to continue |'r' to refresh

    这是要求用户阅读或者接收协议: 解决方法:输入"1",按Enter键   阅读许可协议,输入"2",按Enter键  接受许可协议,输入"q" ...

  4. div+css CSS基本

        • css 高度(height) • css 宽度(width)   · • css 边框(border)   · • css 背景(background)   · • css 浮动(floa ...

  5. 为什么MeshLambertMaterial和MeshPongMaterial不可见

    在编程时发现对于同样的球体,MeshBasicMaterial可见,但是MeshLambertMateril和MeshPongMaterial不可见. 原因是这两种材质需要光照才能显示. 如果加了光照 ...

  6. Ngrinder(性能测试工具)-(一)

    一.ngrinder介绍 nGrinder 是基于Grinder开源项目,由NHN公司的开发团队进行了重新设计和完善. nGrinder 是一款非常易用,有简洁友好的用户界面 和 controller ...

  7. HTML多媒体

    多媒体(一).插入音频.视频和flash在网页中插入音频.视频和flash都是使用embed标签. 语法: <embed src="多媒体文件地址" width=" ...

  8. imputation-文献:False signals induced by single-cell imputation(scRNA-seq插补引入的假阳性问题)

    文章题目 False signals induced by single-cell imputation 中文名: 单细胞插补引起的假信号 文章地址: https://f1000research.co ...

  9. Word05 邀请函office真题

    1.课程的讲解之前,先来对题目进行分析,首先需要制作一份请柬,请柬中需要包含标题.收件人名称.联谊会时间.联谊会地点和邀请人. 2.打开一个"新的Wrod"文档,在页面中输入请柬的 ...

  10. golang 指针

    一个指针变量指向了一个值的内存地址,类似于变量和常量,在使用指针前你需要声明指针. 每个变量在运行时都拥有一个地址,这个地址代表变量在内存中的位置.使用&字符放在变量前面对变量进行" ...