转发地址: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 详解的更多相关文章

  1. Linq之旅:Linq入门详解(Linq to Objects)

    示例代码下载:Linq之旅:Linq入门详解(Linq to Objects) 本博文详细介绍 .NET 3.5 中引入的重要功能:Language Integrated Query(LINQ,语言集 ...

  2. 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)

    一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...

  3. EntityFramework Core 1.1 Add、Attach、Update、Remove方法如何高效使用详解

    前言 我比较喜欢安静,大概和我喜欢研究和琢磨技术原因相关吧,刚好到了元旦节,这几天可以好好学习下EF Core,同时在项目当中用到EF Core,借此机会给予比较深入的理解,这里我们只讲解和EF 6. ...

  4. Java 字符串格式化详解

    Java 字符串格式化详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 文中如有纰漏,欢迎大家留言指出. 在 Java 的 String 类中,可以使用 format() 方法 ...

  5. Android Notification 详解(一)——基本操作

    Android Notification 详解(一)--基本操作 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Notification 文中如有纰 ...

  6. Android Notification 详解——基本操作

    Android Notification 详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 前几天项目中有用到 Android 通知相关的内容,索性把 Android Notificatio ...

  7. Git初探--笔记整理和Git命令详解

    几个重要的概念 首先先明确几个概念: WorkPlace : 工作区 Index: 暂存区 Repository: 本地仓库/版本库 Remote: 远程仓库 当在Remote(如Github)上面c ...

  8. Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)

    Android XML shape 标签使用详解   一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...

  9. Node.js npm 详解

    一.npm简介 安装npm请阅读我之前的文章Hello Node中npm安装那一部分,不过只介绍了linux平台,如果是其它平台,有前辈写了更加详细的介绍. npm的全称:Node Package M ...

随机推荐

  1. csdn如何转载别人的文章

    1.找到要转载的文章,用chrome浏览器打开,右键选择审查元素 2.在chrome中下方的框里找到对应的内容,html脚本中找到对应的节点,选中节点,网页上被选中内容会被高亮显示,然后右键菜单选中 ...

  2. python2.7学习记录之三

    1.连接数据库 MySQLdb的是一个接口连接到MySQL数据库服务器从Python.它实现了Python数据库API V2.0,并建上的MySQL C API的顶端. 下载地址:https://so ...

  3. shell之路【第二篇】运算与文件调用

    Bash 支持很多运算符,包括算数运算符.关系运算符.布尔运算符.字符串运算符和文件测试运算符. 原生bash不支持简单的数学运算,默认都是字符串操作,但是可以通过其他命令来实现 算数运算 expr. ...

  4. js里写网页结构, 传函数参数

    如题 "<td align='center' height='30px' width='80px'><a href='javascript:sort(\"&quo ...

  5. php5.6之后的版本使用curl以@+文件名的方式上传文件无效的解决版本

    使用curl上传文件使用file=@文件路径的方式,在php5.6以后的版本中无法使用了 官方文档给出明确解释 如果需要支持的话,可以将CURLOPT_SAFE_UPLOAD设置为false 或者使用 ...

  6. 禁止root远程登录 sshd问题:A protocol error occurred. Change of username or service not allowed

    在研究Linux安全的时候遇到一个问题,原本打算修改linux直接远程root登陆,修改为sshd的配置文件后 Nano /etc/ssh/sshd_config 把#PermitRootLogin ...

  7. sql数据库删除表的外键约束(INSERT 语句与 FOREIGN KEY 约束"XXX"冲突。该冲突发生于数据库"XXX",表"XXX", column 'XXX)

    使用如下SQL语句查询出表中外键约束名称: 1 select name 2 from sys.foreign_key_columns f join sys.objects o on f.constra ...

  8. 错误 1 error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏 C:\Users\Administ

    错误 1 error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏 C:\Users\Administ 这两个fatal error是因为从低版本的WTL到高版本的WTL转变后产生的 ...

  9. java中json数据生成和解析(复杂对象演示)

    1.json简单介绍 1.1 json是最流行和广泛通用的数据传输格式,简称JavaScript Object Notation,最早在JavaScript中使用. 1.2 举个例子,下面是一个jso ...

  10. java获取数据库的列名、类型等信息

    当你使用和学习JDK的时候,可以查看并学习它所提供给你的两个ResultSetMetaData 和DataBaseMetaData类的源码并很好的了解它们的实现原理和思路,JDBC中提供有两种源数据, ...