毕业设计(论文)基于WEB的文字聊天传输模块的设计.doc
基于WEB的文字聊天传输模块的设计摘 要当前中国的互联网技术已经进入了一个飞速发展的时期,即时通讯工具作为当今网络应用的主流,越来越受到了人们的青睐,使人们的网上生活更加丰富多彩。当今使用最为广泛的即时通信工具聊天软件,可以方便人们随时随地进行在线交流,比如腾讯公司的QQ聊天软件。本毕业设计就是模拟QQ聊天软件,开发一个包括文字聊天、文件传输、语音及视频交流等功能的聊天软件。本设计的开发采用C/S结构,在基于.NET开发环境下,使用C#编程语言进行开发。本文首先论述国内外聊天工具的发展情况和现今的发展方向,并对开发环境和开发语言进行了简单介绍;对本设计所要开发的多功能聊天软件作了较为全面的需求分析,并给出了多功能聊天软件的设计方案,主要功能包括文字聊天、文件传输、语音聊天及视频聊天等;本毕业设计主要实现的是多功能聊天软件的部分功能,即文字聊天、文件传输等功能,主要完成的任务包括服务器模块的设计、数据库的设计、添加好友、文字聊天和文件传输等功能。与另一位同学开发实现的语音聊天与视频聊天模块集成在一起,构成一个实用的、功能完善的聊天软件,达到预期目标;通过运行、测试与分析,该多功能聊天软件运行稳定、可靠,具有一定的实用价值。 关键词:聊天软件;文字聊天;文件传输;C/S结构;QQ聊天软件Design and Development of the Multi-function Chat SoftwareWriting/File Transferring ModuleAbstractNowadays,China's Internet technology has already entered a rapid development times, the instant messenger takes now the mainstream of network application, which causes people's online life to be more richly colorful, and has also received people's favors simultaneously. At present, the most widespread instant messengerchat software, may facilitate the people to carry on the online information exchange at anytime and anywhere, for instance the QQ chat software of Tencent company. This graduation project simulates QQ chat software, and develops a chat software that includes the writing, file transfer, audio chat, video chat and so on. This design development uses the C/S structure, uses the C# programming language to carry on developing this software based on .NET environment. This paper first elaborates the development situation of domestic and foreign chats tool and the development direction nowadays, and has carried on the simple introduction to the development environment and the development language. The demand of multi-function chat software is analyzed in detail, and its plan is provided. Its main functions include the writing, file transfer, audio and video chat and etc. This graduation project mainly realizes the partial functions of multi-function chat software, namely the writing chat, the file transfer and so on, which mainly realizes the design of server module, the design of database, adding of good friend, writing chat, file transfer and so on. Finally, this design integrates the functions that another schoolmate designs the writing and file transfer, which forms chat software of practical and full functions. This software achieves the anticipated target. By running, testing and analyzing, it shows that this multi-function chat software is stable, reliable, and has some practical values.Key words: Chat Software; Writing Chat; File Transfer; C/S Structure; QQ Chat Software目 录 论文总页数:24页1 引言11.1 课题背景11.2 国内的发展现状11.3 本课题研究的意义21.4 本文的主要工作22 系统需求分析23 开发环境及开发工具33.1 开发环境的概述33.2 C#语言的概述53.3 SQL数据库的介绍54 多功能聊天软件的设计方案64.1 聊天系统流程的分析与设计64.2 数据库模块的分析与设计74.3 添加好友模块的分析与设计84.4 服务器模块的分析与设计95 文字聊天、文件传输模块的设计与分析95.1 文字聊天模块的分析95.2 文字聊天模块功能具体实现95.3 文件传输模块的分析125.4 文件传输模块功能具体实现136 添加好友、服务器以及其它特殊功能模块实现分析156.1 添加好友模块功能具体实现156.2 服务器模块功能具体实现156.3 好友信息窗体显示、排序功能具体实现167 系统的综合测试与分析17结 论21参考文献22致 谢23声 明241 引言1.1 课题背景随着互联网应用越来越丰富,以快速、交互、简便为代表的即时通讯工具,已经成为当前网络用户最喜爱的网络沟通工具。聊天软件作为当今使用最为广泛的即时性通信工具之一,给互联网上的用户提供了诸多的服务,如文字聊天、文件传输、语音聊天、视频聊天等功能。作为即时通讯工具最具增长潜力之一的聊天软件,不仅在基础应用方面,还是产品扩展应用方面都将有质的飞跃,它为满足人们的需要,将其功能不断的完善。随着聊天软件功能的不断完善,用户通过聊天软件在互联网上尽情的交谈,不但可以文字聊天和文件传输,还可以通过语音、视频来聊天。在今后随着互联网技术的发展,聊天软件也在以前所未有的速度改变着人们的生活方式,它必定会成为人们网络生活不可缺少的一部分。1.2 国内外的发展现状1996年11月ICQ在全球发布,拉开了互联网IM(Instant Messenger,即时通讯)应用的序幕。就是这样一款小软件在短短数年时间里发展出一个巨大的IM产业。时至今日,即时性通讯工具早已成为最热门的网络应用之一。国内外的聊天工具举不胜数。ICQ作为全球第一款即时性通讯工具,在经过短短数年的发展,其行业内的地位如今已是无人能够撼动。ICQ名字取自英文“I seek you”的谐音,即是“我找你”的意思。最初的ICQ只有两个特性,即用户列表和即时聊天。但一经推出就受到众多网民的喜爱,6个月内其注册用户迅速攀升至85万,1998年它的用户数量更是翻了10数倍,达到了1200万人。ICQ的迅猛发展也让当时的互联网领头羊Yahoo和在桌面软件领域独步天下的微软嗅到了商机,它们分别推出了Yahoo Messenger、MSN Messenger和昙花一现的MS Chat。即时通讯市场雏形顿显,有了国际互联网巨头和最大软件公司的融入,即时通讯时代的大幕就此徐徐拉开。当ICQ风行全球的时候,在国内各种仿ICQ的中文IM软件也纷纷推出,时至今日,占据国内的市场的主要是腾讯公司的QQ、微软的MSN、雅虎的雅虎通等。其中腾讯公司的QQ以占据了国内70%以上的市场。随着IM应用的深入,其功能早已超越了初期的即时文字聊天。表情图标早已成为各个IM软件的标准功能,文件传输、语音/视频聊天、游戏、网上交友等高级功能也正越来越多地被集成进入IM应用。事实表明,现在的IM已不再是一个简单的沟通工具,而是一个信息资讯、交流互动、休闲娱乐中心,IM平台上的语音、视频、音乐点播、信息共享等新应用层出不穷。发展到现在,IM软件越来越成熟,IM产业链也已经形成,已经成为现代人和现代经济中不可或缺的一部份,相信未来IM软件的道路会更加宽广和精彩。1.3 本课题研究的意义21世纪是信息的时代,随着互联网技术的发展,信息在传递方面也有了崭新的一面。现今聊天软件成为信息传递最为广泛的应用工具,它发挥了即时性通信的特点,可以让用户在第一时间内得到信息的交流,它不仅可以让用户进行文字聊天,而且还增添语音、视频功能。这样可以让网上的好友身临其境的面对面的聊天,让彼此之间更为深入的了解。人性化的设计让每个用户都可以得心应手的使用,从而获得更多人的青睐。Internet的出现连通了整个世界,而聊天软件的出现则连通了每一位网上的用户。随着网络应用的发展,聊天软件已经成为最热门的网络应用之一。经历了近几年突飞猛进的发展之后,即时通讯工具早已不再是简单的互联网通讯工具,它已经成为一个集互动交流、休闲娱乐、信息管理为一体的多元化互联网应用平台。总之,聊天软件的出现给人们彼此之间的沟通带来了无比的方便,人们可以通过聊天软件建立深刻的友情,让人们在互联网上的交流更加充满活力与生机。1.4 本文的主要工作聊天软件作为使用最为广泛的即时性通讯工具,它在拥有文字聊天基础功能的同时,为满足用户的需求,还增加了文件传输、语音、视频聊天等主要的功能,成为现在最为主流的网上应用软件。本论文主要对聊天软件的文字聊天、文件传输功能进行分析与研究,总结出实现的相关理论与知识。首先论述了聊天软件对人们的生活有何影响,结合国内外的聊天软件的发展状况,谈谈聊天软件有何意义;然后对此聊天软件系统进行了较为详细的分析;对开发环境和工具进行了说明;提出了该多功能聊天软件的设计方案;在本次多功能聊天软件的设计与开发中,作者主要负责设计开发服务器模块、数据库模块、添加好友模块、文字聊天模块、文件传输模块,并对此聊天软件系统的服务器模块、数据库模块、添加好友模块、文字聊天模块、文件传输模块的设计与开发进行了较为详细的说明与分析。 2 系统需求分析此聊天软件系统是模拟现今国内最为流行的即时性通讯工具QQ,其功能类似于QQ,能够实现注册、登录、添加好友、文字聊天、文件传输、语音聊天、视频聊天等功能。该聊天软件系统是采用C/S结构,也就是客户端与服务器端的结构体系,基于对该聊天软件功能的分析,分别对客户端与服务器端进行了设计。该聊天软件的服务器端是用来实现对客户端提交的用户信息进行处理的功能。服务器设计内容包含:信息接收、注册、登录、刷新、更新、用户退出处理、添加好友等。信息接收是提供服务器接受用户端发送信息的功能;注册是服务器接受到用户的注册信息请求后,并将其请求信息写入到数据库,为用户的注册提了相关服务;登录是服务器通过验证登录时信息来实现相关服务; 刷新是服务器每过一段时间用来刷新一次,来显示用户当前在服务器的信息状况,如在线状态等;更新是服务器对用户在服务器中信息操作进行相关的服务;用户退出处理是服务器在用户推出聊天系统后作出的相关处理工作;好友添加是服务器将用户的好友信息写入数据库中用户好友表的操作。客户端既是用户使用的应用程序端,用户通过该聊天软件的客户端来实现网上聊天的相关功能:注册、登录、添加好友、文字聊天、文件传输、语音聊天、视频聊天等。注册的功能是提交用户相关信息以及获得一个属于自己登录该聊天软件系统的用户ID号;登录的功能是实现验证用户信息与合法使用该聊天软件系统的权限;添加好友是实现用户之间好友添加功能;添加好友成功后,就可以与好友之间开始文字聊天、文件传输、语音聊天、视频聊天等功能。 (1)该服务器的运行环境: 操作系统:windows2000或windows2003; 内存:256M以上(最低为256M); CPU:Intel(R) Celeron(R) 2.0GHz或AMD 1800+以上均可; 其它:Microsoft .NET Framework SDK。(2)客户端的运行环境: 操作系统:windows XP或windows2003等; 内存:256M以上(最低为256M); CPU:Intel(R) Celeron(R) 2.0GHz或AMD 1800+以上均可; 摄像头、耳机等外部设备。 第一次使用系统的用户通过填写个人信息来注册,服务器返回一个注册ID号给注册用户,用来登录用。已经注册的用户可以在验证他的登录信息(一般指用户名和密码)后登录系统。在线用户通过查看所要添加好友的用户列表相关的信息,并且向添加好友发送请求添加的信息,好友通过验证后,向请求方发送同意添加消息,请求方添加完成后,并把相关信息存入到好友表的数据库中。在添加完好友后,两人同时在线时,就可以聊天了。3 开发环境及开发工具3.1 开发环境的概述微软发布了.NET开发平台,这是自1993年7月随着Windows NT3.0出现的Win32 API后微软软件开发平台的第一次大升级。比起Win16来,Win32提供了更多功能强大的API,但没有对工具和技术进行引人注目的改变。与之不同的是,.NET开发平台在开发者用以创造应用程序的工具和技术上做了根本的改变。 .NET开发平台使得开发者创建运行在Internet Information Server (IIS)(互联网信息服务器)Web服务器上的Web应用程序更为容易,它也使创建稳定、可靠而又安全的Windows桌面应用程序更为容易。.NET开发平台包括以下内容:(1).NET Framework(架构),包括:Common Language Runtime(CLR)(通用语言运行环境),这是用于运行和加载应用程序的软件组件;新的类库,分级组织了开发者可以在他们的应用程序中用来显示图形用户界面、访问数据库和文件以及在Web上通信的代码集。(2).NET开发者工具,包括:Visual Studio .NET Integrated Development Environment (IDE)(Visual Studio .NET集成开发环境),用来开发和测试应用程序。(3).NET编程语言(例如Visual Basic .NET和新的Visual C#),用来创建运行在CLR下并且使用类库的应用程序。(4)ASP .NET,一个取代以前的Active Server Pages (ASP)的特殊类库,用来创建动态的Web内容和Web服务器应用程序,这些都将采用诸如HTML、XML和Simple Object Access Protocol(SOAP)(简单对象访问协议)等Internet协议和数据格式。.NET开发平台是一组用于建立Web服务器应用程序和Windows桌面应用程序的软件组件,用该平台创建的应用程序在Common Language Runtime(CLR)(通用语言运行环境)(底层)的控制下运行。CLR是一个软件引擎,用来加载应用程序,确认它们可以没有错误地执行,进行相应的安全许可验证,执行应用程序,然后在运行完成后将它们清除。类库集提供了使应用程序可以读写XML数据、在Internet上通信、访问数据库等的代码。所有的类库都建立在一个基础的类库之上,它提供管理使用最为频繁的数据类型(例如数值或文本字符串)的功能,以及诸如文件输入/输出等底层功能。Web服务器应用程序通常依赖于ASP.NET,一个处理Web请求的服务器端的库。ASP.NET又依赖一个用于发送和接收SOAP信息的Web Services库,以及一个用于以浏览器接收用户输入并动态地生成Web页面以示响应的Web用户接口(UI)(有时称作Web 表单)。Windows桌面应用程序通过使用Win表单库(也称作Windows 表单)可以显示一个图形UI。最后,Visual Studio .NET提供了一个用于在该平台上创建应用程序的图形Integrated Development Ewironment(IDE)(集成开发环境)。程序员可以使用一种或多种.NET编程语言,来编写他们的代码,例如微软的Visual Basic .NET(VB.NET),Visual C+, Visual C#和JScrjpt .NET等。大量其它的.NET编程语言可以从第三方厂商获得。 3.2 C#语言的概述C#是一种面向对象的语言,它功能强,易于表现,使用灵活。通过C#可以让开发人员快速的建立大范围的基于微软新的.NET的平台的应用,并且提供大量的开发工具和服务帮助开发人员开发基于计算和通信的各种应用。由于其优良的面向对象设计,在构建从高级业务对象到系统应用的各种不同组件时,C#是一个首要的选择。使用简易的C#语言构造,组件可以被转换为WEB服务,从而允许从运行在任何操作系统上的任何语言中跨越Internet调用它们。不仅仅如此,C#的设计为C+程序员带来了快速的开发能力,而不用牺牲C+已有的功能和控制能力。C#高度保持了与C和C+的一致性。从继承角度来看,C#在更高层次上重新实现了C/C+,熟悉C/C+的开发的人员可以很快的转变为C#开发人员。C#的重要特性:(1)开发效率与安全性;(2)与Web开发相结合;(3)减少了开发中的错误;(4)提供内置的版本支持来减少开发费用;(5)更好的结合商业应用中的流程与软件实现;(6)可扩展的协作能力。3.3 SQL Server数据库的介绍SQL是Structured Query Language(结构化查询语言)的缩写,是用户操作关系数据库的通用语言。SQL虽然叫结构化查询语言,其查询操作确实是数据库中的主要操作,但并不是说SQL语言只支持查询操作,它实际上包含数据定义、数据操纵和数据控制等与数据库有关的全部功能。Microsoft SQL Server 2000是一个分布式的关系型数据库管理系统,具有客户机/服务器体系结构,采用了Transact-sql的sql语言在客户机与服务器间传递客户机的请求与服务器的处理结果。众所周知,SQL Server 2000能够满足今天的商业环境要求不同类型的数据库解决方案。它一种应用广泛的数据库管理系统,具有许多显著的优点:易用性、适合分布式组织的可伸缩性、用于决策支持的数据仓库功能、与许多其他服务器软件紧密关联的集成性、良好的性价比等。性能、可伸缩性及可靠性是基本要求,而进入市场时间也非常关键。除这些核心企业品质外,SQL Server 2000还为您的数据管理与分析带来了灵活性,允许单位在快速变化的环境中从容响应,从而获得竞争优势。从数据管理和分析角度看,将原始数据转化为商业智能和充分利用Web带来的机会非常重要。作为一个完备的数据库和数据分析包,SQL Server 2000为快速开发新一代企业级商业应用程序、为企业赢得核心竞争优势打开了胜利之门。作为重要的基准测试可伸缩性和速度奖的记录保持者,SQL Server 2000是一个具备完全Web支持的数据库产品,提供了对可扩展标记语言(XML)的核心支持以及在Internet上和防火墙外进行查询的能力。4 多功能聊天软件的设计方案4.1 聊天系统流程的分析与设计此聊天软件是采用C/S结构,其系统流程图如图1所示。图1 系统流程图使用这个聊天软件的用户必须先进行注册,在登录窗体用户单击注册按钮,激活注册窗体。填写相关的注册信息,提交给服务器。服务器将注册信息提交给数据库,并由服务器按注册顺序生成一个用户ID号返回给注册用户,这样注册就完成了。然后用户用注册成功的ID号和注册时的密码进行登录。用户在登录窗口填写用户ID和用户密码,由客户端将登录信息提交给服务器,服务器根据数据库中存储的用户信息与客户端提交的登录信息进行比较,比较一致后,则返回一个登录成功地确认信息给客户端,当客户端收到这个确认信息时,则激活本聊天软件的客户端主窗体。这时你要与好友进行聊天,则必须添加好友,比如用户2要添加用户N为好友,用户2首先向用户N发出添加好友请求信息,用户N接受到用户2的信息,并通过验证发送确认反馈信息给用户2,并且向服务器提交好友添加确认信息,这时服务器就会更新相应用户的好友列表中的信息。好友添加完成后,用户之间就可以进行彼此之间的通信,如文字聊天、视频聊天、语音聊天、文件传输等。以上如图1为多功能聊天软件系统的总体流程图,其中包括了登录模块、注册模块、添加好友模块、服务器模块、数据库模块等。在这个多功能聊天软件系统开发设计与实现中,作者主要负责服务器模块、数据库模块、添加好友模块、文字聊天与文件传输功能模块的设计与实现。下面就对数据库模块与添加好友模块的流程和服务器模块进行了分析。4.2 数据库模块的分析与设计该聊天系统的数据库设计的目的是保存用户信息,为用户之间的通信提供相关的数据服务,比如在用户登录时,在登录模块中输入的相关信息(用户ID、密码),就要和数据库中已有的相关信息进行比较,如果相同就表明登录成功,如果不一致则要重新登录。其设计思路是:首先建立一个用户信息总表,这张表包括每个人的详细信息,如用户名、用户ID、用户头像编号等,是在用户注册时,将信息写入该用户信息总表内;然后当一个用户注册成功后,服务器就会自动生成一个该用户的好友表,该表中存放的是该用户添加的好友信息,在登录成功后的客户端界面的好友信息就来源于此好友表,这样两个在线的好友之间就可以通信了。图2所示,为此聊天系统的数据库总体设计结构图。图2 数据库结构图由于聊天系统的作用是提供用户之间通信,也就是说它的实体就是用户,所以数据库表的关系就为用户表与用户表之间的关系。图3为此聊天工具的数据库的E-R图,它体现了用户1表(用户1ID,用户1姓名,用户1头像ID等),其中“用户1ID”为主键;用户2表(用户2ID,用户2姓名,用户2头像ID等),其中“用户2ID”为主键。他们之间的关系是1:1关系,也就是说用户1的好友表只能添加一个用户2为好友,用户2的好友表只存在一个用户1的ID号。用户1可以添加N个用户为好友,但这些好友的ID号信息在用户1的好友表中是唯一的。图3 E-R图4.3 添加好友模块的分析与设计用户1通过服务器查询数据库中已有的好友资料,并向所要添加的好友发送添加请求,用户2接收到用户1的请求,经过验证将消息发送给用户1,用户1接收到同意添加消息后,添加用户2位好友,并将用户2的信息存入到用户1的好友表中,同时用户2也将用户1的信息存入用户2的好友表中,并把相关信息提交给服务器,让服务器对数据库进行发更新。图4为添加好友系统流程。图4 添加好友系统4.4 服务器模块的分析与设计该服务器的作用是对数据进行处理,整个聊天系统依靠服务器对数据的处理来运行,比如登录功能、注册功能、添加好友功能等都是利用服务器对数据的处理来实现的,如图5所示,为服务器运行时的状况。图5 服务器运行图本设计主要完成的是文字聊天、文件传输模块,以及添加好友、服务器模块和特殊功能模块,下面对其设计进行实现进行详细说明。5 文字聊天、文件传输模块的设计与分析5.1 文字聊天模块的分析文字聊天是聊天工具最早的信息传递方式,用户通过打字,将信息传递给好友。至今为止,文字聊天在网络聊天中是应用最为广泛的聊天方式。其实现原理是:通信双方通过Socket套结字进行文字信息的传输。用户双方通过Socket套结字建立连接,并将文字信息以数据流的形式进行发送。如图6所示,为文字信息流程图。图6 文字聊天流程5.2 文字聊天模块功能具体实现文字聊天模块功能是聊天软件诞生以来,最早实现信息传递的功能模块。首先双击客户端应用程序,让其程序运行。经过登录验证后,程序开辟一个新的线程udpThread来完成udp的监听功能,并通过调用UdpReceiveMsg()函数来实现对udp数据包的接收功能。在由switch语句块根据控制字符选择相应的功能函数实现相应的功能。关键代码如下:文件Client.csudpThread = new Thread(new ThreadStart(UdpReceiveMsg);udpThread.Start()private void UdpReceiveMsg()udpSocket.Bind(LocalPoint);count = udpSocket.Receive(read);switch (ctrl)case "MSG": /接收信息this.SelectUser(gostr);break;case "REQ": /接收好友添加请求this.FriendRequest(gostr);break;case "AFF":/好友添加反馈信息this.FriendResqonse(gostr);break;用户双击所要发送信息的好友头像,这时就会出现一个与好友对话的窗体,在对话框的输入信息区域,将其要给对方所发送的信息输入到该信息框内,然后点击发送按钮,就会触发一个sender事件,从而调用b_send_Click(object sender, System.EventArgs e) 事件处理函数。该函数先对用户输入数据进行判断,如果输入的传输数据大于一定的值(1024Byte),则显示发送信息过长的提示信息,如果输入的字符数据正常,则调用udpSocketSend.SendTo(Bsendinfo, remoteEP)方法将控制符"MSG"连接上用户自身ID及用户输入的文字信息发送给好友。关键代码如下:文件DialogChat.csprivate void b_send_Click(object sender, System.EventArgs e)IPEndPoint remoteEP = new IPEndPoint(remoteIP ,2003);if(tb_send.TextLength>=1024)MessageBox.Show ("发送消息过长,请适当删减后再试");elseudpSocketSend.SendTo(Bsendinfo, remoteEP );udpSocketSend.Close();tb_record.AppendText(record);/将焦点置于最新消息显示之处tb_record.Focus();tb_send.Text=null;当好友的客户端通过UdpReceiveMsg()的接收函数接收到了数据时,先通过控制符判断是否是”MSG”,如果是,则说明是好友发送的普通信息。再调用SelectUser(string str) 用户选择函数,根据字符串中的用户ID号找到发送消息的用户ID。然后将聊天信息交给该好友的DialogChat窗体的MSG属性,这时就会触发一个sender事件,表示收到该好友的信息,从而,就能将信息显示在相应好友的聊天对话框中了。关键代码如下:文件Client.csprivate void SelectUser(string str)for (int i = 0; i < this.OnLine; i+)if (uctrlid = ucARRi.UserId)ucARRi.Msg = msg;文件DialogChat.csprivate void Msg_RecEvent(object sender, MyEventArgs e)tb_record.BeginInvoke(new textBox(TextBoxRec);private void TextBoxRec()switch (msg )default:tb_record.AppendText(record);/将焦点置于最新消息显示之处tb_record.Focus();break;5.3 文件传输模块的分析人们在互联网上聊天时,需要传递一些如图片、文件、资料等东西,这时聊天工具已有的文字聊天已经不能满足人们的这一需求,所以为方便用户的使用,聊天工具给用户提供了文件传输模块,可以让用户在文字聊天的同时,给对方发送一些图片、文件等信息。在功能上是聊天工具更为完善。其实现原理是:首先将外储中的文件以文件流的形式提取到缓存中,然后通信双方通过Socket套结字建立连接,并将缓存中存放的文件流进行发送。用户1向用户2发送文件时,先发送请求信息给用户2,用户2接收到用户1的请求信息后,对用户1发送回应信息,如果用户2同意接收文件请求,则开始文件传输,如果用户2不同意接收文件请求,则停止传输。其流程结构如图7所示。图7 文件传输流程5.4 文件传输模块功能具体实现文件传输是随着互联网应用技术的发展,在聊天软件中产生的一个可以相互之间进行发送文件的新功能模块,它的实现满足了现今用户的需求。首先发送方在聊天对话框中点击文件传输按钮bt_file,就会触发bt_file_Click(object sender, EventArgs e) 事件处理函数,向对方发送一个传送文件的请求。关键代码如下:文件DialogChat.csprivate void bt_file_Click(object sender, EventArgs e)OFDialog = new OpenFileDialog(); OFDialog.ShowDialog();filepath = OFDialog.FileName;FileInfo fileinfo = new FileInfo(filepath);filesize = fileinfo.Length;string filename = fileinfo.Name;sendinfo = "RFS" + this.my_id + "" + myip + "" + filesize+"" +filename ; udpSocketSend.SendTo(Bsendinfo, remoteEP);当接收方接收到控制字符"RFS"后,就调用FileRequest(string str) 好友请求传送文件函数,得知是哪位好友发送的文件请求。这时通过 FileRec 属性来触发UserCtrl_FileEvent(object sender, MyEventArgs e )事件处理函数,通过FileReceiveForm FRForm = new FileReceiveForm ( ) 语句,将文件接收窗体实例化,用FRForm.ShowDialog() 将窗体显示出来,该文件接收窗口有查看资料、接收、拒绝三个按钮。如果用户同意接收文件请求,单击接收按钮,就构造字符串sendinfo = "RSQACC" + myid回应发送端,并开辟了新的文件接收线程Thread fileRec = new Thread(new ThreadStart(FileReceive),等待发送方发送文件。如果选择拒绝接收文件,则构造字符串sendinfo = "RSQREJ"回应发送方,以结束文件传送过程。关键代码如下:文件FileReceiveForm.csstring sendinfo = "RSQACC" + myid;udpSocketSend.SendTo(Bsendinfo, remoteEP);string sendinfo = "RSQREJ"udpSocketSend.SendTo(Bsendinfo, remoteEP);发送端收到接收端的回应,判断接收端的选择并做相应操作,如果对方接受请求则开始发送文件,若决绝则结束文件传送。关键代码如下:文件FileReceiveForm.csTcpListener tcpListener = new TcpListener(2004);tcpListener.Start();TcpClient tcpClient = new TcpClient();tcpClient = tcpListener.AcceptTcpClient();bytes = myNetworkStream.Read(file, 0, file.Length);while (bytes != 0)myFileStream.Write(file, 0, file.Length);bytes = myNetworkStream.Read(file, 0, file.Length);文件FileSendForm.cstcpFile.Connect(u_ip, 2004);while (true)bytes = myFileStream.Read(write, 0, write.Length); if (bytes = 0)break;nsc.Write(write, 0, write.Length);在该过程中接收端调用了FileReceive()文件接收函数进行文件接收,在文件接收函数中,实例化一个tcpListener对象进行监听等待客户端的连接,然后使用两个流对象将接收到的数据写入文件。而发送端则