IdTCPServer简介_原创精品文档.pdfVIP

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

IdTCPServer简介

Indy的全名是InternetDirect(也叫Winshoes),它是一套开放源代码的Internet控件集,它支持大

部分流行的Internet协议。IdTCPServer在开始工作后,首先会自动建立一个侦听线程

TidListenerThread,该线程负责侦听客户端的连接请求,并对每一个服务器已接受的连接创建一个

TidPeerThread线程。每个连接通过运行各自所属的TidPeerThread来实现与服务器的数据交互。

IdTCPServer该控件包含一个完整的、多线程TCP服务器。该控件使用一个或者多个线程监听(listen)

客户机连接,使用时与TIdThreadMgr联合使用,将每个线程分配给与客户机连接的连接上。

Indy是一个多线程控件,在Server连接的时候,针对每客户会创建一个线程,只要有客户发送数据,

就会激活Srever的OnExecute事件。由于数据的接收是在各个为连接所建的线程中并发进行的。需

要做的,就是在OnExecute中识别是哪个客户(也即线程)发来的请求,针对这个客户的socket连接

返回服务就可以了。

Server端首先是响应客户的Connect事件,一旦连接了,就自动在服务端建立了一个连接线程。

而这个连接线程是需要Server维护的,indy的最大连接线程数不会大于600个,有600个线程你还

不够用的话,基本上就不能使用indy控件了。

TCPServer每次侦听到一个连接,就会新建一个idPeerThread,

而当这个idPeerThread触发OnExecute事件的时候,就会调用IdTCPServer1Execute,

///////////{怎样识别是哪线程发来的请求的问题?}//////////DATA线程附加信息包,可以自己定义//以便

区分到底是那一个线程发来的数据。//

Indy是阻塞式(Blocking)的

当你使用Winsock开发网络应用程序时,从Socket中读取数据或者向Socket写入数据都是异步

发生的,这样就不会阻断程序中其它代码的执行。在收到数据时,Winsock会向应用程序发送相应的消

息。这种访问方式被称作非阻塞式连接,它要求你对事件作出响应,设置状态机,并通常还需要一个等

待循环。

与通常的Winsock编程方法不同的是,Indy使用了阻塞式(便于编程)Socket调用方式。阻塞式

访问更像是文件存取。当你读取数据,或是写入数据时,读取和写入函数将一直等到相应的操作完成后

才返回。程序也一直阻塞在读或写的地方比如说,发起网络连接只需调用Connect方法并等待它返回,

如果该方法执行成功,在结束时就直接返回,如果未能成功执行,则会抛出相应的异常。同文件访问不

同的是,Socket调用可能会需要更长的时间,因为要读写的数据可能不会立即就能准备好(在很大程度

上依赖于网络带宽)。例如:

1received_msg:=trim(AThread.Connection.ReadLn(*,10,-1));

2athread.Connection.WriteLn(confirm);

1//调用ReadLn方法来//取数据,数据结束标志符//为‘*’,在未读到‘*’//时函数一直阻塞

在//该处,超时时间为10微秒,对字符串长度没有限制。2//在收到字符串后,(.ReadLn(*,10,-1))成功

运行后,下一步2运行。)。

reeze对抗“冻结”

Indy使用一个特殊的组件TIdAntiFreeze来透明地解决客户程序用户界面“冻结”的问题。

TIdAntiFreeze在Indy内部定时中断对栈的调用,并在中断期间调用Application.ProcessMessages方法处

理消息,而外部的Indy调用继续保存阻塞状态,就好像TIdAntiFreeze对象不存在一样。你只要在程序

中的任意地方添加一个TIdAntiFreeze

文档评论(0)

185****0262 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档