基于Socket的聊天室系统设计.doc_第1页
基于Socket的聊天室系统设计.doc_第2页
基于Socket的聊天室系统设计.doc_第3页
基于Socket的聊天室系统设计.doc_第4页
基于Socket的聊天室系统设计.doc_第5页
免费预览已结束,剩余31页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

毕业设计(论文) 摘 要 信息时代的到来引发了一场知识和信息革命,计算机和现代网络技术的广泛 应用极大地促进了社会经济的发展,同时也带来了一些新兴产业的发展,比如聊 天室。聊天室已经慢慢成为人们生活的一部分,呈现出良好的势头和广阔的发展 前景。 本文主要介绍了以当前流行 C#设计语言开发的一个简单的网络聊天室。该聊 天室主要是为许多喜爱上网聊天的朋友开发设计的,希望能在现有的众多聊天室 中给大家多一种的选择。该聊天室还运用异步 Socket 通信和多线程技术实现了点 对多聊天,点对点聊天,传送文件等。本聊天室主要由聊天室页面、发送文件页 面构成。整个设计简洁明了、实用,使用简单。 关键词:C# 设计语言;聊天室;Visual studio 2005 毕业设计(论文) I 目 录 第一章第一章 概述概述.1 1 1.1 聊天室系统的基本概念 .1 1.2 开发聊天室系统的意义 .1 1.3 本次毕业设计所要完成的主要工作 .1 1.4 系统配置 .2 第二章第二章 相关技术介绍相关技术介绍.3 3 2.1 SOCKET 简介 .3 2.2 C# 简介 .4 第三章第三章 需求分析需求分析.7 7 3.1 基本概念 .7 3.2 可行性分析内容 .7 第四章第四章 聊天室系统的总体设计聊天室系统的总体设计.8 8 4.1 模块描述 .8 4.2 流程图 .10 4.3 用例图 .10 第五章第五章 详细设计详细设计.1111 5.1 聊天室服务器端设计 .11 5.2 聊天室客户端进行设计 .22 第六章第六章 系统测试系统测试.3030 结论结论.3232 参考文献参考文献.3333 致致 谢谢.3434 毕业设计(论文) 1 第一章 概述 1.1 聊天室系统的基本概念 聊天室系统是一个通过国际互联信息网络进行多人通讯的一个系统。该系统在 一定网络通讯及高级语言程序设计和 Socket 技术的基础上,利用计算机通讯原理, 形成一个聊天室平台,使得用户在进入这个聊天室系统平台的同时,可以通过网络 在线与距离遥远的其他一位或多位用户进行信息交流。 1.2 开发聊天室系统的意义 在这个信息极其发达的时代,我们目前可以用来进行信息交流的方法也有非常 多,比如电报、电话、电子邮件、OICQ 等等通讯手段,但是这些或者不方便或者 有局限性或者有费用的问题,比如电话就是属于费用比较高的一种方式,而且一般 情况下不能进行多人会谈,只能 2 方通话,那么一个需要几个人一起讨论的会议就 不能举行,一般情况下都需要花费大量的人力物力把这几个人聚集到同一地点才能 进行讨论。非但费时费力费钱而且效果也不一定很好。电子邮件则不是一种及时联 系的手段,需要一定时间才能到达,只能作为一种辅助交流的手段。但是,聊天室 这个就能很好的解决这个问题,我们不需要聚集在同一地点,各自在不同的地点就 可以在聊天室中发言,大家互相讨论。而且好的聊天室还有各种表情符号等可以加 强我们的表达。而且费用低廉,信息交流速度快,只有这样,才能在这个涌动的社 会中加强联系,创造出更多的财富。 1.3 本次毕业设计所要完成的主要工作 通过所学知识,根据网络聊天室系统的发展动态,结合自己个人的兴趣爱好, 建立一个功能丰富,操作简便快捷的通用网络聊天室系统。 本文的主要安排了对聊天室技术的一些相关介绍,比如 SOCKET 技术。接着 是关于对聊天室系统的分析和设计,通过对聊天室的结构的分析来设计聊天室系统, 并根据自己的兴趣和想法来丰富聊天室的功能。 毕业设计(论文) 2 1.4 系统配置 1) Windows 2000 操作系统或更高以上版本; 2)Microsoft Visual Studio 2005 或更高版本 毕业设计(论文) 3 第二章 相关技术介绍 2.1 Socket 简介 Socket 诞生于上个世纪 80 年代初,美国政府的高级研究工程机构(ARPA)给 加利福尼亚大学伯克力(Berkeley)分校提供了资金,委托他们在 UNIX 操作系统下 实现 TCP/IP 协议的开发接口1。于是研发人员就为 TCP/IP 网络通信开发了一个 API(应用程序接口) 。这个 API 称为 Socket 接口(套接字) 。所以有时候说, Socket 是 TCP/IP 上的 API。 到了上个世纪 90 年代,当时的一些网络开发商,包括现在地 Sun 和 Microsoft 公司等,共同制定了一套 WINDOWS 下的网络编程接口,即 WindowsSockets 规范, 简称 WinSock 规范。WinSock 规范是一套开放的、支持多种协议的 Windows 下的网 络编程接口2。从 1991 年的 1.0 版到 1995 年的 2.0.8 版,经过不断完善并在 Intel、Microsoft、Sun 等公司的大力支持下,已成为 Windows 网络编程的事实上的 标准。目前,WinSock 规范主要有 1.1 版和 2.0 版。两者的最重要区别是 1.1 版只支 持 TCP/IP 协议,而 2.0 版可以支持多协议。2.0 版有良好的向后兼容性,任何使用 1.1 版的源代码,二进制文件,应用程序都可以不加修改地在 2.0 规范下使用。 可见 Socket 接口其实是 TCP/IP 网络的 API 接口函数,Socket 数据传输其实就 是一种特殊的 I/O。常用的 Socket 类型有两种:流式 Socket(SOCK_STREAM)和 数据报式 Socket(SOCK_DGRAM) 。流式是一种面向连接的 Socket,针对于面向连 接的 TCP 服务应用;数据报式 Socket 是一种无连接的 Socket,对应于无连接的 UDP 服务应用3。 Socket 就是套接字,它是网络编程中最常用遇到的概念和工具。在 TCP/IP 网络 中,传送和接收数据就会经常使用到 Socket,由于使用 Socket 能够在网络上处理复 杂数据,所以在各种网络应用程序中,涉及到数据传送和接收,一般都会使用 Socket,可见要掌握网络编程,精通 Socket 是非常重要4。由于 Socket 本身的复杂 性,决定了掌握它是比较困难的。Visual C是微软公司推荐的开发.Net 平台应用程 序的主要语言,随着.Net 的深入人心,目前很多有远见的公司都把以前的软件转向 了.Net 平台。掌握网络编程始终是学习一种开发语言的重点,这一点对于 Visual C也同样如此。Visual C实现网络功能其关键也是掌握托管 Socket 的使用方法。 本文就来详细介绍 Visual C中利用托管 Socket 实现网络数据传送和接收的实现方 法及其注意事项。 毕业设计(论文) 4 2.2 C# 简介 Microsoft.Net(以下简称.Net)框架是微软提出的新一代 Web 软件开发模型,C#语 言是.Net 框架中新一代的开发工具。C#语言是一种现代的、面向对象的语言,它简 化了 C+语言在类、命名空间、方法重载和异常处理等方面的操作,它摒弃了 C+ 的复杂性,更易使用,更少出错。它使用组件编程,和 VB 一样容易使用。C#语法 和 C+、JAVA 语法非常相似,如果读者用过 C+和 JAVA,学习 C#语言应是比较 轻松的5。 用 C#语言编写的源程序,必须用 C#语言编译器将 C#源程序编译为中间语言 (MicroSoft Intermediate Language,MSIL)代码,形成扩展名为.exe 或.dll 文件6。中间 语言代码不是 CPU 可执行的机器码,在程序运行时,必须由通用语言运行环境 (Common Language Runtime,CLR)中的既时编译器(Just In Time,JIT)将中间语言代 码翻译为 CPU 可执行的机器码,由 CPU 执行。CLR 为 C#语言中间语言代码运行提 供了一种运行时环境,C#语言的 CLR 和 JAVA 语言的虚拟机类似。这种执行方法 使运行速度变慢,但带来其它一些好处,主要有: 通用语言规范(Common Language Specification,CLS):.Net 系统包括如下语言: C#、C+、VB、J#,他们都遵守通用语言规范。任何遵守通用语言规范的语言源程 序,都可编译为相同的中间语言代码,由 CLR 负责执行。只要为其它操作系统编制 相应的 CLR,中间语言代码也可在其它系统中运行7。 自动内存管理:CLR 内建垃圾收集器,当变量实例的生命周期结束时,垃圾收 集器负责收回不被使用的实例占用的内存空间。不必像 C 和 C+语言,用语句在堆 中建立的实例,必须用语句释放实例占用的内存空间。也就是说,CLR 具有自动内 存管理功能8。 交叉语言处理:由于任何遵守通用语言规范的语言源程序,都可编译为相同的 中间语言代码,不同语言设计的组件,可以互相通用,可以从其它语言定义的类派 生出本语言的新类9。由于中间语言代码由 CLR 负责执行,因此异常处理方法是一 致的,这在调试一种语言调用另一种语言的子程序时,显得特别方便。 更加安全:C#语言不支持指针,一切对内存的访问都必须通过对象的引用变量 来实现,只允许访问内存中允许访问的部分,这就防止病毒程序使用非法指针访问 私有成员,也避免指针的误操作产生的错误10。CLR 执行中间语言代码前,要对中 间语言代码的安全性、完整性进行验证,防止病毒对中间语言代码的修改。 版本支持:系统中的组件或动态联接库可能要升级,由于这些组件或动态联接 库都要在注册表中注册,由此可能带来一系列问题,例如,安装新程序时自动安装 新组件替换旧组件,有可能使某些必须使用旧组件才可以运行的程序,使用新组件 运行不了。在.Net 中这些组件或动态联接库不必在注册表中注册,每个程序都可以 使用自带的组件或动态联接库,只要把这些组件或动态联接库放到运行程序所在文 毕业设计(论文) 5 件夹的子文件夹 bin 中,运行程序就自动使用在 bin 文件夹中的组件或动态联接库。 由于不需要在注册表中注册,软件的安装也变得容易了,一般将运行程序及库文件 拷贝到指定文件夹中就可以了11。 完全面向对象:不象 C+语言,即支持面向过程程序设计,又支持面向对象程 序设计,C#语言是完全面向对象的,在 C#中不再存在全局函数、全区变量,所有的 函数、变量和常量都必须定义在类中,避免了命名冲突12。C#语言不支持多重继 承。 2.3 .NET 简介 2000 年 6 月,Microsoft 公司发布了它的.NET(读作“dot-net” )计划。.NET 平 台对早期的开发平台做了重大改进。.NET 提供了一种新的软件开发模型,它允许用 不同程序设计语言创建的应用程序能相互痛惜。这个平台也允许开发者创建基于 Web 的应用程序,这些应用程序能够发不到不同的设备(甚至是无线电话)和台式 机上。 那么什么是.NET?微软如是说:Microsoft.NET 是 Microsoft XML Web services 平台。XML.Web services 允许应用程序通过 Internet 进行通讯和共享数据,而不管 所采用的是哪种操作系统、设备或编程语言。Microsoft.NET 平台提供创建 XML Web services 并将这些服务继承在一起之所需。对个人用户的好处是无风的、吸引人 的体验13。 Microsoft 的.NET 计划为利用 Internet 和 Web 进行软件的开发、设计和使用开 辟了广阔的新前景。.NET 策略的一个主要方面是它与具体的语言或平台无关。它不 需要程序员使用唯一的一种程序设计语言。程序员可以将多种与.NET 兼容的语言结 合起来开发.NET 应用程序。多个程序员可以共同参与同一个软件项目,每个人可以 使用自己最精通的.NET 语言(如 Visual C+.NET、NET、C#、Visual Basic 和其他 许多语言)来编写代码。 .NET 体系结构的一个主要组建是 Web 服务,它是通过 Internet 向客户端开放其 他功能的应用程序。客户端和其他应用程序可以将这些 Web 服务作为可重用的构件 块。Web 服务扩展了软件重用的概念。程序员不必事项每一个应用程序的每一个组 建,而只需要将注意力放在自己所开发的这一部分上14。相反,公司可以购买 Web 服务,从而将时间和精力放在产品开发上。面向对象的程序设计方法已经很流行, 因为它能让程序员利用预先包装好的组件方便地创建应用程序。同样,程序员可以 利用 Web 服务为数据库、安全性、身份验证、数据存储和语言翻译创建应用程序, 而无需知道这些组件的内部细节。 当公司通过 Web 服务链接它们的产品是,这时就出现了一种新的用户体验。例 如,通过利用多个公司的 Web 服务,一个单独的应用程序就能同时管理账单支付、 毕业设计(论文) 6 税金退还、货款和投资。一个在线商人可以购买用于在线信用卡付款、用户身份验 证、网络安全和库存数据库的 Web 服务来建立一个电子商务 Web 站点。 这种互动的关键是 XML 和 SOAP,它们可使 Web 服务能够相互通信。XML 对 数据进行表示,而 SOAP 则是 Web 服务之间得以方便通信的协议。XML 和 SOAP 就像“胶水”一样将各种 Web 服务组合在一起构成各种应用程序。 2002 年的.NET Framework1.0 是第一个发行的版本,并被包含在 Visual Studio.NET2002 中;比较稳定的版本是在 2003 年发布的 1.1 版;2004 年发布 1.1 SP1 并在 2005 年随 Win2003 发布;2005 年发布.NET 2.0,主要是增加支持泛型以 及 64 位操作系统,但你不很多改进;2006 年发布的 3.0 版,语言和框架基本没变, 就是增加了几个组件,比如 Windows 表现层基类库(WPF) 、Windows 通讯基类库 (WCF) 、Windows 工作流基类库(WF) 、Windows 数字标识(WCS) ,这个版本可 以运行在 Windows XP SP2、Windows2003 SP1 以及 Windows Vista 上。 毕业设计(论文) 7 第三章 需求分析 3.1 基本概念 (1)可行性,对开发一个新系统或修改/升级一个老系统会对用户带来多少利 益的量度。可行性分析,对可行性进行度量的过程。 (2)可行性研究的目的不是解决问题,而是确定问题是否值得去解。当然,可 行性研究最根本的任务是对以后的行动方针提出建议。如果问题没有可行解应停止 开发,避免浪费资源;如果问题值得解分析员应该推荐一个较好的解决方案,并且 制定一个初步的计划。一般要从操作可行性、技术可行性、经济可行性确定每种解 法是否可行。 3.2 可行性分析内容 (1)操作可行性,聊天室是提供给网民一个交友与娱乐的场所,在聊天室里网 民可选择自己的聊天对象,与其进行对话交流,是网民之间相互沟通、交流情感的 最佳方式之一。用户可以通过网络在线与距离遥远的其他一位或多位用户进行信息 交流。在聊天室里网民可选择自己的聊天对象,进行对话交流。既可以一对一,又 可以一对多,还可以形成小组进行多对多讨论,方便网民在线私聊与群聊。是现行 网络最流行、最被广泛应用的通讯工具。 (2)技术可行性,本系统利用 Visual Strdio 2005 实现相应界面绘制,利用 C# 实现功能设计,程序开发人员已基本掌握这些技术,具有技术可行性。 (3)经济可行性,成本方面:本系统主要在实验室开发,相应资料已具备,开 发成本和运行成本能够满足;效益方面:人们日常生活中越来越多地使用聊天室这 项应用来为自己的工作和学习服务。一个操作简单,界面友好、运行稳定的聊天室 对于小型局域网的用户可以起到很好的交流作用。所谓聊天室就是一个可以让许多 用户同时互相通信的网上园地,个人用户可以通过聊天室将自己融入整个集体中。 本聊天室主要实现点对多聊天,点对点聊天,传送文件等功能。 毕业设计(论文) 8 第四章 聊天室系统的总体设计 4.1 模块描述 本系统采用 C/S 模式,C/S (Client/Server,客户机/服务器)模式又称 C/S 结 构,是 20 世纪 80 年代末逐步成长起来的一种模式,是软件系统体系结构的一种。 C/S 结构的关键在于功能的分布,一些功能放在前端机(即客户机)上执行,另一 些功能放在后端机(即服务器)上执行。功能的分布在于减少计算机系统的各种瓶 颈问题。C/S 模式简单地讲就是基于企业内部网络的应用系统。与 B/S(Browser/Server,浏览器/服务器)模式相比,C/S 模式的应用系统最大的好处 是不依赖企业外网环境,即无论企业是否能够上网,都不影响应用。 主要模块描述及流程图 (1)聊天室服务端模块图:)聊天室服务端模块图: 图 4-1 聊天室服务端模块图 端口服务:输入要侦听的端口,默认为 9590; 启动服务:启动服务器,并开始在设置的端口中侦听,客户端用户可以登录并 开始聊天; 停止服务:关闭服务器,侦听结束。客户端用户不能再聊天; 服务器 IP:默认本机 IP。 退出服务器:退出程序,并停止服务; 聊天室服务端 端 口 服 务 启 动 服 务 服 务 器 IP 停 止 服 务 退 出 服 务 消 息 显 示 毕业设计(论文) 9 (2)聊天室客户端模块图:)聊天室客户端模块图: 图 4-2 聊天室客户端模块图 用户设置:用户可以设置自己的用户名进行聊天; 连接设置:用户可以设置自己的服务器的 IP 地址和端口号,默认的连接地址为: 本机地址:9590; 用户登录:只能在聊天室服务端已开启的情况下,用户才能登录,用户登录之 后才能开始聊天,登录后不能再修改用户设置和连接设置; 用户注销:退出聊天,可以继续修改用户设置和连接设置; 发送和接收聊天信息:用户可以给所有人或者个别用户发送信息,并能看到其 他用户发送给自己或所有人的消息; 退出:关闭所有聊天并退出客户端。 聊天室客户端 用 户 设 置 连 接 设 置 发送 /接收 聊天 消息 用 户 登 录 传 接 文 件 退 出 毕业设计(论文) 10 4.2 流程图 设置侦听端口 默认端口:8888 设置用户名 默认连接地址或用户名 设置 IP 地址和端口 图 4-3 系统流程图 4.3 用例图 图 4-4 系统用例图 聊天室服务器端口服务启动服务 聊天室客户端用户设置登录 连接设置 聊天 退出 毕业设计(论文) 11 第五章 详细设计 5.1 聊天室服务器端设计 该部分主要是对界面和功能的设计,用到以下控件: Label,TextBox,Button,ListBox,RichTextBox。服务器界面设计如下: 图 5-1 服务器界面图 启动服务之前首先对服务端 IP 和端口号进行设置,端口号默认为 3321,服务 端 IP 默认为本机 IP,对窗体的 Load 事件进行编辑,获取本机 IP,代码如下: private void FrmServer_Load(object sender, EventArgs e) string strHostName = Dns.GetHostName(); IPAddress strAddress = Dns.Resolve(strHostName).AddressList0; this.txtIPAddress.Text = strAddress.ToString(); 毕业设计(论文) 12 设置完成后点击启动服务按钮,对已设置端口进行监听,界面和部分代码如下: 图 5-2 服务器启动服务后界面图 private void btnStart_Click(object sender, EventArgs e) /确认端口号是有效的,根据TCP协议,范围应该在-65535之间 int serverPort; try serverPort = Convert.ToInt32(txtPort.Text); catch (Exception) rtbMessage.Text += 端口号必须为数字且范围为-65535 + rn; txtPort.Focus(); return; 毕业设计(论文) 13 if (serverPort 65535) rtbMessage.Text += 端口号必须为数字且范围为-65535 + rn; txtPort.Focus(); return; /获取IP地址。 string ipAddress = txtIPAddress.Text; IPAddress ipAdd = IPAddress.Parse(ipAddress); listener = new TcpListener(ipAdd, serverPort); try /启动监听。 listener.Start(); /显示启动信息 rtbMessage.Text += txtIPAddress.Text + 的服务已经启动!正在 监听端口号: + txtPort.Text + n; /启动新的线程 Thread ServerThread = new Thread(new ThreadStart(this.StartSocketListen); FrmServer.ServericeFlag = true; ServerThread.Start(); btnStart.Enabled = !btnStart.Enabled; btnStop.Enabled = !btnStop.Enabled; catch (Exception ex) rtbMessage.Text += ex.Message+rn; return; 当服务使用完成后,点击结束服务按钮,停止对端口的监听,界面及部分代码 如下: 毕业设计(论文) 14 图 5-3 服务器停止服务后界面图 private void btnStop_Click(object sender, EventArgs e) FrmServer.ServericeFlag = false; Thread.Sleep(300); rtbMessage.Text += txtIPAddress.Text + 的服务已经停止! + rn; /204. 控制按钮的可用性 btnStart.Enabled = !btnStart.Enabled; btnStop.Enabled = !btnStop.Enabled; 服务器收到用户信息后进行进行处理,代码如下: using System; using System.Collections.Generic; using System.Text; using System.Net; using System.Net.Sockets; using System.Threading; 毕业设计(论文) 15 using System.Collections; namespace AppServer public class Client FrmServer server; Socket currentSocket; string ipAddress; string name; /保留当前连接的状态: /closed - connected - closed private string state = closed; public Client(FrmServer server, Socket clientSocket) this.server = server; this.currentSocket = clientSocket; ipAddress = getRemoteIPAddress(); /获得连接客户端的IP地址,并转换成一个字符串 private string getRemoteIPAddress() return (IPEndPoint)currentSocket.RemoteEndPoint).Address.ToString(); /306.客户端线程方法,每连入一个客户端,会启动这个方法 public string Name get return name; set name = value; 毕业设计(论文) 16 public Socket CurrentSocket get return currentSocket; set currentSocket = value; public string IpAddress get return ipAddress; public void ServiceClient() string tokens = null; byte buff = new byte1024; bool KeepConnect = true; while (FrmServer.ServericeFlag) tokens = null; try /如果没有信息达到服务器端,则休息 if (currentSocket = null | currentSocket.Available + receiver + : + content; /仅将信息转发给发送者和接收者 if (FrmServer.clients.Contains(sender) SendToClient( (Client)FrmServer.clientssender, message); if (FrmServer.clients.Contains(receiver) SendToClient( (Client)FrmServer.clientsreceiver, message); server.updateUI(message); else /send err to server SendToClient(this, ERR|state error,Please login first); else if (tokens0 = EXIT) /此时接收到的命令的格式为:命令标志符(EXIT)|发 送者的用户名 /向所有当前在线的用户发送该用户已离开的信息 if (FrmServer.clients.Contains(tokens1) Client client = (Client)FrmServer.clientstokens1; /将该用户对应的Client对象从clients中删除 Hashtable syncClients = Hashtable.Synchronized( FrmServer.clients); syncClients.Remove(); 毕业设计(论文) 21 server.RemoveUser(); /向客户端发送QUIT命令 string message = QUIT| + tokens1; System.Collections.IEnumerator myEnumerator = FrmServer.clients.Values.GetEnumerator(); while (myEnumerator.MoveNext() Client c = (Client)myEnumerator.Current; SendToClient(c, message); /退出当前线程 break; Thread.Sleep(100); /SendToClient()方法实现了向客户端发送命令请求的功能 private void SendToClient(Client client, string msg) System.Byte message = System.Text.Encoding.Default.GetBytes(msg.ToCharArray(); client.CurrentSocket.Send(message, message.Length, 0); /组织用户列表的方法 private string getUserList() string result = ; for (int i = 0; i server.lstOnUsers.Items.Count; i+) result += server.lstOnUsers.Itemsi + |; 毕业设计(论文) 22 return result; 5.2 聊天室客户端进行设计 客户端主要完成界面、聊天和传输文件功能的设计,用到以下控件: Label,TextBox,Button,ListBox,RichTextBox,OpenFileDialog,CheckBox。 客户端界面设计如下: 图 5-4 客户端界面图 连接、登陆以前对服务器 IP、端口号和用户名进行设置, 为调试方便窗体的 Load 事件将服务器 IP 设置为本机 IP 并对端口 5000 进行监听,一旦有其他客户端向 毕业设计(论文) 23 本客户端发送文件可以选择接受,默认端口号和用户名为:3321,Brant。以下是客 户端登陆后界面,因 Load 事件代码与服务器端基本相同这里不再重复。 图 5-5 客户端连接登录后界面图 接下来就可以进行对话了,在下面的 TextBox 中输入要发送的信息,点击发送 对所有在线人发送信息,若选择悄悄话的 CheckBox 和在线用户的用户名则是仅对 该用户发送信息。界面及发送 Button 的 Click 事件设计如下: 毕业设计(论文) 24 图 5-6 聊天界面图 private void btnSend_Click(object sender, EventArgs e) try if (!this.cbPrivate.Checked) /命令标志符(CHAT)|发送者的用户名:发送内容| string message = CHAT| + this.tbUserName.Text + : +txtSendMsg.Text + |; txtSendMsg.Text = ; txtSendMsg.Focus(); /将字符串转化为字符数组 Byte outbytes = System.Text.Encoding.Default.GetBytes(message.ToCharArray(); 毕业设计(论文) 25 Stream.Write(outbytes, 0, outbytes.Length); else if (lstOnUsers.SelectedIndex = -1) MessageBox.Show(请在列表中选择一个用户, 提 示信息, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; string receiver = lstOnUsers.SelectedItem.ToString(); /消息的格式是: /命令标志符(PRIV)|发送者的用户名|接收者的用户名| 发送内容| string message = PRIV| + this.tbUserName.Text + | + receiver + | + txtSendMsg.Text + |; txtSendMsg.Text = ; txtSendMsg.Focus(); /将字符串转化为字符数组 byte outbytes = System.Text.Encoding.Default.GetBytes(message.ToCharArray(); Stream.Write(outbytes, 0, outbytes.Length); catch (Exception ex) rtbMessage.Text += ex.Message + rn; 接下来对发送功能进行设计,因打开客户端时已对 5000 端口进行监听,所以相 关设置完成后,点击发送文件按钮即可向该用户发送文件,系统消息框会对该用户 提示接受,发送端界面如下: 毕业设计(论文) 26 图 5-7 发送文件界面图 打开文件 Button 的 Click 事件设计: private void buttonOpenFile_Click(object sender, EventArgs e) if (openFileDialog1.ShowDialog() = DialogResult.OK) label6.Text = openFileDialog1.FileName; 发送文件 Button 的 Click 事件部分代码设计: private void BtnSendFile_Click(object sender, EventArgs e) string path = label6.Text.Trim(); ; /要传输的文件 毕业设计(论文) 27 TcpClient client = new TcpClient(); client.Connect(IPAddress.Parse(textBox1.Text), 5000); FileStream file = new FileStream(path, FileMode.Open, FileAccess.Read); /注意与receive的filestream的区别 BinaryReader binary = new BinaryReader(file); byte by = new byte4098; int data; while (data = binary.Read(by, 0, 4098) != 0) client.Client.Send(by, data, SocketFlags.None);/发送文件流到 目标机器 client.Client.Shutdown(SocketShutdown.Both); binary.Close(); file.Close(); 接受端界面如下: 毕业设计(论文) 28 图 5-8 接受文件界面图 接受文件 Button 的 Click 事件设计: private void BtnReceiveFile_Click(object sender, EventArgs e) string path = D:test.txt; s = tcp.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论