创建自己的多用户聊天应用程序.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文档。上传文档
查看更多
创建自己的多用户聊天应用程序

创建自己的多用户聊天应用程序1.2 创建自己的多用户聊天应用程序 在本章的这一部分,我们将首先建立一个简单的聊天程序,它允许连接到中央服务器的任何人互相进行通信。这样可以让你探索套接字通信的基本原理,并学习如何向所有已连接的用户广播消息。 图1-2展示了本章的这一部分将要的建立的应用程序。 ?? (点击查看大图)图1-2 即将创建的聊天程序 1.2.1 为网络通信使用TcpClient和TcpListener类 创建聊天程序通常涉及套接字编程——创建一个客户和服务器之间的连接,使客户和服务器都能发送和接收消息。System.Net.Sockets命名空间提供套接字编程所需的功能。在这个项目我们将使用System.Net.Sockets命名空间里的2个类:TcpClient和TcpListener。 TcpClient类实现了使用TCP发送和接收数据的套接字。因为与远程设备的连接被表示为流,数据可以使用.NET Framework的流处理技术来读取和写入。 TcpListener类以阻塞同步模式提供用于监听和接受外来连接请求的简单方法。 下面的示例代码实现了一个简单的等待外来连接的服务器(一个控制台应用程序)。 ? ? ? ? 要连接到服务器并向它发送一个字符串,客户代码(一个控制台应用程序)将是下面这样的: ? ? ? ? 注意,NetworkStream对象操作字节数组,因而需要使用来自System.Text命名空间的Encoding.ASCII.GetString()和Encoding.ASCII.GetBytes()方法来将字节数组转换成字符串,反之亦然。 上面的例子是比较简单的——它包含了服务器代码和客户代码。服务器在使用端口500打开一个套接字并监听外来TCP连接。当连接建立起来以后,由一个NetworkStream对象读取客户发来的数据。到达的数据随后显示在控制台上。另一方面,客户在打开一个连接,然后使用NetworkStream对象向服务器发送一个字符串。 但是,当服务器需要同时与多个客户通信并能同时发送和接收消息时,问题就会变得复杂得多。为了实现这些,必须满足以下几条。 ? 服务器必须能够与多个客户建立连接。 ? 服务器必须能够从客户异步读取数据并能在任何时刻向客户发送消息。 ? 客户必须能够从服务器异步读取数据并能在任何时刻向服务器发送消息。 接下来的几节将解决这3个问题。 1.2.2 构建服务器(1) 聊天程序有两个部件——服务器和客户,我们来首先构建服务器。用Vistual Studio 2005创建一个控制台程序项目,将该项目命名为Server。 在默认的Module1.vb/Program.cs文件里,首先导入System.Net.Socket命名空间,它包含这个项目将要用到的所有相关的类。 ? 接下来,声明一个常量来存储这个应用程序使用的端口号。对这个程序,我们使用端口号500。 ? 提示?如果你在服务器(或者客户)上安装了防火墙,请确保打开端口500,以便这个应用程序运行。 我们还需要定义所要监听的本地地址,然后创建一个TcpListener类的实例,用来监听来自TCP客户的连接。 ? 在Main()函数里,使用来自类TcpListener的Strart()方法来开始监听外来连接请求。AcceptTcpClient()方法是一个阻塞式的调用,直到连接建立起来以后程序才会继续执行。因为这个示例里的服务器需要同时为多个客户提供服务,我们将为每一个用户创建一个ChatClient类(稍后将定义)的实例。服务器将会无限地循环检查,若有客户请求连接,则接受。 ? ? 完整的Module1.vb源文件如下所示。 ? ? ? 接下来定义ChatClient类。我们使用ChatClient类来表示连接到该服务器的每个客户的信息。 在Visual Studio 2005中为项目添加一个新的类,并将其命名为ChatClient.vb/ChatClient.cs。照例,第一步是导入System.Net.Sockets命名空间(对于代码的C#版本,还需要导入System. Collections命名空间)。 ? 1.2.2 构建服务器(2) 在ChatClient类中,首先定义各种私有成员(它们的用途在代码注释中会有说明)。同时声明一个HashTable对象(AllClients),用来保存所有连接到该服务器的用户的列表。将它声明为共享成员的原因是,确保ChatClient类的所有实例都能够获得当前连接到该服务器的所有客户的列表。 ? ? 当一个客户连接到服务器时,服务器将创建一个C

文档评论(0)

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

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

1亿VIP精品文档

相关文档