关键词不能为空

当前您在: 主页 > 英语 >

基于Socket的局域网通信工具的设计与实现的方法

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-13 02:28
tags:

-

2021年2月13日发(作者:rainstorm)











随着计算机科学和


Internet


的飞速发展,网上聊天已成为人们相互交流的一中方


式,与


E-mail



电话相比,聊天服务更具有实时性和有效性。网络版的聊天软件种类繁


多,如

< p>
QQ



OICQ



MSN


等,实现随时随地上网聊天,给人们带来了很大的方便。但


是这些聊天软件也存在以下不足:用户必须连接


Internet< /p>



用户在工作时容易沉迷于网


络聊天。< /p>


为了方便单位企业内部的信息交流,


避免企业内部员工使用类似< /p>


QQ


等软件泄


露内部信息,减少不必要的 财力和人力资源浪费,开发一个局域网聊天软件是非常必要


的。



通过对局域网络通信的学习研究,


本文介绍了局域网通信和实现 聊天器基本通信功


能的流程,并编写了一个基于


Winsock


的局域网络聊天器系统。本系统是运行于


MFC


平台上的


Winsock


局域网聊天软件,该聊天软件 采用


C/S


结构,包括服务器和客户端


两个模块,客户端通过服务端进行通信。服务器模块主要实现了服务器的配置和数据的


传 递;客户端模块主要实现了用户注册、登录、文字聊天和文件传送等功能。该软件采


用多 线程技术支持多用户操作,并采用相关技术进行了优化,加快了文字传递速度。主


要用到 了


Winsock


编程技术、


TCP/ IP


协议、多线程技术、数据库存取技术和各种控件


编程技术。



本文主要分为六个章节,第一章概括的说明聊天器的背景及应 用。第二章阐述实现


局域网络聊天器系统所用到的主要技术。第三章根据聊天器的设计实 现进行需求分析。


第四章详细描述了本系统各个模块的设计。第五章重点介绍各个模块的 实现和测试。第


-


可编辑修改


-




六章是结束语,总结毕业设计中遇 到的问题和自己的收获,感谢给予指导和帮组的老师


和同学。



关键词



局域网;

TCP/IP


协议;


Winsock


;多线程


-


可编辑修改


-




Abstract


With the computer science and the rapid development of Internet, online


chat has become a way of mutual exchange of one, and E-mail, phone calls


with real-time chat services and more effective. Online chat software, a wide


variety,


such


as


QQ,


OICQ,


MSN


and


so


on,


to


achieve


anytime,


anywhere


access to chat, to bring a great convenience. But the lack of chat software,


there are the following: the user must be connected to Internet; users to work


easily addicted to online chat. T


o facilitate the exchange of information within


business units to avoid the use of internal staff and other software like QQ


leaked


internal


information


to


reduce


unnecessary


waste


of


financial


and


human resources to develop a LAN chat software is very necessary.



Through


the


study


of


local


area


network


communication,


this


article


describes the communication and implementation of local area network chat


basic communication process device, and write a Winsock-based local area


network chat control system. The system is running on the platform at the


MFC


Winsock


LAN


chat


software,


chat


software


with


the


C


/


S


structure,


including


both


server


and


client


modules,


the


client


side


to


communicate


through


the


service.


Server


module


main


achievement


of


the


server's


configuration and data transfer; client module main achievement of the user


registration,


login,


text


chat


and


other


functions.


The


software


supports


multi-threading


multi-user


operation,


and


optimized


use


of


relevant


-


可编辑修改


-




technologies,


accelerate


the


transmission


speed


of


text.


Mainly


used


the


Winsock programming, TCP / IP protocol, multi-threading, database access


technology, and various control programming.



This


paper


is


divided


into


six


chapters,


the


first


chapter


general


description of the background of chat devices and applications. The second


chapter to achieve local area network chat system used in the main control


technology. Chapter III device under the design and implementation needs


analysis chat. The fourth chapter describes in detail the design of the various


modules of the system. Chapter V focuses on the implementation and testing


of


each


module.


Chapter


VI


is


the


Conclusion,


summarizes


the


problems


encountered


in


the


design


school


and


their


own


harvest


for


guidance


and


help teachers and students groups.


Key words: LAN




TCP / IP protocol




Winsock




multi-threaded


-


可编辑修改


-

















.


......................................... .................................................. ................................. I


Abstract


................... .................................................. .................................................. ....


I


II


1


绪论



.< /p>


........................................ .................................................. ......................................


1



1.1


背景知识


......... .................................................. .................................................. ....


1


1.2


国内外聊天器系统研究现状


< /p>


........................................ ........................................


1


1.3


选题的目的及意义


< p>
.


................................ .................................................. ..............


3


1.4


本课题研究内容



.


................................. .................................................. .................


3


1.5


本章小结


......... .................................................. .................................................. ....


4


2


实现原理及开发环 境


...................................... .................................................. ...........


5



2.1M


ICROSOFT


O


FFICE


A


CCESS



................................................. ...................................


5 < /p>


2.2


套接字(


S


OCKET



.................... .................................................. .......................


6


2.2.1



Windows So cket


介绍(


Winsock



........................................ ............


8


2.2.2



Socket


的同步和异步方式



......................................... ...............................


9


2.2.3




Socket


开发一个


Server- Client


模型的程序



.


............................


1


0


2.3


多线程技术


< br>............................................... .................................................. ..........


1


1


2.4 TCP/IP


协议、


UDP


协议


......................................... ...........................................


1


2


2.4.1

< br>面向连接的


TCP............................ .................................................. .............


1


3


2.4.2


面向非连接的


UDP


协议



.


.... .................................................. .....................


1


5


2.5C


LIENT


/S

ERVER


结构(客户机


/


服务器 模式)


..................................................


1


5


2.6



编程环境



.


.................................................. .................................................. ..........


1


7


2.6.1


硬件环境


...... .................................................. ...............................................


1


7


2.6.2


软件环境


....................... .................................................. ..............................


1


7


2.6.3


开发工具介绍



.

................................................ ..............................................


1


7


2.7



本章小结



.


.................................................. .................................................. ..........


1


8


3


需求分析


....................... .................................................. ............................................


1


9



3.1



需求分析



.


.................................................. .................................................. ..........


2


0


3.1.1


可行性分析


< p>
............................................ .................................................. .....


2


0


3.2.2


系统性能需求



.

................................................ ..............................................


2


0


3.1.3


系统运行需求



.

................................................ ..............................................


2


1


3.2



数据流图



.


.................................................. .................................................. ..........


2


1


-


可编辑修改


-




3.2.1


顶层数据流图



.

................................................ ..............................................


2


1


3.2.2


一层数据流图



.

................................................ ..............................................


2


1


3.2.3


二层数据流图



.

................................................ ..............................................


2


2


3.3



本章小结



.


.................................................. .................................................. ..........


2


1


4


系统设计


....................... .................................................. ............................................


2


3



4.1



系统实现原理


..................... .................................................. ...............................


2


3


4.2




C/S


架构设计


................................................ .................................................. ...


2


4


4.3



模块设计



.


.................................................. .................................................. ..........


2


6


4.3.1


系统流程图


< p>
............................................ .................................................. .....


2


6


4.3.1.1


系统总体流程图



.

< br>............................................... ....................................


2


6


4.3.1.2


系统客户端流程图


........................... .................................................. ....


2


7


4.3.2


数据库设计



........... .................................................. ......................................


2


7


4.4



界面效果



.


.................................................. .................................................. ..........


2


8


4.5


本章小结


......... .................................................. .................................................. ..


2


9


5


系统实现及测试



.

< br>............................................... .................................................. .......


3


0



5.1



服务端



.


. .................................................. .................................................. .............


3


0


5.1.1


自动配置数据源



.


.............................. .................................................. ..........


3


0


5.1.2


定义服务端的关键结构体



....................................... ...................................


3


1


5.1.2.1


用户信息的结构体


................... .................................................. ..........


3


1


5.1.2.2


在线用户结构体


< /p>


.


............................ .................................................. .....


3


1


5.1.2.3 Socket


信息结构体



.


........................................... ...................................


3


2


5.1.3


启动


winsocket2 ............... .................................................. .......................


3


2


5.1.4


调用两个


WINAPI< /p>


函数


.......................... .................................................. .


3


3


5.1.4.1


接收



client


连接的


WINAPI


函数



.............. ....................................


3


3


5.1.4.2


线程操作处理



WINAPI


函数



.


.. .................................................. .......


3


6


5.1.5


模块功能实现(代码略)



..... .................................................. ...................


3


9


5.1.6


模块界面


...... .................................................. ...............................................


3


9


5.2



客户端



.


. .................................................. .................................................. .............


4


0


5.2.1


登录模块


...... .................................................. ...............................................


4


0


5.2.2


注册模块


....................... .................................................. ..............................


4


2


5.2.3


文字聊天模块



.

................................................ ..............................................


4


4


5.2.3.1


发送消息:



........... .................................................. ...............................


4


4


5.2.3.2


连接信息服务器



.

< br>............................................... ....................................


4


5


-


可编辑修改


-




5.2.3.3


接收消息



............ .................................................. ..................................


4


7


5.2.4


文件传送


....................... .................................................. ..............................


4


8


5.2.4.1


发送文件



............ .................................................. ..................................


4


8


5.2.4.2


接收文件



............ .................................................. ..................................


4


9


5.3



系统测试



.


.................................................. .................................................. ..........


5


1


5.3.1


测试环境



............................................. .................................................. ......


5


1


5.3.2


测试原则



............ .................................................. .......................................


5


2


5.3.3


测试方法及结果



.

< br>............................................... ........................................


5


2


5.4



本章小结



............ .................................................. ...............................................


5


6





结论



.. .................................................. .................................................. ............................


5


7


致谢



....................................... .................................................. .........................................


5


9


参考文献


....................... .................................................. ................................................


6


0









-


可编辑修改


-




1


绪论



1.1




背景知识



近年来,随着全球信息化进 程的不断发展,网络也在飞速发展。出于高效、快速


地处理各种事务的目的,

< p>
越来越多的企业在其内部使用局域网来进行工作。


在内部局


域网的帮助下,企业得以简化信息流程,提高信息交换的速度,从而提高工作效率。

然而,随着企业规模的扩大,业务量的增加,企业内部的信息越来越私密,企业只希


望员工通过内部局域网进行沟通与交流,避免企业内部机密通过


Internet


泄露到外


部。


为了解决上述矛盾,

< p>
人们提出了开发局域网聊天软件的构想,


通过局域网聊天软


件,


企业员工可以随时的进行即时消息传递,


召开网络 会议等,


有利于提高工作消息


效率,同时又保护了企业内部信息 的安全性。






本系统采用基于


Socket


的局域网通信工具的设计与实现的方法。基于


Socket

< p>
的局域网通信软件可以为企业原有的局域网提供一种良好,安全,快速的通信机制。


它的实现无需对企业原有的局域网硬件进行任何改动,


具有实现成本低廉的优点 ,



的使用能有效地降低局域网通信负荷,

提高局域网的使用效率,


可以很好地解决企业


内部局域网的 各种通信需求。




基于


Socket


的局域网聊天工具很好地诠释了


Soc ket


通信的原理,并且在企业


内部通信、教学、讨论等应用中 都具有一定的实用价值。它具有信息收发速度快,保


密性好,占用网络带宽资源低,占用 服务器吞吐能力低,易于编程实现等优点。



基于


Socket


的局域网通信软件应用范围广阔,不但可以处理传统的通信需求 ,


而且也能扩展以适应新型的网络应用,


如网络教育,


数据影音传输等,


拥有广泛的应


用前景。



1.2




国内外聊天器系统研究现状



目前国内 外做聊天系统的公司很多,产品也琳琅满目,国内有诸如腾讯


QQ


、新



UC


、网易泡泡等,国外有著 名的


MSN


(新版改名为


Live M essenger


)以及跨平



Gai m


等。


本人取最具代表性的


QQ



MSN


进行了一些研究,

< br>作为我开发聊天系


统的准备。



腾讯无疑是国内即时通讯市场的霸主,自从


99


年进入即时通讯 领域并迅速占据


市场之后,


其在国内用户数量始终高居榜首,< /p>


即使近几年面对微软


MSN


的强大攻势,


腾讯


QQ


的市场占有率依然稳步增长。 腾讯的成功与其对


QQ


的不断创新和完善是

分不开的。



-


可编辑修改


-




参考了许多网络上的资料,以及自 己通过观察腾讯


QQ


运行时的各种细节。可

以确定腾讯


QQ


是以多服务器提供服务、服务器总控客户端 、客户端之间


UDP


直连


通信的。并且 在两个客户端之间不能建立直连的情况下,才由服务器进行中转通信。



其模型如图


1-1






1-1



腾讯


QQ


服务器


-


客户端模型


1


与腾讯

< p>
QQ


不同,


微软的


MSN Messenger


只使用了


TCP


作 为传输层通信协议,


所有客户端与服务器进行连接,然后通过与服务器的


TCP


连接进行中转通信。



其模型如图


1-2






1-2



MSN


服务器


-


客户端模型


2


-


可编辑修改


-




腾讯使用的模型中,


服务器主要处理客户端各种状态的控制,


可以极大减轻服务

< br>器的处理压力,但其内部协议和实现复杂度都较高。而


MSN

< br>Messenger


所有数据


都要经过服务器,


服务器压力可想而知


(这就是平时很少见到使用


MSN


进行语音视


频聊天的原因)


。< /p>



综合腾讯


QQ


和微软


MSN Messenger


的特点,我打算在我的系统 中尝试建立


其类似腾讯


QQ


的服务器< /p>


-


客户端模型,但以单服务器提供服务。



1.3




选题的目的及意义



随着计算机科学和


Internet


的飞速发展,网上聊天已成为人们相互交流的 一中


方式,与


E-mail


、电话相比 ,聊天服务更具有实时性和有效性。网络版的聊天软件


种类繁多,如

QQ



OICQ



MSN


等,实现随时随地上网聊天,给人们带来了很大的


方便。


但是这些聊天软件也存在以下不足:


用户必须连接


Internet



用户在工作时容


易沉迷于网络聊天。


为了方便单位企业内部的信息交流,


避免企业内部员工使用类似


QQ


等软件泄露内部信息 ,


减少不必要的财力和人力资源浪费,


开发一个局域网聊天


软件是非常必要的。



1.4




本课题研究内容



本文主要阐述了基于


MFC


的多功能局域网聊天器系统的设计、开发和实现,分


别对系统的需求分析、


系统设计、


系统实现 和系统测试等几个方面进行阐述,


具体内


容如下:



(1)


本系统是基于


C /S


模式开发的基于


MFC


的多功能局 域网聊天器系统,


Server


端实时传送

Client


端传送的信息;


Client


端实现用户界面操作;



(2) Server


端设定网络通信


IP


段,

client


端绑定一个端口号;



(3) Server


端完成注册,修改用户信息,查看用户信 息,文字传输,文件传送实


时通讯功能;



(4) Server


端具有实时显示用户活动状态;



(5) Client


端具有登录模块,增强系统安全性;



(6) Client


端具有用户注册模块,方便用户具有独立的帐号;



(7) Client


端具有点对点文字聊天功能,确保通信方 便和隐私性;



(8) Client


端具有文件传送功能,方便局域网内用户文件互相查阅或使用。




-


可编辑修改


-




1.5




本章小结



本章介绍了局域网聊天器的相关背景知识,


国内外的研究现状,


本课题的目的及


意义,


简单的介绍了相关技术的原理,


在最后简单的描述了局域网聊天系统的主要功


能。


-


可编辑修改


-




2



实现原理及开发环境



2.1




Microsoft Office Access


Microsoft Office Access


(前名



Microsoft Access


)是由微软发布的关联式数


据库管理系统。


它结合了



Microsoft Jet Database Engine




图形用户界面两项特


点,是



Microsoft Office


的成员之一。另外,


Access


还是


c


语言的一个函数名和一


种交换机的主干道模式。



导入导出报表的生成程序,


当时有能力和到这项任务的复杂报告创造,


没有另一


受欢迎数据库报表程序的生成程序充满特色和强有力


-


水晶报告。


MSDE(


微软公司


SQL


服务器桌面发动机


) 2000


,袖珍版本的


MSSQL


服务 器


2000


,被包括开发版的


办公室< /p>


XP


并且被用于进入可能作为除之外的另一种选择


JET


数据库引擎。




自从


MS Access 2000 (Jet 4.0)


,开发人员可以在查询中设定参数,这跟预存程


序很相似的,但这些



预存程序



只能处理一个程序.当资料表内数据发生变化时,它


确实允许形式包含被引发的代码,< /p>


使用是普通的透过查询和其他技术在进入营运储存


的程序在方面< /p>


RDBMS


支援这些的。



Access


的优点:



(1)


存储方式简单,易于维护管理




Access


管理的对象有表、查询 、窗体、报表、页、宏和模块,以上对象都存放


在后缀为(


.m db



.accdb


)的数据库文件中 ,便于用户的操作和管理。




(2)


面向对象



Access


是一个面向对象的开发工具,利用面向对象的方式将数据


库系统中的各种功能 对象化,将数据库管理的各种功能封装在各类对象中。它将一


个应用系统当作是由一系列 对象组成的,


对每个对象它都定义一组方法和属性,


以定


义该对象的行为和用法,


用户还可以按需要给对象扩展方法和属性。< /p>


通过对象的方法、


属性完成数据库的操作和管理,


极大地简化了用户的开发工作。


同时,


这种基于面向< /p>


对象的开发方式,使得开发应用程序更为简便。




(3)


界面友好、易操作




Access


是一个可视化工具,风格与


Window s


完全一样,用户想要生成对象并


应用,只要使用鼠标进行拖放 即可,非常直观方便。系统还提供了表生成器、查询生


成器、


报 表设计器以及数据库向导、


表向导、


查询向导、


窗体向导、


报表向导等工具,


使得操作简便,容易使用 和掌握。




-


可编辑修改


-




(4)


集成环境、处理多种数据信息




Access


基于


Windows


操作系统下的集成开发环境,该环境集成了各种向导和


生成器工具,极大 地提高了开发人员的工作效率,使得建立数据库、创建表、设计用


户界面、设计数据查询 、报表打印等可以方便有序地进行。




(5) Access


支持


ODBC< /p>


(开发数据库互连,


Open Data Base Conne ctivity




利用


Access


强大的


DDE


(动态数据交换)和


OLE


(对象的联接和嵌入)特性,可


以在一个数据表中嵌入位图、声音、


Excel

表格、


Word


文档,还可以建立动态的数


据库报表和窗体等。


Access


还可以将程序应用于 网络,并与网络上的动态数据相联


接。利用数据库访问页对象生成


HTML


文件,轻松构建


Internet/Intrane t


的应用。




(6)


支持广泛,易于扩展,弹性较大



< /p>


能够将通过链接表的方式来打开


EXCEL


文件、格式化文本文件等,这样就可以


利用数据库的高效率对其中的数据进行查询、处 理。还可以通过以


Access


作为前台


客户端,以


SQL Server


作为后台数据库的方式(如


ADP


)开发大型数据库应用系


统。< /p>




总之,


Ac cess


是一个既可以只用来存放数据的数据库,也可以作为一个客户端


开发工具来进行数据库应用系统开发;即可以开发方便易用的小型软件,也可以用


来开发大型的应用系统。



Access


的缺点:



ACCESS


是小型数据库,


既然是小型就有它的局 限性


(下面关于性能方面的缺点


仅指用


Access


作为数据库的情况下,不包括用


Access


作为客户端前台,用


SQL


Server


作为后台数据库的情况):




(1).


数据库过大,一般百


M


以上(纯数据,不包括窗体、报表等客户端对象)性


能会变差。




(2).


虽然理论上支 持


255


个并发用户,但实际上根本支持不了那么多,如果以只


读方式访问大概在


100


个用户左右, 而如果是并发编辑,则大概在


10-20


个用户。




(3).


记录数过多, 单表记录数过百万性能就会变得较差,如果加上设计不良,这


个限度还要降低。




不能编译成可执行文件(

< br>.exe


),必须要安装


Access

< br>运行环境才能使用。



2.2




接字(


Socket




套接字(


Socket< /p>


)是通信的基石,是支持


TCP/IP


协 议的网络通信的基本操作单


-


可编辑修改


-




元。


可以将套接字看作不同主机间的进程进行双向通信的端点,


它构成了单个主机内


及整个网络间的编程界面。


套接字存在于通信域中,

< br>通信域是为了处理一般的线程通


过套接字通信而引进的一种抽象概念。套接字通常 和同一个域中的套接字交换数据


(数据交换也可能穿越域的界限,但这时一定要执行某种 解释程序)


。各种进程使用


这个相同的域互相之间用

< p>
Internet


协议簇来进行通信。



套接字可以根据通信性质分类,


这种性质对于用户是可见的。

< p>
应用程序一般仅在


同一类的套接字间进行通信。


不 过只要底层的通信协议允许,


不同类型的套接字间也



照样可以通信。套接字有三种不同的类型:流套接字、数据报套接字和原始套接字。



流套接字(


SOCK_STREAM


):流套接字用于提供面向连接、可靠的数据传输


服务。该服务将保证数据能 够实现无差错、无重复发送,并按顺序接收。流套接字之


所以能够实现可靠的数据服务, 原因在于其使用了传输控制协议,即


TCP


< br>The


Transmission Control Protocol


)协议。




数据报套接字(


SOCK_DGRAM


):数 据报套接字提供了一种无连接的服务。该


服务并不能保证数据传输的可靠性,数据有可能 在传输过程中丢失或出现数据重复,


且无法保证顺序地接收到数据。

数据报套接字使用


UDP



Use r Datagram Protocol



协议进行数据的传 输。


由于数据包套接字不能保证数据传输的可靠性,


对于有可能 出


现的数据丢失情况,需要在程序中做相应的处理。




原始套接字(


SOCK_RAW


):原始套接字与标准套接字(标准套接字指的是前


面介绍的流套接 字和数据报套接字)


的区别在于:


原始套接字可以读写内核没有 处理



IP


数据包,而流套接字只能读 取


TCP


协议的数据,数据报套接字只能读取

< br>UDP


协议的数据。因此,如果要访问其他协议发送数据必须使用原始套接字。< /p>



套接字的工作原理可以简单描述:


要通 过互联网进行通信,


你至少需要一对套接


字,其中一个运行于客 户机端,我们称之为


ClientSocket


,另一个运行于 服务器端,


我们称之为



ServerSocket




根据连接启动的方式以及本地套接字要连接的目标,


套接字之间的连接 过程可以


分为三个步骤:服务器监听,客户端请求,连接确认。



所谓服务器监听,


是服务器端套接字并不定位具体的客户端套接 字,


而是处于等


待连接的状态,实时监控网络状态。

< p>


所谓客户端请求,


是指由客户端的套接字提出连 接请求,


要连接的目标是服务器


端的套接字。

< br>为此,


客户端的套接字必须首先描述它要连接的服务器的套接字,


指出


服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。



所谓连接确认,


是指当服务器端套接 字监听到或者说接收到客户端套接字的连接


请求,


它就响应客户 端套接字的请求,


建立一个新的线程,


把服务器端套接字的描述


-


可编辑修改


-




发给客户端,

一旦客户端确认了此描述,


连接就建立好了。


而服务器端套 接字继续处


于监听状态,继续接收其他客户端套接字的连接请求。



以上过程可以通过图


2-1


来描述 :




监听状态


连接请求


发送服务端


Scoket


描 述


确认服务端


Socket


描述


服务器



2-1 Socket


建立过程



客户端



2.2.1



Windows Socket


介绍 (


Winsock






U.C.


Berkeley


大学


BSD


UNIX


中流行的


Socket


接口为范例定义了一套


microsoft Windows


下网络编程接口。


它不仅包含了人们所熟悉的


Berk eley Socket


风格的库函数;


也包含了一组针对


Windows


的扩展库函数,


以使程序员 能充分地利



Windows


消息驱动 机制进行编程。


Windows Sockets


规范本意在于 提供给应用


程序开发者一套简单的


API



并让各家网络软件供应商共同遵守。


此外,


在一个特定


版本


Windows


的基础上,


Windows Sockets


也定义了一个二 进制接口(


ABI



,以


此来保证应用


Windows Sockets API

的应用程序能够在任何网络软件供应商的符合


Windows Sockets


协议的实现上工作。因此这份规范定义了应用程序开发者能够使


用,


并且网络软件供应商能够实现的一套库函数调用和相关语义。


遵 守这套


Windows


Sockets


规范的网络软件,我们称之为


Windows


Socket s


兼容的,而


Windows


Soc kets


兼容实现的提供者,我们称之为


Windows So ckets


提供者。一个网络软件


供应商必须百分之百地实现< /p>


Windows Sockets


规范才能做到现


Windows Socket s


兼容。


任何能够与


Windows Sockets


兼容实现协同工作的应用程序就被认为是具有


W indows


Sockets


接口。我们称这种应用程序为< /p>


Windows


Sockets


应用程 序。


Windows Sockets


规范定义并记录了如何使 用


API



Internet


协议族



IPS


,通常


我们指的是


TCP/IP


)连接,尤其 要指出的是所有的


Windows


Sockets

< p>
实现都支持


流套接口和数据报套接口,


应用程序调 用


Windows Sockets



API


实现相互之间的


通讯。


Wind ows Sockets


又利用下层的网络通讯协议功能和操作系统调用实现实际


-


可编辑修改


-




的通讯工作。



选定

< br>WINDOWS


平台开发网络通信程序,可以选择


WIN DOWS



SOCKETS


编程接口,


Windows Sockets


是一套开放的、支持多种协议 的


Windows


下的网络


编程接口。 现在的


Winsock


已经基本上实现了与协议无关,你可以使 用


Winsock


来调用多种协议的功能,但较常使用的是


TCP/IP


协议。


Windows


sockets


无疑是


我们进行网络编程的 利器。


所有的


Windows Sockets


实现都支持流套接口和数据报


套接口。应用程序调用


W indows


Sockets



AP I


实现相互之间的通讯。


Windows

Sockets


又利用下层的网络通讯协议功能和操作系统调用实现实际的通讯工作 。


它们


之间的关系如图


2-2


所示:

















应用程序


1


应用程序


2


网络编程界面,例如


Windows Sockets


网络通讯协议服务界面,例如


TCP/IP


操作系统,例如


WindowsXP


物理通讯介质



2-2 Windows Sockets


实现通讯工作的各层关系图





2.2.2



Socket


的同步和异步方式



所谓


socket


通常也称作



套接字



,应用程序通常通过



套接字



向网络 发出请求


-


可编辑修改


-




或者应答网络请求。对于一个网络 连接来说,套接字是平等的,并没有差别,不因为


在服务器端或在客户端而产生不同级别 。



所谓


Socket


的同步方式,就是发送方发送数据包以后,不等待接收方响应,就


接着发送下一 个数据包。


Socket


的异步方式,就是当发送方发送一个数 据包以后,


一直等到接收方响应后,才接着发送下一个数据包。



关于套接字还有阻塞和非阻塞之分:阻塞套接字是指执行此套接字的网络调用

< p>
时,


直到调用成功才返回,


否则此套接字就一直阻 塞在网络调用上。


而非阻塞套接字


是指在执行此套接字的网络调 用时,不管成功与否,都立即返回。在


Windows


网络


通信软件的开发中,最常用的方法就是异步非阻塞套接字。



2.2.3




Socket


开发一个


Server- Client


模型的程序



开发原理:




服务器,使用


ServerSocket


监听指定的端口,端 口可以随意指定(由于


1024


以下的端口通常属于保留端口,


在一些操作系统中不可以随意使用,


所以建议使用大

< p>


1024


的端口),等待客户连接请求,客户连 接后,会话产生;在退出客户端后,


关闭连接。



客户端,使用


Socket


对网络上某一个服务器的 某一个端口发出连接请求,一旦


连接成功,连接成功;客户端退出后,关闭


Socket


。客户端不需要指定打开的端口,


通常 临时的、动态的分配一个


1024


以上的端口。



Socket


接口是


TCP /IP


网络的


API



Socket


接口定义了许多函数或例程,程序


员可以 用它们来开发


TCP/IP


网络上的应用程序。要学

< p>
Internet


上的


TCP/IP


网络编


程,必须理解


Socket

< br>接口。网络的


Socket


数据传输是一种特殊的


I/O



Socket



是一种文件描述符。


Socket


也具有一个类似于打开文件的函数调用


Socket()


,该函


数返回一个整型的


Socket


描述符 ,随后的连接建立、数据传输等操作都是通过该


Socket


实 现的。



常用的


Socket


类型有两种:


流式


Socket



SOCK_STREAM



和数据报式


Socket



SOCK_ DGRAM


)。流式是一种面向连接的


Socket

< p>
,针对于面向连接的


TCP


服务

< br>应用;数据报式


Socket


是一种无连接的

< p>
Socket


,对应于无连接的


UDP

< p>
服务应用。


为了建立


Socket


,程序可以调用


Socket


函数,该函数返回一个类 似于文件描述符






socket








int


socket(int


domain,


int


type,


int


protocol);domain


指明所使用的协议族,通常为


AF_INET


,表示互联网协议族



TCP/IP







type






s ocket





SOCK_STREAM



S OCK_DGRAM



Socket


接 口还定义了原始


Socket



SOC K_RAW


),允许程序使


用低层协议;


protocol


通常赋值


0



Socket()


调用返回一个整型


soc ket


描述符,你


-


可编辑修改


-




可以在后面 的调用使用它。


Socket


描述符是一个指向内部数据结构的 指针,它指向


描述符表入口。调用


Socket


函数时,


socket


执行体将建立一个


Socket


,实际上



建立 一个


Socket


意味着为一个


Soc ket


数据结构分配存储空间。



So cket


执行体为


你管理描述符表。


两 个网络程序之间的一个网络连接包括五种信息:


通信协议、


本地


协议地址、本地主机端口、远端主机地址和远端协议端口。


So cket


数据结构中包含


这五种信息。


socket


在测量软件中的使用也很广泛。



2.3




线程技术



CPU


生产商为了提高


CPU


的性能, 通常做法是提高


CPU


的时钟频率和增加缓

存容量。


不过目前


CPU


的频率越 来越快,


如果再通过提升


CPU


频率和 增加缓存的方


法来提高性能,往往会受到制造工艺上的限制以及成本过高的制约。



尽管提高


CPU


的 时钟频率和增加缓存容量后的确可以改善性能,


但这样的


CPU


性能提高在技术上存在较大的难度。实际上在应用中基于很多原因,

CPU


的执行单


元都没有被充分使用。如果


CPU


不能正常读取数据(总线


/

内存的瓶颈),其执行单


元利用率会明显下降。另外就是目前大多数执行线程缺乏< /p>


ILP



Instruction- Level


Parallelism


,多种指令同时执行)支 持。这些都造成了目前


CPU


的性能没有得到全


部的发挥。因此,


Intel


则采用另一个思路去提高


CPU


的性能,让


CPU


可以同时执


行多重线程,就能够让


CPU

< p>
发挥更大效率,即所谓



超线程(


Hyper-Threading



简称



HT





技术。超线程技术就是利用特殊的硬件指令,把两个逻辑内核模拟成两


个物理芯片,


让单个处理器都能使用线程级并行计算,


进而兼容多线程操作系统和软


件,减少了


CPU


的闲置时间,提高的


CPU


的运行效率。



采用超线程即是可在同一时间里,


应用程 序可以使用芯片的不同部分。


虽然单线


程芯片每秒钟能够处理成 千上万条指令,但是在任一时刻只能够对一条指令进行操


作。而超线程技术可以使芯片同 时进行多线程处理,使芯片性能得到提升。



超线程技术是在一 颗


CPU


同时执行多个程序而共同分享一颗

CPU


内的资源,



论上要像两颗


CPU


一样在同一时间执行两个线程,


P4


处理器需要多加入一个


Logical


CPU Pointer


(逻辑处理单元)。因此新一代的


P4 HT< /p>



die


的面积比以往的


P4



大了


5%


。而其余部分如


ALU


(整数运算单元)、


FPU


(浮点运算单元)、


L2 Cache


(二级缓存)则保持不变,这些部分是被分享的。



虽然采用超线程技术能同时执行两个线程,但它并不象两个真正的


CPU


那样,


每个


CPU

< p>
都具有独立的资源。当两个线程都同时需要某一个资源时,其中一个要暂


时 停止,


并让出资源,


直到这些资源闲置后才能继续。

< p>
因此超线程的性能并不等于两



CPU

< p>
的性能。



英特尔


P4


超线程有两个运行模式,


Single Task Mode


(单任务模式)



Multi


-


可编辑修改


-




Task Mode


(多任务模式),当程序不支持


Multi-Proc essing


(多处理器作业)时,


系统会停止其中一个逻辑< /p>


CPU


的运行,


把资源集中于单个逻辑< /p>


CPU


中,


让单线程程

< br>序不会因其中一个逻辑


CPU


闲置而减低性能,


但由于被停止运行的逻辑


CPU


还是会


等待工作,占用一定的资源,因此


Hyper-Threading CPU


运行


Single Task Mode


程序模式时,有可能达不到不带超线程功能的


CPU


性 能,但性能差距不会太大。也


就是说,


当运行单线程运用软件时 ,


超线程技术甚至会降低系统性能,


尤其在多线程


操作系统运行单线程软件时容易出现此问题。



在计 算机编程中,


一个基本的概念就是同时对多个任务加以控制。


许 多程序设计


问题都要求程序能够停下手头的工作,


改为处理其他 一些问题,


再返回主进程。


可以


通过多 种途径达到这个目的。最开始的时候,那些掌握机器低级语言的程序员编写


一些



中断服务例程



,< /p>


主进程的暂停是通过硬件级的中断实现的。


尽管这是一种有用


的方法,


但编出的程序很难移植,


由此造成 了另一类的代价高昂问题。


中断对那些实


时性很强的任务来说是 很有必要的。


但对于其他许多问题,


只要求将问题划分进入独< /p>


立运行的程序片断中,使整个程序能更迅速地响应用户的请求。



多线程是为了同步完成多项任务,


不是为了提高运行效率,


而是为了提高资源使


用效率来提高系统的效率。线程是在同一时间需 要完成多项任务的时候实现的。



多线程在构建大型系统的时候 是需要重点关注的一个重要方面,特别是在效率


(系统跑得多快)和性能(系统工作正常 )之间做一个权衡的时候。恰当的使用多线


程可以极大的提高系统性能。使用多线程的好 处有以下几点:



?



使用线程可以把占据长时间的程序中的任务放到后台去处理;



?



用户界面可以更加吸引人,


这样比如用户在点击了一个按钮去触发某些时间


的处理,可以弹出一个 进度条显示处理的进度;



?



程序的运行速度可能加快;



?



在一些等待的任务实现上如用户输 入、文件读写和网络收发数据等,线程就


比较有用了,在这种情况下我们可以释放一些珍 贵的资源如内存占用等。



2.4




TCP/IP


协议、


UDP


协议



网际协议


IP



TCP/IP


的心脏,也是网络层中最重要的协议。



IP

< br>层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并


把该数 据包发送到更高层


---TCP



UD P


层;


相反,


IP

层也把从


TCP



UDP


层接收


-


可编辑修改


-




来的数据包传送到更低层。


IP


数据包是不可靠的,因为


IP

< p>
并没有做任何事情来确认


数据包是否按顺序发送的或者被破坏。

< p>
IP


数据包中含有发送它的主机地址(源地址)


和 接收它的主机的地址(目的地址)




如果


IP


数据包中有已经封好的


TCP


数据包,那么


IP


将把他们向‘上’< /p>



传送到


TCP


层。


TCP


将包排序并进行错误检查,同时实现虚电路间的连接 。


TCP


数据包中


包括序号和确认,所 以未按照顺序收到的包可以被排序,而损坏的包可以被重传。


UDP


TCP


位于同一层,


但对于数据 包的顺序错误或重发。


因此,


UDP


不 被应用于


那些使用虚电路的面向连接的服务


UDP


主要用于那些面向查询


---


应答的服务。



TCP



UDP


服务通常有一个客户


/


服务器的关系。


两个系统间的多重连接是这样


相互确认并协调一致的,


TCP



UDP


连接唯一地 使用每个信息中的如下四项进行确


认:




2-1



IP


地址



发送包的


IP


地址


目的


IP


地址



接收包的


IP


地址


源端口



源系统上的连接的端口



目的端口



目的系统上的连接的端口



端口是一个 软件结构,


被客户程序或服务进程用来发送和接收信息。


一个端 口对


应一个


16


比特的数。服务进程通 常使用一个固定的端口,


例如,


SMTP


使用


25


。这


些端口号是“广为人知 ”的,因为在建立与特定的主机或服务的连接时,需要这些地


址和目的地址进行通讯。< /p>



2.4.1


面向连接的


TCP


“面向连接”


就是在正式通信前必须要与对方建立起连接。


比如你给别人打电话,


必须等线路接通了、对方拿起话筒才能相互通话。




TCP



Transmission


Control


Protocol


, 传输控制协议)是基于连接的协议,


也就是说,在正式收发数据前,必须和对方建立可靠 的连接。一个


TCP


连接必须要


经过三 次



对话



才 能建立起来,其中的过程非常复杂,我们这里只做简单、形象的介


绍,你只要做到能够理 解这个过程即可。我们来看看这三次对话的简单过程:主机


A


向 主机


B


发出连接请求数据包:“我想给你发数据,可以吗?”, 这是第一次对话;


-


可编辑修改


-




主机


B< /p>


向主机


A


发送同意连接和要求同步(同步 就是两台主机一个在发送,一个在


接收,协调工作)的数据包:“可以,你什么时候发? ”,这是第二次对话;主机


A


再发出一个数据包确认主机


B


的要求同步:“我现在就发,你接着吧!”,这是第


三次对话。三次“对话”的目的是使数据包的发送和接收同步,经过三次“对话”之

后,主机


A


才向主机


B

< p>
正式发送数据。



TCP


协议能为应用程序提供可靠的通信连接,


使一台计算机发出的字节流无差错


地发往网络上的其他计算机,对可靠性要求高的数据通信系统往往使用


TCP


协议传


输数据。





2-3


本地连接


TCP


我们来做一个实验,


用计算机


A


(安装

Windows 2000 Server


操作系统)


从< /p>


“网


上邻居”上的一台计算机


B


拷贝大小为


8,644,608


字节的文件,通 过状态栏右下角


网卡的发送和接收指标就会发现:


虽然是数据流 是由计算机


B


流向计算机


A

< p>


但是计


算机


A


仍发送了


3,456


个数据包,如上图所示。这 些数据包是怎样产生的呢?因为


文件传输时使用了


TCP/IP


协议,


更确切地说是使用了面向连接的


TCP


协议,


计算机


A


接收数据包的时候,要向计算机


B


回发数据包,所以也 产生了一些通信量。





2-4


网络统计





果事



用网



监视




视 网



流量


,就




现由



产 生


的数






9,478,819


字节,比文件大 小多出


10.96%


(如上图所示),原因不仅在于数据包和< /p>


帧本身占用了一些空间,而且也在于


TCP


协议面向连接的特性导致了一些额外的通


信量的产生。



-


可编辑修改


-




2.4.2

面向非连接的


UDP


协议



“面向非连接”


就是在正式通信前不必与对方先建立连接,

< p>
不管对方状态就直接


发送。


这与现在风行的手机短 信非常相似:


你在发短信的时候,


只需要输入对方手机


号就


OK


了。




UDP



User Data Pro tocol


,用户数据报协议)是与


TCP

相对应的协议。它是


面向非连接的协议,它不与对方建立连接,而是直接就把数据包 发送过去!





2-5


本地连接


UDP


UDP


适用于一次只传送少量数据、对可靠性要求不高的应用环境。比如,我们


经常 使用“


ping


”命令来测试两台主机之间

TCP/IP


通信是否正常,其实“


ping


”命


令的原理就是向对方主机发送


UDP

< p>
数据包,然后对方主机确认收到数据包,如果数


据包是否到达的消息及时反 馈回来,那么网络就是通的。例如,在默认状态下,一次



pi ng


”操作发送


4


个数据包(如上图所 示)。大家可以看到,发送的数据包数量



4

< br>包,收到的也是


4


包(因为对方主机收到后会发回一个确 认收到的数据包)。


这充分说明了


UDP


协议是面向非连接的协议,没有建立连接的过程。正因为


UDP


协议没有连接的过程,


所以它的通信效果高;


但也正因为如此 ,


它的可靠性不如


TCP


协议高。


QQ


就使用


UDP


发消息,因此有时会出现收不到消息的情况。



2.5




C lient/Server


结构(客户机


/

服务器模式)



Client/Server


结构


(C/S


结构


)


是大家熟知的客户机和服务器结构。


它是软件系统

体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到


Clien t




Server

< br>端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是


Client/ Server


形式的两层结构,由于现在的软件应用系统正在向分布式的


Web



用发展,


Web



Client/Server


应用都可 以进行同样的业务处理,应用不同的模块


共享逻辑组件;


因此,


内部的和外部的用户都可以访问新的和现有的应用系统,


通过< /p>


现有应用系统中的逻辑可以扩展出新的应用系统。这也就是目前应用系统的发展方


向。



-


可编辑修改


-




C/S


结 构的优点是能充分发挥客户端


PC


的处理能力,很多工作可以在 客户端处


理后再提交给服务器。对应的优点就是客户端响应速度快。缺点主要有以下几个 :



(1).


只适用于局域网。而随着 互联网的飞速发展,移动办公和分布式办公越来越


普及,


这需要 我们的系统具有扩展性。


这种方式远程访问需要专门的技术,


同 时要对


系统进行专门的设计来处理分布式的数据。




(2).


客户端需要安装专用的客户 端软件。首先涉及到安装的工作量,其次任何一


台电脑出问题,


如病毒、


硬件损坏,


都需要进行安装或维护。

< br>还有,


系统软件升级时,


每一台客户机需要重新安装,其 维护和升级成本非常高。




(3).


对客户端的操作系统一般也会有限制。可能适应于


win200 0



Windows


XP

< p>


但不能用于


Windows7

< br>。


或者不适用于微软新的操作系统等等,


更不用说


Linux



Unix


等。



C/S


架构软件的优势与劣势:




1


)应用服务器运行数据负荷较轻。最简 单的


C/S


体系结构的数据库应用由两


部分组成,


即客户应用程序和数据库服务器程序。


二者可分别称 为前台程序与后台程


序。运行数据库服务器程序的机器,也称为应用服务器。一旦服务器 程序被启动,就


随时等待响应客户程序发来的请求;


客户应用程 序运行在用户自己的电脑上,


对应于


数据库服务器,

< p>
可称为客户电脑,


当需要对数据库中的数据进行任何操作时,


客户程


序就自动地寻找服务器程序,


并向其发出请求 ,


服务器程序根据预定的规则作出应答,


送回结果,应用服务器 运行数据负荷较轻。




2

< p>
)数据的储存管理功能较为透明。在数据库应用中,数据的储存管理功能,


是由服务器程序和客户应用程序分别独立进行的,


前台应用可以违反的规则,

< p>
并且通


常把那些不同的(不管是已知还是未知的)运行数据,在服务器程序 中不集中实现,


例如访问者的权限,


编号可以重复、

< p>
必须有客户才能建立定单这样的规则。


所有这些,


对于工作在前台程序上的最终用户,是



透明

< br>”


的,他们无须过问(通常也无法干涉)


背后的过程,< /p>


就可以完成自己的一切工作。


在客户服务器架构的应用中,


前台程序不


是非常



瘦小




麻烦的事情都交给了服务器和 网络。



C/S


体系的下,

< p>
数据库不能真


正成为公共、专业化的仓库,它受到独立的专门管理。




3


< p>
C/S


架构的劣势是高昂的维护成本且投资大。首先,采用


C/S


架构,要选


择适当的数据库平台来实现数据库数 据的真正



统一



使分布于两地的数据同步完全


交由数据库系统去管理,< /p>


但逻辑上两地的操作者要直接访问同一个数据库才能有效实


现,有 这样一些问题,如果需要建立



实时



的数据同步,就必须在两地间建立实时的


通讯连接,

< p>
保持两地的数据库服务器在线运行,


网络管理工作人员既要对服务器维护< /p>


管理,


又要对客户端维护和管理,


这需要 高昂的投资和复杂的技术支持,


维护成本很


高,维护任务量大。




-


可编辑修改


-




其次,传统的

C/S


结构的软件需要针对不同的操作系统系统开发不同版本的软

< br>件,由于产品的更新换代十分快,代价高和低效率已经不适应工作需要。




2.6


编程环境



2.6.1


硬件环境



?



处理器:


Intel Pentium PIII


或更高处理器



?



内存:


2 56MB


或更高



?



网络:局域网



2.6.2


软件环境



?



操作系统:


Windows 2000 /Windows XP


?



开发平台:


Microsoft Visual Studio 6.0


?



开发语言:


C++


?



后台数据库:


Mircrosoft Access


2.6.3


开发工具介绍



Visual C++ 6.0



简称


VC


或者


VC6.0

< br>,


是微软推出的一款


C++


编译 器,





级 语言



翻译为



机器语言(低级语言)



的程序。


V isual


C++


是一个功能强大的


可视化软件开发工具。自


1993



M icrosoft


公司推出


Visual

C++1.0


后,随着其


新版本的不断问世,


Visual


C++


已成为专业程序员进行软件开 发的首选工具。虽然


微软公司推出了



Visual


C++.NET(Visual


C++7.0)


,但它的应用的很大的局限性,


只适 用于


Windows 2000



Windows XP



Windows NT4.0


。 所以实际中,更多


的是以


Visual C++6.0


为平台。



-


可编辑修改


-






2-6Visual C++ 6.0


Visual C++6.0


不仅是一个


C++


编译 器,


而且是一个基于


Windows


操 作系统


的可视化集成开发环境(


integrated development environment



IDE< /p>


)。


Visual


C++6.0


由许多组件组成,包括编辑器、调试器以及程序向导


AppWizar d


、类向导


Class Wizard


等开发工具。



这些组件通过一个名为


Developer Studio


的组件集成


为和谐的开发环境。



2.7


本章小结



本章介绍了


ACCESS



Socket


套接字



,多线程




TCP/IP


协议



UDP


协议





C/S


结构


(客户


/


服务模式)



根据本问所述的系统功能,


逐一介绍了需要了相关的


知识;最后对本系统实现所用到的软硬件和开发平台作了简要的说明。


-


可编辑修改


-




3


需求分析



聊天交流是目前互联网提供的主要内容。聊天系统有多种实现方式,类似


ICQ


属于一种点对点的聊天系统;还有一种是基于


Socket

< p>
的集中式聊天系统,这种聊天


系统需要登陆统一的聊天服务器。在基于


Socket


的聊天系统中,主要有两种角色:

服务器和客户端,


不同的客户端登陆集中式的服务器,


通过 服务器将一个客户端发出


的信息推送到其他所有客户端。



基于


Socket


的聊天系统最早实现是使 用网页刷新方式,通过客户端不断地自动


刷新,


将服务器端整个 页面内容下载到客户端显示,


这种方式的聊天速度慢,


而且有< /p>


聊天系统在客户端和服务器之间主要传送的是文字信息,


服务器端 只需要把最近


的文字信息推送到客户端,


这样减少了网络传输内 容,


节省了网络传输的时间,


无疑


提高 了聊天速度。这种“推”技术是目前基于


Socket


聊天系统 的主要实现技术。



在基于


Socke t


的聊天系统,客户端和服务器必须保持随时随地的连接。这有别


于普通


Web


浏览的连接方式。在使用浏览器访问服务器时, 先由客户端发出


HTTP


协议,然后服务器响应处理这个客户端 的响应,再返回处理结果;请求(


Request


< p>
和响应(


Response


)是一种一对一的前后 因果关系。而在基于


Socket


的聊天系统

< br>中,


客户端发出聊天信息的同时,


客户端也在接受服务器 发送过来的其他人的聊天信


息,因此,请求和响应不存在那种前后对应关系,是两种分别 独立进行的进程。因为


服务器任何时候都可能发送信息到客户端,


因此,


客户端和服务器一旦建立连接,


须能让服务器在以后发送中寻找定位到这个连接。



本系统主要通过客户端,服务器端来体现聊天系统的基本功能。



(1)


服务器端:



1



处理用户注册


,



2



处理用户登录


,


< br>3


处理用户发送信息,




4



处理用户得到信息;





刷屏现象,很快被更新的聊天技术所替代。


















































-


可编辑修改


-





(2)



客户端:



1



用户注册界面及结果,




2



用户登录界面及结果,



< p>
3


用户发送信息界面及结果,




4



用户得到信息界面及结果,




5



用户传送文件,




6



用户退出界面及结果。




3.1


需求分析



3.1.1


可行性分析



经济可行性:

< p>
本系统的开发前提是作为一个毕业设计在实施,


不注重直接的经济


效益和其后的发展方向,只在注重自身水平和能力的提高,故不用考虑到经济问题。



技术可行性:本系统的开发利用


Microsoft Acce ss


作为本系统的数据库,它是


一个支持多用户的新型数据库, 适用于大中规模的数据量要求。使用


C++


作为系统

< p>
开发语言,它具有


C


语言的注重安全稳定性能,也 是一种面向对象开发的语言,保


证了代码的模块化要求,


而代码 的模块化的提高,


非常有利于以后对新系统的扩展与


修改。



运行可行性:


本系统为一个小型的局域网 聊天系统,


所耗费的资源非常的小,



在一般的电脑无论是硬件还是软件都能满足条件。因此,本系统在运行上是可行的。



操作可行性:操作性强,容易上手使用。



3.2.2


系统性能需求



实用性:为局域网聊天提供方便,有效进行作业管理。



操作简单:


本系统应该适用于不同水平的使用者,

包括事业单位和企业单位,



时系统不应太复杂和烦琐,因 此要求系统的操作尽可能简单易行。



技术先进:


产品的系统设计和开发应紧跟着整个计算机发展潮流,


采用当时最先


进的设计思想,利用最新的开发技术和开发工具。


适应性:


应该能广泛应用于不同类型的企事业单位。


系统采 用模块化设计,


用户


-


可编辑修改


-




可以根据 自己的实际情况自行组合,使系统在不同的硬件环境下都能得以应用。



代码可读性好:文中的代码将尽可能简洁,易懂。




3.1.3


系统运行需求



?



处理器:


Intel Pentium PIII


或更高处理器



?



内存:


2 56MB


或更高



?



网络:局域网



?



操作系统:


Windows 2000 /Windows XP


3.2


数据流图



3.2.1


顶层数据流图






聊天用 户


局域网多


人聊天系



聊天用户



3-1


顶层数据流图



3.2.2


一层数据流图



聊天用户


读取


返回


写聊天信息


返回


聊天用户


客户端


提交


反馈


服务器端


存储


-


可编辑修改


-






3-2


一层数据流图



3.2.3


二层数据流图



用户

< br>用户登录


用户注



客户端


处理用户


退出


处理


服 务器端


用户得到


的信息


监控

< p>
保存


保存


用户发送


信息< /p>


服务器日志


数据聊天信息


聊天内容



3-3


系统二层数据流图



3.3


本章小结



本章从软件工程的角度,对 基于


MFC


的多功能局域网聊天器系统进行了需求分

< p>
析,分别系统可行性,系统性能需求,系统运行需求以及数据流程图分析。明确了系


统要实现的目标和开发中的注意事项。


-


可编辑修改< /p>


-




4


系统设计



4.1


系统实现原理



聊天系统的设计跟普通 网站设计有着许多不同的地方,


普通网站设计所考虑的因


素,< /p>


例如,


普通网站需要对布局进入大量美化以及动画设计等等,


而聊天室只要提供


满足访客双方直接实时聊天即可。


因此,


在设计聊天系统的过程中,


需要从局域网络


的角度重新进行设计。




Internet


上的聊天程序一般都是以服务器提供服务端连接响应,使用者 通过


客户端程序登录到服务器,


就可以与登录在同一服务器上的 用户交谈,


这是一个面向


连接的通信过程。因此,程序要在


TCP/IP


环境下,实现服务器端和客户端两部分程


序。



根据这种服务器


/< /p>


客户端的模式,


在基于


MFC

< p>
的多功能局域网聊天器的总体构架


设计如下图:




局域网聊天系统






客户端






退















< br>服务器端









用户


注册


用户


登录


用户


文字


聊天


用户


文件


传送























< br>字









线







4-1


系统总体架构图



-


可编辑修改


-




4.2



C/S


架构设计


在本系统中,


客户端需要将用户输入的聊天信息发往服务器,


那么建立一个线程


一直实现发送功能,


由于客户端监视用户输 入也有一个监视线程在运行。


这样,


有两


个线程各司其职。


一个负责监视输入,


另外一个线程负责将输 入发送出去。


那么再这


两个线程之间如何通信?最经常使用的办 法是使用队列(


Queue


)模式。


Q ueue



式是处理消息通信的基本办法,如图


4-2


所示。



加入



队列


Queue


提取




4-2


队列


Queue


模式



本系统中应用


Queue


模式有一个问题,加入动作是由用户输入决定的,一旦有


用户输入,


就会发生假如动作,


那么,


提取线程会在队列另外一段进入死循环不断的


读取,这样才能在 队列中一旦有对象事件时,能够被立即提取出来,因此必须使用


while


()实现死循环。



但是必须注意到,每次循环中的 提取动作执行是有前提条件的——队列中有对


象事件。


这样提取 线程将中断等待,



Queue


中读取 假如对象。


线程再中断等待时,


将释放


CPU


的霸占,这样就有效率地利用了


CPU

< br>,如图


4-3


所示。





队列


Queue




4-3


改进后的队列


Queue


模式



w


由此可见,


并不是说使用了多线程就能提高 系统性能,


更重要的是还要注意提高


CPU

使用效率,防止


Block


发生。



提高多线程的使用效率还必须了解下列几点:




1



线程运行的次序并不是 按照创建他们时的顺序来运行的,


CPU


处理线程的

< p>
顺序是不确定的,如果需要确定,那么必须手工介入。



-


可编辑修改


-





2


)要避免大量线程运行时发生堵塞现象,可以通过设置线程优先级来实现,

< br>但是同时又必须注意到,


再大量线程被堵塞时,


最高优先 级的线程先运行,


但不表示


低级别线程不会运行,只是运行概率 较小而已。




3

)检查所有可能


Block


的地方,尽可能多的使用


sleep


;尽可能延长


sleep


(毫秒数)的时间。



但是,

< br>当多线程数量很多时,


每次启动线程的开销也非常大,


有 时创建新线程的


服务器再创建和销毁线程上花费的时间和消耗的资源,

< br>可能要比花再处理应用逻辑运


算的时间和资源要多得多。


除了创建和销毁线程的开销之外,


活动的线程也会消耗系


统资源 。当应用系统突然遭遇巨大访问量访问时,服务器内存中会创建太多的线程,


直至资源完 全消耗,这对于应用系统的正常运行是有致命伤害的。



为了能 再访问线程开启数目,


以及减少线程频繁创建和销毁带来的系统开销,

< br>提


高系统的大量访问量处理性能和速度,


需要事先创建一 定数量的线程供调用者循环反


复使用,这也就是“池”技术。



线程池的基本原理也是基于队列


Queue

事先,通过不断查询队列


Queue


是否

< br>有可以运行的线程。如果有,就立即运行线程;如果没有,就锁定等待,直至有新的


线程假如被出发解锁。



本系统中,


聊天系统核心功能的处理可以采取线程池设计,


这样可以加快对每次

聊天信息的处理时间和提高处理速度。



整个系统的核心底 层是非堵塞


I/O


技术,


通过使用这一 新技术,


可以实现底层网



I/O


的无堵塞、流畅地读写,为整个系统的高性能运行奠定了坚实的基础。



非堵塞的


Socket I/O


有 两大部分:服务器和客户端。在两端都将采取这一新技


术,根据


TCP/UDP


不同,又分别有两套


Socket


详细实现。









-


可编辑修改


-




4.3


模块设计



4.3.1


系统流程图



4.3.1.1


系统总体流程图






启动服务器



开始









判断启动信息



启动客户端


判断登录信息













注册用户


登录聊天器客


服端



退出聊天器


退出服务器


结束




4-4


系统总体流程图







-


可编辑修改


-

-


-


-


-


-


-


-


-



本文更新与2021-02-13 02:28,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/647460.html

基于Socket的局域网通信工具的设计与实现的方法的相关文章

  • 爱心与尊严的高中作文题库

    1.关于爱心和尊严的作文八百字 我们不必怀疑富翁的捐助,毕竟普施爱心,善莫大焉,它是一 种美;我们也不必指责苛求受捐者的冷漠的拒绝,因为人总是有尊 严的,这也是一种美。

    小学作文
  • 爱心与尊严高中作文题库

    1.关于爱心和尊严的作文八百字 我们不必怀疑富翁的捐助,毕竟普施爱心,善莫大焉,它是一 种美;我们也不必指责苛求受捐者的冷漠的拒绝,因为人总是有尊 严的,这也是一种美。

    小学作文
  • 爱心与尊重的作文题库

    1.作文关爱与尊重议论文 如果说没有爱就没有教育的话,那么离开了尊重同样也谈不上教育。 因为每一位孩子都渴望得到他人的尊重,尤其是教师的尊重。可是在现实生活中,不时会有

    小学作文
  • 爱心责任100字作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文
  • 爱心责任心的作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文
  • 爱心责任作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文