编程练习.doc-编程练习【荐】.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编程练习23.1 使用一个套接字连接来允许客户端指定一个文件名,并让服务器发送文件内容,或者 指出文件不存在。要允许客户端修改文件内容并将文件传回服务器以便存储。 23.2 多线程服务器今天非常流行这主要是因为人们越来越多地使用“多线程服务器”(也就 是含有多个CPU的服务器)。请将本章23.4节的那个通过套接字连接的简单通讯服 务器应用程序实例Tcp/Server修改成一个多线程服务器。从而可以使用Tcp/Client应 用程序创建多个客户端通讯连接申请,达到所有的客户端程序能够同时连接服务器进 行通讯。 提示: 本题的要求是设计编写一个能与多个客户端进行通讯的服务器应用程序。这就要求 服务器具有如下功能: ① 能接收多个客户端的连接请求,并建立TCP连接。 ② 在通讯中能接收和识别来自每个客户端的不同信息,并能将服务器的信息发送到当 前建立了连接的所有客户端。 ③ 能处理每个客户端随时发出的结束通讯连接的请求(包括客户端的退出操作)。 ④ 能向所有客户端发出结束通讯连接的命令(包括服务器的退出操作),从而终止通 讯,并使所有客户端退出。 设计具有上述功能的服务器应用程序应该特别注意以下几个方面的问题: ⑴ 由于接收客户端的连接请求、创建TCP连接,和通过已建立的连接进行的信息通 讯和相应处理需要能同时进行。也就是说,服务器在与已建立连接的客户端进行信 息通讯和相应处理的同时,还能接收其他客户端的连接请求、创建TCP连接。这 显然需要使用两种操作线程:一种完成接收客户端的连接请求、创建TCP连接(只 创建一次),另一种完成与每个已建立连接的客户端进行信息通讯和相应处理(需 要创建多次对应每个客户端)。 ⑵ 由于服务器端口地址在一个进程中只允许使用一次,服务器的侦听器TcpListener 对象只能建立一次,而侦听器的侦听方法AcceptSocket可以多次使用。因此,服 务器的侦听器对象创建代码应放在进程只执行一次的地方,一般可以放在服务器对 象的构造函数中,也可以放在完成接收客户端的连接请求、创建TCP连接的线程 中。如果放在线程中,则该线程的操作代码就应该由侦听器对象创建和启动代码; 迭代(循环)侦听客户端连接请求、建立TCP连接和创建与已建连接客户端的通 讯线程的代码(结束迭代的条件可以是所有已建连接被关闭);以及必要的异常处 理代码组成。 ⑶ 与已建连接客户端进行信息通讯和处理的线程的操作代码应该由显示接收到客户 端连接请求信息和向相应客户端发送连接成功信息的代码;迭代(循环)接收相应 客户端通讯信息和必要异常处理的代码(结束迭代的条件是客户端发送来了结束连 接的信息或通讯连接因某种原因被关闭);以及结束一个通讯连接所必须的操作代 码组成。 ⑷ 为了使程序设计更加符合面向对象的设计思想,建议在原来的服务器类的基础上在 定义一个描述为每个客户端建立连接、实现通讯操作的类。在该类中应该包含存放 TCP连接套接字Socket句柄、网络数据流NetworkStream句柄、数据流书写器 BinaryWriter句柄、数据流阅读器BinaryReader句柄、服务器接口(自定义)句 柄(由于调用必要的服务器方法)、必要的服务器输入输出界面控件句柄(用于必 要的交互操作)和存放连接序号(用于区别不同的客户端通讯连接)的数据成员; 访问必要的数据成员的属性(例如,获取连接套接字Socket句柄和获取数据流书 写器BinaryWriter句柄的属性);和提供与客户端信息通讯和处理操作的线程方法 等。而原来的服务器类中除了包含原来的界面控件句柄外,还要包含存放侦听器 TcpListener句柄、接收客户端连接请求的线程句柄、实现通讯操作的类对象句柄 数组、实现通讯操作的线程句柄数组和记录客户端连接创建顺序的计数器的数据成 员;和提供接收客户端的连接请求、创建TCP连接的操作线程方法等。 ⑸ 由于该服务器应用程序能够与多个客户端建立通讯连接,因此管理和使用这些连接 要比使用单个连接复杂的多。例如,是否有任何与服务器的连接、通过所有的连接 向相应的客户端发送信息、关闭所有的连接等。建议使用定义一个接口interface class来扩展服务器类提供的方法。即服务器类定义通过继承关系从该接口中扩展 自己的方法,而方法的实现代码在服务器类定义中完成。这样做的优点在于更符合 面向对象的设计思想,同时也便于这些扩展方法的使用,例如,在实现通讯操作的 类对象中通过该服务器接口句柄可以方便地调用必要的扩展方法,而不破坏服务器 对象的封装性。 23.3 修改本章实例Tic-Tac-Toe/Server和Tic-Tac-Toe/Client程序实现的Tic-Tac-Toe游 戏的多线程。具体的修改要求如下: ① 修改C

文档评论(0)

wulf + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档