本科毕业设计论文最终版局域网聊天软件

更新时间:2023-04-05 20:11:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

毕业设计报告(论文)

报告(论文)题目:网络聊天工具的设计与实现

作者所在系部:计算机科学与工程系

作者所在专业:网络工程

作者所在班级: B07522 作者姓名:苏大壮

作者学号: 20074052204 指导教师姓名:魏艳娜

完成时间: 2011-6-15 北华航天工业学院教务处制

北华航天工业学院毕业论文

摘要

随着Internet技术的飞速发展,网络已经成为人们生活中不可缺少的一部分,通过聊天室在线聊天已成为网络上人与人之间沟通、交流和联系的一种方式。

为此,越来越多的网站开始提供在线聊天的功能。与此同时,聊天室也以其方便、快捷、低成本等优势受到众多企业的青睐,很多企业的网站中也加入了聊天室模块,以达到增进企业与消费者之间、消费者与消费者之间相互交流的目的。

本文是软件工程在线聊天室系统的开发说明,重点运用软件工程知识对系统进行分析、设计实现和测试的思想的具体描述,其中包括软件生命周期的三个主要方面:软件定义(问题定义、可行性研究、需求分析)、软件开发(总体设计、详细设计、编码、测试)和运行维护。通过实际的运用软件工程知识处理问题,加强程序的规范性、清晰性、可靠性,并且使得程序易于维护。本软件使用C#进行编写,具有良好的兼容性且易于实现。聊天室操作简洁容易上手、结构简单、查找方便、实用性强。

关键词:网络通信套接字连接

北华航天工业学院毕业论文

Abstract

With the rapid development of Internet technology, network has become people to the indispensable part in life, through online chat has become a chat room on the network communication, communication between people and contact a kind of means.

Therefore, more web sites began to provide online to chat function. At the same time, the chat room with its convenient, quick, low cost advantage by numerous enterprise's favor, the many enterprise website also joined the chat room, so as to promote enterprise module between consumers and consumers and consumers, communication between purpose.

This paper is a software engineering online chat room that focus on the development of the system, using the software engineering knowledge for system analysis, design and test of thought to realize description, including software life cycle of the three main aspects: software definition (problem definition, feasibility study, needs analysis), software development (overall design, detailed design, code, test) and operation and maintenance. Through the practical using the software engineering knowledge processing, strengthen the standardization of program problem, clarity, reliability, and makes the program is easy to maintain. This software using c # for writing, has the good compatibility and easy implementation. Simple operation, easy to use chat room of simple structure, easy search, practical.

Keyword: Network, communication, sockets, connection

北华航天工业学院毕业论文

目录

摘要 (2)

Abstract (3)

目录 (4)

第1章绪论 (1)

1.1课题研究现状分析 (1)

1.1.1本领域内已开展的研究工作 (2)

1.1.2已经取得的研究成果 (3)

1.2选题的目的及意义 (4)

1.3课题研究的主要内容 (5)

第2章系统需求分析 (6)

2.1 问题的提出 (6)

2.2 系统的设计目标 (6)

第3章系统开发的技术背景 (8)

3.1 Socket套接字介绍 (8)

3.2 .NET Framework 2.0介绍 (14)

第4章系统具体实现 (15)

4.1概要设计 (15)

4.2定义服务器端和客户端的通信结构及含义 (16)

4.2.1客户端 (16)

4.2.2服务器端 (17)

4.3客户端具体实现 (17)

4.4服务器端具体实现 (17)

第5章系统测试 (19)

第6章系统模块设计及调试 (20)

6.1 系统登录界面 (20)

6.2 系统维护界面 (20)

6.3 用户聊天界面 (21)

6.3.1聊天室模式 (21)

6.3.2私人聊天模式 (22)

6.4系统开发思路 (22)

6.5需求的总结 (22)

结论 (25)

致谢 (26)

北华航天工业学院毕业论文

参考文献 (27)

附录1 (28)

附录2 (30)

北华航天工业学院毕业论文

第1章绪论

随着现代技术的不断输入和信息化的广泛普及,网络作为一种新兴事物,在近些年得到了前所未有的普及和深入,网络上的各种应用层出不穷,给各个阶层、各个年龄段的用户提供了不同的个性化的服务。而现代中小型企业的领导认识到进一步提高企业信息化的必要性。为使企业能在瞬息万变的信息时代生存下去,适应激烈的市场竞争,现代企业要求正加员工之间的交流和通信能力,尤其是领导和员工之间的共同能力,实时的交流系统就是在这种条件下诞生的。系统开发是一个十分复杂的系统工程。这里对系统开发的基本过程和方法进行介绍,列出相关文档的示例并加以说明。

要提高市场竞争力,就要对市场作充分的调查和详细的研究,同时也要有好的客户服务。企业要在复杂的环境下作出对策。员工与员工员工与领导间的即时交流尤为重要,网络在线聊天系统对于企业来说就是一种交流和通信的平台,本系统能够成为中小型企业的交流通信的理想平台。如能做到信息的及时的反馈,即时的处理并作出相应的行动,将能进一步提高中小型企业在现代经济市场的竞争能力。

网络通信是网络应用的重要体现方面。网上即时通信则是网络应用的重要体现方面。本聊天系统主要应用于小型企业,学校或小型局域网内部使用。本应用程序使短距离交流更加快捷和便利,更能高效率的体现现代即时通信的特点。

本系统能够满足中小型企业,学校的内部网络即时通信的需要,在内部网络正常环境的运营下,提供即时通信的能力,本系统使用Visual C#开发,本系统能够为中小型企业协同工作,相互间的交流提供了有力的工具,运用在局域网的本系统,能够为企业员工的交流提供帮助,有利于提高工作效率。

1.1课题研究现状分析

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。即时通讯市场雏形顿显,有了国际互联网巨头和最大软件公司的融入,即时通讯时代的大

1

北华航天工业学院毕业论文

幕就此徐徐拉开。

当ICQ风行全球的时候,在国内各种仿ICQ的中文IM软件也纷纷推出,时至今日,占据国内的市场的主要是腾讯公司的QQ、微软的MSN、雅虎的雅虎通等。其中腾讯公司的QQ以占据了国内70%以上的市场。

随着IM应用的深入,其功能早已超越了初期的即时文字聊天。表情图标早已成为各个IM软件的标准功能,文件传输、语音/视频聊天、游戏、网上交友等高级功能也正越来越多地被集成进入IM应用。事实表明,现在的IM已不再是一个简单的沟通工具,而是一个信息资讯、交流互动、休闲娱乐中心,IM平台上的语音、视频、音乐点播、信息共享等新应用层出不穷。发展到现在,IM软件越来越成熟,IM产业链也已经形成,已经成为现代人和现代经济中不可或缺的一部份,相信未来IM软件的道路会更加宽广和精彩。

21世纪是信息的时代,随着互联网技术的发展,信息在传递方面也有了崭新的一面。现今聊天软件成为信息传递最为广泛的应用工具,它发挥了即时性通信的特点,可以让用户在第一时间内得到信息的交流,它不仅可以让用户进行文字聊天,而且还增添语音、视频功能。这样可以让网上的好友身临其境的面对面的聊天,让彼此之间更为深入的了解。人性化的设计让每个用户都可以得心应手的使用,从而获得更多人的青睐。Internet的出现连通了整个世界,而聊天软件的出现则连通了每一位网上的用户。随着网络应用的发展,聊天软件已经成为最热门的网络应用之一。经历了近几年突飞猛进的发展之后,即时通讯工具早已不再是简单的互联网通讯工具,它已经成为一个集互动交流、休闲娱乐、信息管理为一体的多元化互联网应用平台。总之,聊天软件的出现给人们彼此之间的沟通带来了无比的方便,人们可以通过聊天软件建立深刻的友情,让人们在互联网上的交流更加充满活力与生机。

1.1.1本领域内已开展的研究工作

聊天软件作为使用最为广泛的即时性通讯工具,它在拥有文字聊天基础功能的同时,为满足用户的需求,还增加了文件传输、语音、视频聊天等主要的功能,成为现在最为主流的网上应用软件。本论文主要对聊天软件的文字聊天、文件传输功能进行分析与研究,总结出实现的相关理论与知识。

1. 理论研究基础

(1)套接字(Sockets)

(2)C# Windows Socket类

2

北华航天工业学院毕业论文

2. 技术层面的支持

Winsock是一套开放的,支持多种协议的Windows下网络编程接口,是Windows网络编程实是上的标准.应用程序通过调用Winsock的API实现相互间的通信,而Winsock利用下层的网络通信协议功能和操作系统调用实现实际的通信工作。

Microsoft Visual 9e4bcd3b376baf1ffc4fad8f (9e4bcd3b376baf1ffc4fad8f)是Microsoft公司为适应Internet高速发展的需要,而推出的新的开发平台(集成开发环境)。2003年,Microsoft 公司发布了9e4bcd3b376baf1ffc4fad8f 2003,提供了在Windows操作系统下开发各类基于.NET Framework 1.1的全新的应用程序开发平台;2005年底,Microsoft公司又发布了基于.NET Framework 2.0的9e4bcd3b376baf1ffc4fad8f 2005开发平台,植入了适用于大型团队开发的各种优秀的复杂功能,并于2006年1月发布了9e4bcd3b376baf1ffc4fad8f 2005 Professional 简体中文版。

1.1.2已经取得的研究成果

QQ:国内用户量第一。在2004年就已经拥有2.26亿注册用户、500多万收费用户,而且每天还在以几十万的数量递增着。与其他中文通讯软件相比,腾讯QQ以其漂亮的界面、合理的设计、良好的易用性、强大的功能(如:隐藏功能、分组功能等),稳定高效的系统运行,赢得了用户的青睐,如果你不嫌它广告较多的话,的确是不错的聊天软件。提供了大量卡通图案,而且引入了立体风格,形象更趋于卡通化。新版QQ同时增加了自定义动态表情。支持网友自定义显示系统表情的行数,灵活方便的快捷键设置,把热键设置为与表情相同的字或字母,炫彩汉字和字母的搭配可与MSN媲美。所以,无论是从用户数量还是公众影响力来看,QQ都是国内即时通讯软件市场上无可争议的“老大”。QQ最不讨人喜欢的是广告大量存在,而且似乎一直在变本加厉;安装的可定制性差,最让人无法忍受的莫过于腾讯浏览器,这个并不是所有人都中意的多窗口浏览器,一旦安装QQ就会被安装,而且会更改很多系统设置,使普通用户被逼无奈只能使用该浏览器;随着视频聊天等功能的整合,QQ的资源消耗十分严重:安装文件的大小大约是MSN的4倍,安装后的文件夹为80MB(MSN为5.5MB),内存占用12.5MB(MSN占用3MB),另外,国外用户较少。

MSN:全球用户量居前,约有5000万用户,国内用户量应该第二。在人们的印象中,MSN更多的偏重于办公阶层用户,傻瓜式操控性让我们能够在最短的时间内掌握它的使用要决。主界面相当的清爽,卡通味不浓。但软件主界面过于宽大,占用了相当的桌面空间,不像QQ一样小巧玲珑。现在的MSN 7.0版本,更给人们一种耳目一新的感觉,对于那些喜欢时尚和追求多变的上班族而言是个不错的选择。MSN最让人津津乐道的功能就是把汉字做成彩色的表情图片,热键设置为同样的字,就可以在聊天时候打出五彩的汉字,效果炫丽。但不支持批量导入导出,可显示出的自定义表情只有10个,用起来还是有诸多不便。

3

北华航天工业学院毕业论文

支持手写;在占用资源上比同类软件优胜;稳定性超强;语音与视频质量上佳,开着语音打CS,一样稳定清晰(QQ则断断续续,听不清楚);最让人兴奋不已的是,从6.0版本开始,可以穿透防火墙进行文件共享。缺点:不能向离线用户发送消息,无法自定义离线状态,在新版本中依然未得到很好的解决;增加用户时也不如QQ方便,须通过其“繁忙”的网页来进行用户的搜索和添加,而且搜索网站还是繁体的。

ICQ:作为同类软件的始祖,目前注册用户超过1.5亿,在全球拥有广泛的用户支持,但缺乏中国本土化支持仍是其最大缺点。

AIM:注册用户数量居全球(不含中国)第二,仅次于ICQ。

UC:作为后起之秀的UC,具有一些QQ会员拥有的功能,其免费网络硬盘服务提供了文件上传、下载服务,功能简单实用。UC普通用户的网民所享有的空间(32MB)是QQ普通用户(16MB)的一倍。更棒的是,只要UC的在线时间累计达到了100小时/500小时,网络硬盘的容量可以分别免费升级为64MB/128MB。UC的聊天功能支持动画的显示和发送。点击UC聊天窗口的按钮,选择本地动画发送,在本地硬盘选择想要发送的图片,确认后选择发送,就可以给在线的好友发送动画图片了。有自动聊天功能,不管在什么时候,只要打开UC,都会有“人”在线亲切地对你嘘寒问暖。如今无论是注册用户还是更有价值的同时在线人数,UC都抢掉QQ百分之五以上的市场份额(QQ依然是霸主,但现在已经无法一手遮天了)。假以时日也许会占领我们后面的一代人。

网易泡泡:在无广告打扰、整合网易服务上做得比较出色。大部分聊天功与QQ是类似,但也有一些特有的功能:支持用户自选图片作为头像;有“常用短语”的服务,提供了许多聊天妙语;可对每个联系人设置选择性隐身,右键单击联系人即可(这点QQ也有一个选项“如果该好友上线,则自动对其隐身”)。

其他比较:

软件名称表情可爱度使用便捷性表情效果创新性

MSN ★★★☆★★★★★★★★★★★★★

朗玛UC ★★★★★★★☆★★★★★★☆

腾讯Q Q ★★★★☆★★★★☆★★★★☆★★★★☆

1.2选题的目的及意义

(1)提供即时通信的能力。.

(2)提高中小型企业在现代经济市场的竞争能力。

(3)能够为企业员工的交流提供帮助。

4

北华航天工业学院毕业论文

1.3课题研究的主要内容

根据网络应用程序的特点,网络在线聊天系统应就有即时,快速的特点。服务器端和客户端应就有不同的功能特性。对于服务器端应能够正确地建立与客户端的连接并能正确地断开,能即时地接收、处理和发送接收到的数据。能及时地通知在线用户当前好友在线状况,能够处理非正常数据的能力。对于客户端应能够快速地检查是否能够连接到服务器端。能正确的获得和反映当前好友在线情况。能够正确的与特定好友交流。能及时地接收到服务器端地数据,并能即时处理数据,并能将处理结果反映给用户。

1. 实时好友登陆

当好友登陆或离开聊天室,服务器端有能力通知所有其他在线用户。

2. 收发消息同步

当一用户向其他的好友发出消息,发送接收端的用户应能及时接收到消息。

3. 服务器关闭通知

当服务器因故障或维护需要暂时关闭,应有通知在线用户的能力。

4. 隐私消息模式

当用户选择发送消息为私聊的模式。其他在线用户不能看到此条消息。

5

北华航天工业学院毕业论文

第2章系统需求分析

随着经济全球化的推进以及企业激烈的竞争,改善企业内部及整个供应链各环节的管理、调度及资源配置,迅速适应客户的新需求和市场新机遇,是企业赢得竞争胜利的决定性因素。

需求分析是软件分析中的一个重要步骤。它的基本任务是要准确地分析出系统应用者的需要,以及系统目标必须具备哪些功能。这些功能必须准确地,完整地体现出用户的要求。

2.1 问题的提出

需求分析是软件分析中的一个重要步骤。它的基本任务是要准确地分析出系统应用者的需要,以及系统目标必须具备哪些功能。这些功能必须准确地,完整地体现出用户的要求。

2.2 系统的设计目标

根据网络应用程序的特点,网络在线聊天系统应就有即时,快速的特点。服务器端和客户端应就有不同的功能特性。对于服务器端应能够正确地建立与客户端的连接并能正确地断开,能即时地接收、处理和发送接收到的数据。能及时地通知在线用户当前好友在线状况,能够处理非正常数据的能力。对于客户端应能够快速地检查是否能够连接到服务器端。能正确的获得和反映当前好友在线情况。能够正确的与特定好友交流。能及时地接收到服务器端地数据,并能即时处理数据,并能将处理结果反映给用户。

服务器端:

(1)能够正确地、无冲突地启动服务器。

(2)监听指定的端口,等待用户的连接。

(3)建立与客户端的逻辑连接,并能通知其他好友。

(4)向新进入的好友发出已上线的好友名单。

(5)接收客户端的消息请求,并能正确无误地处理消息,并能发出消息到客户端。

(6)反映当前在线人数和在线好友状况。

(7)及时地反映发出地消息和聊天消息。

(8)当好友断开与服务器端地连接时,服务器能够正确地断开连接,并通知其他用户。

(9)当用户违反聊天系统规定时,服务器系统管理员能够断开与此用户的连接。

当服务器关闭时,应通知所有用户。

6

北华航天工业学院毕业论文

客户端:

(1)能够正确启动应用程序,并能向服务器发出连接请求。

(2)反映当前好友在线情况。

(3)能够向群体或指定好友发出消息

(4)能够及时接收好友发出消息,并通知用户。

(5)能够正确地断开与服务器端地的连接。

7

北华航天工业学院毕业论文

第3章系统开发的技术背景

3.1 Socket套接字介绍

Winsock是一套开放的,支持多种协议的Windows下网络编程接口,是Windows网络编程实是上的标准.应用程序通过调用Winsock的API实现相互间的通信,而Winsock利用下层的网络通信协议功能和操作系统调用实现实际的通信工作.

1. 套接字(Sockets)

套接字是通信的基石,是支持TCP/IP协议的网络通信的操作单元.可以将套接字看作不同主机间的进程进行双向通信的端点,它构成了单个主机内及整个网络间的编程界面.套接字存在于通信域中.通信域是为了处理一般的线程通过套接字通信而引进的一种抽象概念.套接字通过通常和同一个域中的套接字交换数据(数据交换也可能穿越域的界限,但这时一定要执行某种解释程序).Winsock规范支持单一的通信域,即Internet域.各种进程使用这个域互相之间用Internet协议簇来进行通信(Winsock 1.1以上的版本支持其他的域)。

套接字可以根据通信性质分类,这种性质对于用户时可见的.应用程序一般仅在同一类的套接字间通信.不过只要底层的通信协议允许,不同类型的套接字间也照样可以通信进入九十年代后,随着计算机和网络技术的发展,很多数据处理系统都采用开放系统结构的客户机/服务器网络模式,即客户机提出任务请求,通过网络发送给服务器,由服务器做相应处理,执行被请求的任务,然后将结果返回给客户机。例如:银行ATM的前置机和数据处理的主机之间即构成客户机/服务器网络模式;电话银行的前置机和银行数据处理机之间也构成这种网络模式结构等。这样,如何在前置机和数据主机之间进行信息交换,即进程网络通信,就成为实现这种网络模式的基础。而TCP/IP的套接字技术是解这一问题的有力工具。它从提出时就一直发挥着愈来愈重要的作用,并已成为UNIX操作系统下TCP/IP网络编程标准;甚至WINDOW、JA V A都配有它的通用接口。有了这个强有力的工具,我们可以实现异种机、异种操作系统应用程序间的相互连接和通信。套接字(sockets)是支持TCP/IP协议的网络通信的基本操作单元。可以将套接字看作不同主机间的进程进行双向通信的端点。它构成了在单个主机内及整个网际间的编程界面。一般来说,跨机应用进程之间要在网络环境下进行通信,必须要在网络的每一端都要建立一个套接字,两个套接字之间是可以建立连接的,也是可以无连接的,并通过对套接字的“读”、“写”操作实现网络通信功能。类似于UNIX系统中的I/O概念,像文件那样有打开、读、写、关闭的方式。根据传输数据类型的不同,套按字可分为面向连接的数据套接字(streamsockets)和无连接的数据报套接字(datagramsockets)两种类型:

(1) 字节流套接字

字节流不按记录定界,在TCP/IP协议簇中对应TCP协议,即传输控制协议

8

北华航天工业学院毕业论文

(TransmitionControlProtocol)。它是一个提供给用户进程可靠的全双工的面向连接的协议,大多数INTERNET应用程序如ftp、telnet使用TCP协议。通信端点使用TCP对应的INTERNET地址互相连接,可保证按正确的顺序以及单一和可靠的地址传输数据。由于它是字节流,所以包长包没有限制,信包传输也不重复,因而是一种常用的套接字类型。

流套接字提供双向的,有序的,无重复并且无记录边界的数据流服务,它适应于处理大量数据.网络传输层可以将数据分散或集中到合适尺寸的数据包中。

流套接字是面向连接的,通信双方进行数据交换之前,必须建立一条路径,这样即确定了它们之间存在的路径,又保证了双方都是活动的,可彼此相应的,但在通信双方之间建立一个通信信道需要很多开支.除此以外,大部分面向连接的协议为保证发送无误,可能会需要执行额外的计算机来验证正确性,为此会进一步增加开支。

(2) 数据报套接字

数据报对应记录型数据流,在TCP/IP协议簇中对应UDP协议,即用户数据报协议(UserDatagramProtocol)。利用数据报服务可实现一些简单的网络服务,如网点检测程序PING。由于不建立连接,数据报协议比连接协议快。但不能保证所有数据都准确有序地到达目的地。不保证顺序性、可靠性和无重复性。它是无连接的服务,以独立的信包进行传输,通信端点使用UDP对应的INTERNET地址。双方不需互连,按固定的最大长度进行传输,因而适用于单个报文传输,或较小文件的传输。

数据报套接字支持双向的数据流,但不保证数据传输的可靠性,有序性,和无重复性.也就是说,一个从数据报套接字接受信息的进程有可能发现信息重复,或者和发出时间顺序不同的情况.此外,数据报套接字的一个重要特点是它保留了记录边界。

数据报套接字是无连接的,它不保证接受端是否在监听,类似邮政服务:发信人把信装入邮箱即可,至于收信人是否收到这封信或邮局是否会因为暴风雨未能按时将信件投入收信人处等等,发信人都不得而知.因此,数据报并不十分可靠,需有程序员负责管理数据的排序和可靠性)。

2. 套接字的编程要点及过程

不论何种套接字编程,均采用客户机/服务器方式,其运作过程基本类似,限于篇幅,这里仅介绍字节流套接字。字节流套按字的服务进程和客户进程,在通信前必须创建各自的套接字以建立连接,然后对相应的套接字进行“读”、“写”操作,实现信息的交换。服务器进程创建套接字。服务进程总是先于客户进程启动,服务进程首先调用socket()函数创建自已端的一个字节流套接字,并提供三个参数:网络地址类型,一般取AF_INEF (AdressfamilyInterNET);套接字类型,这里取SOCK_STREAM;网络协议,缺省为TCP/IP 协议,对应参数为0。给套接字地址变量赋初值。在生成套接字后,要用服务器的地址先对sockaddr_in结构变量赋初值。sockaddr_in它只适用INTERNET地址类型,含有INTERNET套接字地址类型、IP端口号、IP地址等信息。地址类型可取定为AF_INET,IP地址对服务器可取任意合法地址INADDR_ANY。IP端口号可由用户设定,但要注意主

9

北华航天工业学院毕业论文

机字节顺序向网络字节顺序的转换。给套接字命名。由socket()函数创建的套接字是没有名字的。所谓命名,就是用bind()函数将服务器地址捆绑到创建的套接字上。服务器进程准备接受来自客户机的连接请求。首先调用listen()函数,让服务器进程进入监听状态;然后调用accept()函数,准备接受客户机的连接信号。无连接请求时,服务进程被阻塞。客户进程调用socket()函数创建已端的套接字。给客户端的sockaddr_in结构体变量赋值。地址类型仍可取AF_INET,端口号和服务器方的端口号相同,欲连服务器的地址通过调用inet_addr()转换得到。也可通过gethostbyname()函数将名字转换为指向hostent结构变量的指针,再将hostent结构变量的地址成员用bcopy()复制到sockaddr_in结构变量上。客户方调用connect()函数向服务进程发出连接请求。当连接请求到来后,被阻塞服务进程的accpet()函数生成一个新的字节流套接字,并返回客户机的sockaddr_in结构变量,从而在服务器应用程序中用新的被赋予客户机地址的套接字同客户进程进行连接,然后向客户方返回接受信号。一旦客户机的套接字收到来自服务器的接受信号,则表示客户机与服务器双方已实现连接。任一方均可向对方发送,也可接收对方发来的数据。这既可通过send()、recv()函数来实现。也可通过read()、write()函数来交换数据。服务进程和客户进程可通过调用shutdown()和colse()关闭套接字上的所有发送和接收操作,撤销套接字并中断连接

3. 基本概念

(1) 带外数据

带外数据,也称为TCP紧急数据,它是相连的每一对流套接字间的一个逻辑上独立的传输通道,带外数据是独立于普通数据传输给用户的,这一抽象要求带外数据设备必须支持每一时刻仅有一个带外数据信息等候发送。对于仅支持带外数据的通信协议来说(例如紧急数据是与普通数据在同一序列发送),系统通常把紧急数据从普通数据中分离出来单独存放。这就允许用户可以在顺序接受紧急数据和非顺序接收紧急数据之间作出选择。

(2) 广播

数据报套接字可以用来向许多系统支持的网络发送广播数据包。要实现这种功能,网络必须支持广播功能。为此系统软件并不提供对广播功能的任何模拟。广播信息将会给网络造成极重的负担,为此它们要求网络上的每台主机都为他们服务,所以发送广播数据包的能力被限制于那些用显式标记了允许广播的套接字中。广播通常应用于以下两种情况:一个应用程序希望在本地网络中找到一个资源。而应用程序对该资源的地址又没有任何先验的知识。

一些重要功能,例如路由要求把它们的信息发送给所有可以找到的邻机。

被广播信息的目的地址取决于这一信息将在何种网络上广播。Internet域中支持一个速记地址-INADDR_BROADCAST用于广播。由于使用广播以前必须绑定一个数据包套接字,所以所有收到的广播消息都带有发送者的地址和端口。

(3) 字节顺序

不同的计算机有时使用不同的字节顺序存储数据。例如,基于Intel处理器的计算机和

10

北华航天工业学院毕业论文

Macintosh计算机使用了相反的字节排序顺序。Intel的字节顺序被成为“Little-Endian”,它与网络的字节排序顺序“Big-Endian”排序顺序相反。

任何从Winsock函数对IP地址和端口号的引用和传送给Winsock函数的IP地址和端口号均是按照网络顺序组织的,这也包括了sockaddr_in这一数据结构中的IP地址域和端口域

考虑到一个应用程序通常用与“时间”服务对应的端口来和服务器连接,而服务器提供某些机制来通知用户使用另一端口。为此getservbyname函数返回的端口已经是网络顺序了,可以直接使用来组织成一个地址,而不需要进行转换。然而如果从主机顺序转换成网络顺序。相应地,如果应用程序希望显示包含于某一地址中地端口号,则这一端口号就必须在被显示前从网络顺序转换到主机顺序。

(4) 阻塞和非阻塞

套接字可以处于阻塞模式或非阻塞模式。调用任何一个阻塞模式地函数,都回产生相同地后果-耗费或长或短地时间等待操作地完成。而当套接字处于非阻塞模式时,API函数的调用会立即返回,大多数情况这些调用都回“失败”,并返回一个WASEWOULDBLOCK 的错误,它意味着请求的操作在调用期间没有时间完成。Winsock的套接字I/O模型可以帮助应用程序判断一个套接字何时可供读写.

套接字的行为在Windows 9X 和Windows NT中与在Windows 3.1中不同.在32位操作系统中,可以采用多线程编程,在不同的线程中使用套接字,这样即使某个线程中的套接字被阻塞,也不会影响应用程序的其他操作,同时也不会在阻塞线程上耗费CPU时间。

(5) Winsock编程原理

进入20世纪90年代后,随着计算机和网络技术的发展,很多数据处理系统都采用开放系统结构的客户机/服务器(Client/Server)网络模型,即客户机向服务器提交请求,服务器对请求做相应的处理兵执行被请求的任务,然后将结构返回给客户机。这种方式隐含了在建立客户机/服务器间通信是的非对称性。

客户机/服务器模型工作时要求有一套为客户机和服务器所共识的惯例来保证服务能够被提供(或被接受),这一套惯例包含了一套协议,它必须在通信的两头都被实现。根据不同的实际情况,协议可能是对称的或非对称的。在对称的协议中每一方都有可能扮演主从角色;在非对称协议中一方被不可改变地认为是主机,而另一方则是从机。一个对称协议地例子是Internet中用于终端仿真地Telnet,而非对称协议地例子是Internet中的http。无论具体的协议是对称的或是非对称的,当服务被提供时必然存在客户进程和服务进程。

一个服务程序通常在一个众所周知地地址监听客户对服务地请求,也就是说,服务进程一直处于休眠状态,直到一个客户对这个服务地址提出连接请求。在这个时刻,服务程序被“惊醒”并且为客户提供服务-对客户地请求作出适当的反应。这一请求/响应的过程可以简单地用以下图表表示,虽然基于连接地服务器应用程序时的标准,但有时服务也可以通过数据报套接字提供。

11

北华航天工业学院毕业论文

(6) C# Windows Socket类

在.Net中,9e4bcd3b376baf1ffc4fad8f.Sockets 命名空间为需要严密控制网络访问的开发人员提供了Windows Sockets (Winsock) 接口的托管实现。9e4bcd3b376baf1ffc4fad8f 命名空间中的所有其他网络访问类都建立在该套接字Socket实现之上,如TCPClient、TCPListener 和UDPClient 类封装有关创建到Internet 的TCP 和UDP 连接的详细信息;NetworkStream类则提供用于网络访问的基础数据流等,常见的许多Internet服务都可以见到Socket的踪影,如Telnet、Http、Email、Echo等,这些服务尽管通讯协议Protocol的定义不同,但是其基础的传输都是采用的Socket。

其实,Socket可以象流Stream一样被视为一个数据通道,这个通道架设在应用程序端(客户端)和远程服务器端之间,而后,数据的读取(接收)和写入(发送)均针对这个通道来进行。

可见,在应用程序端或者服务器端创建了Socket对象之后,就可以使用Send/SentTo 方法将数据发送到连接的Socket,或者使用Receive/ReceiveFrom方法接收来自连接Socket 的数据。

针对Socket编程,.NET 框架的Socket 类是Winsock32 API 提供的套接字服务的托管代码版本。其中为实现网络编程提供了大量的方法,大多数情况下,Socket 类方法只是将数据封送到它们的本机Win32 副本中并处理任何必要的安全检查。如果你熟悉Winsock API函数,那么用Socket类编写网络程序会非常容易,当然,如果你不曾接触过,也不会太困难,跟随下面的解说,你会发觉使用Socket类开发windows 网络应用程序原来有规可寻,它们在大多数情况下遵循大致相同的步骤。

在使用之前,你需要首先创建Socket对象的实例,这可以通过Socket类的构造方法来实现:

public Socket(AddressFamily addressFamily,SocketType socketType,ProtocolType protocolType);

其中,addressFamily 参数指定Socket 使用的寻址方案,socketType 参数指定Socket 的类型,protocolType 参数指定Socket 使用的协议。

下面的示例语句创建一个Socket,它可用于在基于TCP/IP 的网络(如Internet)上通讯。

Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

若要使用UDP 而不是TCP,需要更改协议类型,如下面的示例所示:

Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

一旦创建Socket,在客户端,你将可以通过Connect方法连接到指定的服务器,并通过Send/SendTo方法向远程服务器发送数据,而后可以通过Receive/ReceiveFrom从服务端

12

北华航天工业学院毕业论文

接收数据;而在服务器端,你需要使用Bind方法绑定所指定的接口使Socket与一个本地终结点相联,并通过Listen方法侦听该接口上的请求,当侦听到用户端的连接时,调用Accept完成连接的操作,创建新的Socket以处理传入的连接请求。使用完Socket 后,记住使用Shutdown 方法禁用Socket,并使用Close 方法关闭Socket。其间用到的方法/函数有:

Socket.Connect方法:建立到远程设备的连接

public void Connect(EndPoint remoteEP)(有重载方法)

Socket.Send 方法:从数据中的指示位置开始将数据发送到连接的Socket。

public int Send(byte[], int, SocketFlags);(有重载方法)

Socket.SendTo 方法将数据发送到特定终结点。

public int SendTo(byte[], EndPoint);(有重载方法)

Socket.Receive方法:将数据从连接的Socket 接收到接收缓冲区的特定位置。

public int Receive(byte[],int,SocketFlags);

Socket.ReceiveFrom方法:接收数据缓冲区中特定位置的数据并存储终结点。

public int ReceiveFrom(byte[], int, SocketFlags, ref EndPoint);

Socket.Bind 方法:使Socket 与一个本地终结点相关联:

public void Bind( EndPoint localEP );

Socket.Listen方法:将Socket 置于侦听状态。

public void Listen( int backlog );

Socket.Accept方法:创建新的Socket 以处理传入的连接请求。

public Socket Accept();

Socket.Shutdown方法:禁用某Socket 上的发送和接收

public void Shutdown( SocketShutdown how );

Socket.Close方法:强制Socket 连接关闭

public void Close();

可以看出,以上许多方法包含EndPoint类型的参数,在Internet中,TCP/IP 使用一个网络地址和一个服务端口号来唯一标识设备。网络地址标识网络上的特定设备;端口号标识要连接到的该设备上的特定服务。网络地址和服务端口的组合称为终结点,在.NET 框架中正是由EndPoint 类表示这个终结点,它提供表示网络资源或服务的抽象,用以标志网络地址等信息。.Net同时也为每个受支持的地址族定义了EndPoint 的子代;对于IP 地址族,该类为IPEndPoint。IPEndPoint 类包含应用程序连接到主机上的服务所需的主机和端口信息,通过组合服务的主机IP地址和端口号,IPEndPoint 类形成到服务的连接点。

13

北华航天工业学院毕业论文

3.2 .NET Framework 2.0介绍

目前,.NET Framework的主流版本是2.0,3.0版本已经推出,但还未被广泛使用,当前基于.NET平台的软件开发还是主要集中在2.0版本上的。

.NET Framework是微软为开发应用程序创建的一个富有革命性的新平台。.NET Framework发布的第一个版本是运行在Windows操作系统上的,以后随着技术的成熟与更新,其余的操作系统像Linux、FreeBSD,甚至个人数字助手(PDA)类设备,都有运行在其上的.NET Framework版本。

.NET Framework主要由以下3部分组成,如图3-1:

1. 公共语言运行库(CLR: Common Language Runtime)

2. 基础类库(Base Class Library)

3. VC++.Net 、9e4bcd3b376baf1ffc4fad8f、C#等语言运行库

图3-1 .NET Framework组成

.NET Framework是框架,所有的运行都是建立在这个框架基础之上的(必须安装)。

9e4bcd3b376baf1ffc4fad8f是开发工具(开发平台),也就是集成开发环境,包括编辑器,编译器等等,最重要的就是9e4bcd3b376baf1ffc4fad8f包括.net framework(不需要单独安装)。

由于.net framework没有编译器,那么仅用它就无法把代码编程程序,必须再一定的开发平台上才能使用(所以使用9e4bcd3b376baf1ffc4fad8f)。

14

北华航天工业学院毕业论文

第4章系统具体实现

4.1概要设计

根据调查和研究,得到系统所要处理的数据流程,如图4-1,4-2所示:

图4-1 客户端数据流图

15

北华航天工业学院毕业论文

图4-2 服务器数据流图

4.2定义服务器端和客户端的通信结构及含义

4.2.1客户端

private void login_btn_Click(object sender, EventArgs e) --- 登陆到服务器

private void svrip_tb_TextChanged(object sender,EventArgs e)设置要连接的服务器的地址端口

private void chatrcd_rtb_TextChanged(object sender, EventArgs e)-- 显示好友发送的信息private void send_btn_Click(object sender, EventArgs e) ---- 给好友发送信息

private void user_tb_TextChanged(object sender, EventArgs e) ----- 申请新的用户

private void chatrcd_rtb_TextChanged(object sender, EventArgs e) ---- 显示服务器消息private void msg_tb_TextChanged(object sender, EventArgs e) ----- 显示消息输入文本private void nudge_pb_Click(object sender, EventArgs e)------发送窗口抖动

private void broadcast_rb_CheckedChanged(object sender, EventArgs e)------聊天模式的变更

private void hide_cb_CheckedChanged(object sender, EventArgs e)-------最小化到托盘

16

本文来源:https://www.bwwdw.com/article/wpdl.html

Top