首  页 | 资讯中心 | 网络学院 | 天新汽车 | 天新手机 | 天新游戏 | 软件开发 | 考试认证
品 牌 机 | 笔 记 本 | 服 务 器 | 天新数码 - DC - DV - MP3 - MP4 - GPS - TV | 数字家庭
硬件 DIY - 主板 - CPU - 内 存 - 硬 盘 - 显示器 - 显卡 - 光驱 - 机箱 - 键鼠 - 网络设备
办公设备 | 打 印 机 | 扫 描 仪 | 投 影 仪 | 一 体 机 | 传 真 机 | 路 由 器 | 交 换 机
软件下载 | 驱动下载 | 游戏下载 | 源码下载 | 教程下载 | 站长在线 | 产品中心 | 报价中心
开发首页 | 开发语言 | .Net开发 | Java开发 | Web开发 | 移动开发 | 游戏开发 | 数据库开发 | 企业开发 | 操作系统 | 软件工程
VB VC Delphi PB BCB C++ - ASP.net C# VB.net - J2EE J2SE J2ME EJB - ASP PHP JSP CGI - MSSQL Oracle DB2 MySQL - CodingLife
  开发语言首页 | VB开发 | VC开发 | VFP开发 | Delphi开发 | Power Builder | C++ Builder | C/C++ | 汇编
  您现在的位置:天新网 > 软件开发 > 开发语言 > Delphi开发 > Delphi技巧
用Indy组件开发Socket应用程序
http://dev.21tx.com 2004年03月16日 Yesky 虚度

每日文章精萃
.Net:亲密接触ASP.Net(7) Java:J2EE编程起步
ASP:ASP 系列函数大全 PHP:php 之 没有mysql支持时的替代方案
JSP:使用策略文件读取服务器端文件 CGI:Perl教学 第十一篇 文件系统之三
VB:查找替换所选字符 VC:如何画透明位图

1 2 3 4 下一页


  笔者在前一段的工作中,需要开发一套简单的网络数据传输程序。由于平时常用Delphi做点开发,故此次也不例外。Delphi 7中带有两套TCP Socket组件:Indy Socket组件(IdTCPClient和IdTCPServer)和Delphi原生的TCP Socket组件(ClientSocket和ServerSocket)。但是,Borland已宣称ClientSocket和ServerSocket组件即将被废弃,建议用相应的Indy组件来代替。因此,笔者使用了Indy。本文在对Indy进行简要介绍的基础上,创建了一组简单的TCP Socket数据传输应用来演示了Indy的使用方法。
  开放源代码的Internet组件集——Internet Direct(Indy)Internet Direct(Indy)是一组开放源代码的Internet组件,涵盖了几乎所有流行的Internet协议。Indy用Delphi编写,被包含在Delphi 6,Kylix 1和C++ Builder 6及以上各个版本的Borland开发环境中。Indy曾经叫做WinShoes(双关于WinSock——Windows的Socket库),是由Chad Z. Hower领导的一群开发者构建的,可以从Indy的站点www.nevrona.com/indy上找到更多的信息并下载其新版本。到笔者撰写本文时为止,Indy的最新稳定版是9.0.14,Indy 10也进入了Beta测试阶段。

  Delphi 7中所带的是Indy 9。在其的组件面板上,一共安装有100多个Indy组件。使用这些组件你可以开发基于各种协议的TCP客户和服务器应用程序,并处理相关的编码和安全问题。你可以通过前缀Id来识别Indy组件。

  Indy是阻塞式(Blocking)的

  当你使用Winsock开发网络应用程序时,从Socket中读取数据或者向Socket写入数据都是异步发生的,这样就不会阻断程序中其它代码的执行。在收到数据时,Winsock会向应用程序发送相应的消息。这种访问方式被称作非阻塞式连接,它要求你对事件作出响应,设置状态机,并通常还需要一个等待循环。

  与通常的Winsock编程方法不同的是,Indy使用了阻塞式Socket调用方式。阻塞式访问更像是文件存取。当你读取数据,或是写入数据时,读取和写入函数将一直等到相应的操作完成后才返回。比如说,发起网络连接只需调用Connect方法并等待它返回,如果该方法执行成功,在结束时就直接返回,如果未能成功执行,则会抛出相应的异常。同文件访问不同的是,Socket调用可能会需要更长的时间,因为要读写的数据可能不会立即就能准备好(在很大程度上依赖于网络带宽)。

  阻塞式Socket并非恶魔(Evil

  长期以来,阻塞式Socket都遭到了毫无理由的攻击。其实阻塞式Socket并非如通常所说的那样可怕。这还要从Winsock的发展说起。

  当Socket被从Unix移植到Windows时,一个严重的问题立即就出现了。Unix支持fork,客户程序和服务器都能够fork新的进程,并启动这些进程,从而能够很方便地使用阻塞式Socket。而Windows 3.x既不支持fork也不支持多线程,当使用阻塞式Socket时,用户界面就会被“锁住”而无法响应用户输入。

  为克服Windows 3.x的这一缺陷,微软在Winsock中加入了异步扩展,以使Winsock不会“锁住”应用程序的主线程(也是唯一的线程)。然而,这需要了一种完全不同的编程方式。于是有些人为了掩饰这一弱点,就开始强烈地诽谤阻塞式Socket。

  当Win32出现的时候,它能够很好地支持线程。但是既成的观念已经很难更改,并且说出去的话也无法收回,因此对阻塞式Socket的诽谤继续存在着。

  事实上,阻塞式Socket仍然是Unix实现Socket的唯一方式,并且它工作得很好。

  阻塞式Socket的优点

  归结起来,在Windows上使用阻塞式Socket开发应用程序具有如下优点:

  编程简单——阻塞式Socket应用程序很容易编写。所有的用户代码都写在同一个地方,并且顺序执行。
容易向Unix移植——由于Unix也使用阻塞式Socket,编写可移植的代码就变得比较容易。Indy就是利用这一点来实现其多平台支持而又单一源代码的设计。

  很好地利用了线程技术——阻塞式Socket是顺序执行的,其固有的封装特性使得它能够很容易地使用到线程中。

  阻塞式Socket的缺点

  事物都具有两面性,阻塞式Socket也不例外。它的一个主要的缺点就是使客户程序的用户界面“冻结”。当在程序的主线程中进行阻塞式Socket调用时,由于要等待Socket调用完成并返回,这段时间就不能处理用户界面消息,使得Update、Repaint以及其它消息得不到及时响应,从而导致用户界面被“冻结”。

上一篇: Delphi基础:回调函数及其使用
下一篇: Delph基础学习:编程规范1.0.0.0

1 2 3 4 下一页

编辑推荐
相关内容
·Delphi中用Adsi创建IIS虚拟目录的方法
·快速上手Delphi三十六计之输入处理篇
·金手指Delphi中MsComm控件的安装使用
·Delphi控件,我们也可以(2)
·Delphi的两个实用技巧(1)播放Flash
·Delphi的两个实用技巧(2)巧用Windows的API
·delphi实例编程之--制作可随处拖放的工具栏
·用Delphi 6编程实现自动标注汉语拼音
·从问题到结果 ――EXE2SWF的开发手记
·如何将界面代码和功能代码分离
·Delphi客户服务器应用开发(三)
·Delphi自定义部件开发(一)
·Delphi自定义部件开发(二)
·Delphi 动态链接库编程(二)
·Delphi 文本编辑器的设计(四)
·中间层业务逻辑(一)
·在DELPHI7中不使用任何第三方控件,实现放在
·关于VisiBroker For Delphi的使用(2)
·在线播放器DIY
·Delphi让你发送Flash电子邮件
最近更新
人气最热
·Delphi 与FORTRAN语言的混合编程
·Delphi模拟最小化恢复关闭按纽
·Delphi实现对注册表的监视和扫描
·基础实例:DELPHI8操作符重载
·动态设置系统日期格式
·DBGrid中行的定位及着色实现
·Delphi基础:回调函数及其使用
·Delph基础学习:编程规范1.0.0.0
·Delphi控件,我们也可以(2)
·Delphi的两个实用技巧(1)播放Flash
·Delphi与Word之间的融合技术
·用Delphi + DirectX开发简单RPG游戏
·Delphi基础:Window 消息大全使用详解
·Delphi中动态链接库(DLL)的建立和使用
·简析XML及其在Delphi中的应用
·Delphi基础:回调函数及其使用
·用Delphi 6编程实现自动标注汉语拼音
·用Delphi客户端访问EJB组件
·用Delphi实现动态获取版本信息
·delphi实例编程之--制作可随处拖放的工具栏

 
·[硬件]够用就好 54M家用无线路由仅售价280
·[数码]我与时尚同行 iPod专用单肩背包可听音
·[汽车]小桥流水人家 自驾湘桂烟雨迷蒙乡土韵
·[开发]VB中的界面设计原则和编程技巧
·[资讯]新指纹技术可生成荧光图
·[游戏]泡泡堂专区
·[本本]Dothan处理器供货告急 LCD受累价格大跌
·[办公]风风火火!夏普传真机跌百元杀入1K
·[手机]男士专用 三星黑色贝壳X668仅售1680元
·[考试]沈阳音乐学院违规发包违法用工酿事故
·[学院]恢复昔日“风采” 光驱常见故障及排除
·[娱乐]三贼-阳台
 

关于我们 | 联系我们 | 广告服务 | 工作机会 | 版权声明 | 欢迎投稿 | 网站地图
Copyright © 2000-2008 , www.21tx.com , All Rights Reserved .
© 晨新科技 版权所有 Created by TXSite.net