第4章TCPSocket编程探究.ppt

  1. 1、本文档共38页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第4章 TCPSocket编程 了解以太网通信与计算机硬件的关系 了解TCP/IP协议与以太网通信的关系 了解客户/服务器的概念 掌握Winsock构件的属性、事件、方法之间的关系 掌握通过Delphi 6.0制作简单客户/服务器通信程序的方法 掌握通过Visual Basic 6.0制作简单客户/服务器通信程序的方法 通过通信实验了解不同语言的通信编程之间的字符编码差异 4.2.2 客户与服务器 现实中所有信息交换都是基于客户(Client)与服务器(Server)模式的,称为C/S模型。所谓服务器是指,它总是处于被动状态,等待客户的询问,负责应答。这也正像我们出外旅游时住旅店一样,旅店服务员总是在等待着我们客户。客户总是处于主动地位,在启动时客户总是首先向服务器发出联络信号,然后等待服务器的回答。一个服务器可能同时为许多客户提供服务。在设计程序时,到底谁作客户,谁作服务器要看具体的情况而定。 计算机网络通信总是以客户(Client)与服务器(Server)方式进行的。 4.2.3 阻塞与非阻塞 在Winsock中套接字可以是阻塞方式,也可以是非阻塞方式。处于阻塞方式的套接字的函数,在完成其任务之前是不会返回的。这样,在该函数调用返回前,这个套接字就不能进行其他任何操作,调用它的进程也会处于挂起状态,所以称为阻塞方式。例如,在调用ReceiveBuf()函数时,可能要花费相当长的时间来等待数据的到来,在这段时间内,调用ReceiveBuf ()的进程就无法继续执行。特别是在某些情况下,当发送方的数据根本无法到达时,该进程就会无限地等待下去。除此之外,当用户在长时间等待后失去耐心而试图关闭程序时,还会导致系统限于危险境地。BerkeleySocket的很多函数都是阻塞方式的。 4.3.1 Delphi 6.0 的ClientSocket Delphi 6.0中的Winsock有客户套节字(ClientSocket、TcpClient)和服务器套节字(ServerSocket、TcpServer)之分。ClientSocket和ServerSocket里面均包含一个Socket对象,真正用来通信的方法在Socket里面。下面分别讨论客户套节字的属性、事件、方法。 其中关键方法有: function ReceiveLength: Integer; function Socket.ReceiveBuf(var Buf; Count: Integer): Integer; function Socket.SendBuf(var Buf; Count: Integer): Integer; 这两个方法可以接收和发送二进制的数据也可以发送字符串数据,与Record类型配合可以完成各种数据的操作。 4.3.2 Delphi 6 中的ServerSocket 其中关键方法有: function ReceiveLength: Integer; function Socket.ReceiveBuf(var Buf; Count: Integer): Integer; function Socket.SendBuf(var Buf; Count: Integer): Integer; 这两个方法可以接收和发送二进制的数据也可以发送字符串数据,与Record类型配合可以完成各种数据的操作。 通信前必须先连接,连接前必须把客户的Address或Host设为服务器计算机的IP地址,客户的Port与服务器的Port必须相等,服务器的Active必须设为true。具体的连接动作就是客户的Active:=true。当连接成功后,客户的OnConnect事件发生。 应当注意,一个服务器Socket可供若干个客户连接。服务器Socket中专门有一个记录数组Connections记录客户的连接情况。 客户通过SendBuf发送的信息由服务器的OnClientRead事件调用ReceiveBuf接收,服务器通过SendBuf发送的信息由客户的OnRead事件调用ReceiveBuf接收。 4.3.3 Visual Basic 6.0的 Winsock 数据传输协议允许创建和维护与远程计算机的连接。连接两台计算机就可彼此进行数据传输。在Visual Basic 6.0中的Winsock没有客户与服务器之分。它既可以当客户用,也可以做服务器用,完全靠Winsock内的属性、方法、事件的具体配合。 如果创建客户应用程序,就必须知道服务器计算机名或者 IP 地址(RemoteHost 属性),还要知道进行“侦听”的端口(RemotePort 属性),然后调用 Connect 方法。 如果创建服务器应用程序,就应设置一个收听端口(LocalPort 属性)

文档评论(0)

1112111 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档