《网络与通信程序设计》课程大作业题目:基于WINSOCK网络聊天室的设计姓名:_张九妹________________________学号:_030920430________________班级:0307404班日期:_2010年6月3日_____________目录1概述.............................................31.1开发背景............................................................................................................................31.2目的……………………………………………………………………………………….22.方案选择..........................................42.1程序体系结构选择.............................................................................................................42.2I/O模型..............................................................................................................................42.3开发环境及技术................................................................................................................52.3.1开发环境..................................................................................................................52.3.2开发技术简介........................................................................................................53系统设计.........................................63.1系统概论.............................................................................................................................63.2系统的功能设计.................................................................................................................63.2.1系统的功能结构......................................................................................................63.2.2系统的功能特点......................................................................................................64系统详细设计......................................64.1数据库设计........................................................................................................................64.1.1创建数据库源名(DSN)........................................................................................64.1.2数据库的构成.........................................................................................................74.2服务器端设计.....................................................................................................................84.3客户端设计.........................................................................................................................94.4服务器端与客户端设计过程……………………………………………………………105系统测试.........................................125.1服务器端如图:...............................................................................................................125.2客户端测试:..................................................................................................................126总结.............................................131概述1.1开发背景随着internet在中国的迅速发展,人们日常生活中越来越多地使用这项新技术来为自己的工作和学习服务。在众多internet关联功能中,有一项新的业务正成为所有用户所津津乐道的交流方式,这就是网上聊天。根据调查现在网民使用现状,网上聊天室的使用百分比具榜首。聊天室是一个通过国际互联信息网络进行多人通讯的系统。在这个信息极其发达的时代,目前我们可以用来进行信息交流的方法非常多,比如电报、电话、电子邮件等通讯手段,这些或者不方便或者有局限性或者有费用的问题,比如电话就是属于费用比较高的一种方式,而且一般情况下不能进行多人会谈,那么一个需要几个人一起讨论的会议就不能举行,一般情况下都需要花费大量的人力物力把这几个人聚集到同一地点才能进行讨论。非但费时费力费钱而且效果也不一定很好。电子邮件则不是一种及时联系的手段,需要一定时间才能到达,只能作为一种辅助交流的手段。但是,聊天室就能很好的解决这个问题,我们不需要聚集在同一地点,各自在不同的地点就可以在聊天室中发言,大家互相讨论。它费用低廉,信息交流速度快,只有这样,才能在这个涌动的社会中加强联系,创造出更多的财富。1.2目的由于计算机网络通信技术的发展,网络的应用越来越广泛,编写网络通信软件的工具和方法有很多,而使用Winsock是其中一种简单有效的方法。基于WINSOCK的网络聊天室开发给出了一个在运行TCP/IP协议服务器程序和客户程序(C/S),服务器端创建监听套接字,并为它关联一个本地地址(指定IP地址和端口号),然后进入监听状态准备接受客户的连接请求。通过WINSOCK模型的理解与应用,目的就是让我们初学者熟悉即学会应用网络结构和网络协议,进行网络编程,学会使用WINSOCK编程接口,懂得各种I/O模型的优缺点,能够熟练使用他们进行程序设计。能够解决网络编程中的一般性问题,如文件传输、错误处理等。由浅入深的了解,无论是WEB服务器,还是各种游戏服务器,每时每刻都要处理成千上万的客户连接,掌握服务器的性能和可伸缩性问题。本文开发了一个聊天室,拥有聊天室具备的基本功能:聊天、多人聊天、文件传输、打印等,使用客户端的程序登录到服务器上,就可以与登录在同一IRC服务器上的客户进行交谈。2.方案选择2.1程序体系结构选择客户机/服务器体系结构(C/S):在这个体系结构中有一个总是在运行的主机是服务器,他可以为来自其他许多成为客户的主机提供服务。服务器方有一个固定的、公开的IP地址,而且重视打开的,所以客户端程序才能通过服务器地址发送封包与之进行通信。客户主机可以随时打开和关闭,客户端程序之间不是直接交流信息,他们仅与服务器通信P2P体系结构:单纯的P2P体系结构中,不再有总是运行的服务器,任意的两台主机对都可以直接相互通信。因为PEER之间可以不经过特定的服务器通信。在这个结构中,不再需要任何及其总是打开的,也不再需要任何及其有固定的IP地址。它的优点一就是它的可伸缩型,缺点是用户高度分散,它们难以管理。本文采用了C/S结构,不单纯使用P2P体系结构。综合理解需要一个中心服务器来维护总体状态,初始化客户端之间的连接等,这可以算是两种体系结构的混合了。2.2I/O模型五种WinSockI/O模型的特点及比较:(1)select模型:select模型是WinSock中应用最广泛的模型之一,核心就是select函数,它可用于判断套接字上是否存在数据,或者能否向一个套接字写入数据。这个函数可以有效地防止应用程序在套接字处于阻塞模式中时,send或recv进入阻塞状态;同时也可以防止产生大量的WSAEWOULDBLOCK错误。select的优势是能够从当个线程的多个套接字上进行多重连接及I/O这就避免了伴随阻塞套接字和多重连接的线程剧增(2)WSAAsyncSelect模型:这个是我个人最喜欢的一个模型。因为它也是以消息为基础的。关键就是WSAAsyncSelect函数,将socket消息发送到hWnd窗口上,然后在那里处理相应的FD_READ,FD_WRITE等等消息优点:WSAAsyncSelect和WSAEventSelect模型提供了读写数据能力的异步通知,但他们不提供异步数据传送,而重叠及完成大unkou提供异步数据的传送。而且它可以在系统开销不大的情况下同时处理很多连接,而select模型还需要建立fd_set结构。缺点:必须要使用一个窗口接收消息-_-b,如果处理成千上万的套接字就力不从心了(3)WSAEventSelect模型:这个也是以时间为基础的网络事件通知,但是与WSAAsyncSelect不同的是,它主要是由事件对象句柄完成的,而不是通过窗口。这个就有点复杂了,一句半句说不清.优点:不需要窗口。缺点:每次只能等待64个事件,所以处理多个套接字时有必要组织一个线程池;所以伸缩性就不如后面的完成端口了(4)重叠模型(OverlappedI/O):这个模型可以使程序能达到更加的系统性能。基本设计原理就是让应用程序使用重叠的数据结构,一次投递一个或多个I/O请求。针对这些提交的请求,在他们完成之后,应用程序可为他们提供服务。它又分为两种实现方法:在事件中使用,还有就是完成例程,每样都不是很好(5)完成端口模型:这个是所有里面最为复杂的I/O模型,最好是在理解了重叠I/O的基础之上再去学习理解。但完成端口提供了最好的伸缩性,往往可以使系统达到最好的性能,是处理成千上万的套接字的首选。从本质上说,完成端口模型要求创建一个windows完成端口对象,该对象通过指定数量的线程,对重叠I/O请求进行管理,以便为已经完成的重叠I/O请求提供服务。本次实验采用了WSAAsyncSelect模型,对于这个简单的聊天室这样重于消息映射的程序很适合。它允许应用程序以W