-
。
摘
要
随着计算机科学和
Internet
的飞速发展,网上聊天已成为人们相互交流的一中方
式,与
E-mail
、
电话相比,聊天服务更具有实时性和有效性。网络版的聊天软件种类繁
多,如
、
OICQ
、
MSN
等,实现随时随地上网聊天,给人们带来了很大的方便。但
p>
是这些聊天软件也存在以下不足:用户必须连接
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
-
可编辑修改
-
。
目
录
摘
要
.
p>
.........................................
..................................................
................................. I
Abstract
...................
..................................................
..................................................
....
I
II
1
绪论
.<
/p>
........................................
..................................................
......................................
1
1.1
背景知识
.........
..................................................
..................................................
....
1
1.2
国内外聊天器系统研究现状
<
/p>
........................................
........................................
1
1.3
选题的目的及意义
.
................................
..................................................
..............
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
)
p>
........................................
............
8
2.2.2
Socket
的同步和异步方式
p>
.........................................
...............................
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
p>
协议
.
....
..................................................
.....................
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
可行性分析
............................................ .................................................. .....
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
系统流程图
............................................ .................................................. .....
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
背景知识
近年来,随着全球信息化进
程的不断发展,网络也在飞速发展。出于高效、快速
地处理各种事务的目的,
越来越多的企业在其内部使用局域网来进行工作。
在内部局
域网的帮助下,企业得以简化信息流程,提高信息交换的速度,从而提高工作效率。
然而,随着企业规模的扩大,业务量的增加,企业内部的信息越来越私密,企业只希
望员工通过内部局域网进行沟通与交流,避免企业内部机密通过
Internet
泄露到外
部。
为了解决上述矛盾,
人们提出了开发局域网聊天软件的构想,
通过局域网聊天软
件,
企业员工可以随时的进行即时消息传递,
召开网络
会议等,
有利于提高工作消息
效率,同时又保护了企业内部信息
的安全性。
本系统采用基于
Socket
的局域网通信工具的设计与实现的方法。基于
Socket
的局域网通信软件可以为企业原有的局域网提供一种良好,安全,快速的通信机制。
它的实现无需对企业原有的局域网硬件进行任何改动,
具有实现成本低廉的优点
,
它
的使用能有效地降低局域网通信负荷,
提高局域网的使用效率,
可以很好地解决企业
内部局域网的
各种通信需求。
基于
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
与腾讯
不同,
微软的
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
、电话相比
,聊天服务更具有实时性和有效性。网络版的聊天软件
种类繁多,如
、
OICQ
、
MSN
等,实现随时随地上网聊天,给人们带来了很大的
方便。
但是这些聊天软件也存在以下不足:
用户必须连接
p>
Internet
;
用户在工作时容
易沉迷于网络聊天。
为了方便单位企业内部的信息交流,
避免企业内部员工使用类似
QQ
等软件泄露内部信息
,
减少不必要的财力和人力资源浪费,
开发一个局域网聊天
p>
软件是非常必要的。
1.4
本课题研究内容
本文主要阐述了基于
MFC
的多功能局域网聊天器系统的设计、开发和实现,分
p>
别对系统的需求分析、
系统设计、
系统实现
和系统测试等几个方面进行阐述,
具体内
容如下:
(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>
使用是普通的透过查询和其他技术在进入营运储存
的程序在方面<
/p>
RDBMS
支援这些的。
Access
的优点:
(1)
存储方式简单,易于维护管理
Access
管理的对象有表、查询
、窗体、报表、页、宏和模块,以上对象都存放
在后缀为(
.m
db
或
.accdb
)的数据库文件中
,便于用户的操作和管理。
(2)
面向对象
Access
是一个面向对象的开发工具,利用面向对象的方式将数据
库系统中的各种功能
对象化,将数据库管理的各种功能封装在各类对象中。它将一
个应用系统当作是由一系列
对象组成的,
对每个对象它都定义一组方法和属性,
以定
义该对象的行为和用法,
用户还可以按需要给对象扩展方法和属性。<
/p>
通过对象的方法、
属性完成数据库的操作和管理,
极大地简化了用户的开发工作。
同时,
这种基于面向<
/p>
对象的开发方式,使得开发应用程序更为简便。
(3)
界面友好、易操作
Access
是一个可视化工具,风格与
Window
s
完全一样,用户想要生成对象并
应用,只要使用鼠标进行拖放
即可,非常直观方便。系统还提供了表生成器、查询生
成器、
报
表设计器以及数据库向导、
表向导、
查询向导、
窗体向导、
报表向导等工具,
使得操作简便,容易使用
和掌握。
-
可编辑修改
-
。
(4)
集成环境、处理多种数据信息
p>
Access
基于
Windows
操作系统下的集成开发环境,该环境集成了各种向导和
生成器工具,极大
地提高了开发人员的工作效率,使得建立数据库、创建表、设计用
户界面、设计数据查询
、报表打印等可以方便有序地进行。
(5) Access
支持
ODBC<
/p>
(开发数据库互连,
Open Data Base Conne
ctivity
)
,
利用
Access
强大的
DDE
(动态数据交换)和
OLE
(对象的联接和嵌入)特性,可
p>
以在一个数据表中嵌入位图、声音、
Excel
表格、
Word
文档,还可以建立动态的数
据库报表和窗体等。
Access
还可以将程序应用于
网络,并与网络上的动态数据相联
接。利用数据库访问页对象生成
HTML
文件,轻松构建
Internet/Intrane
t
的应用。
(6)
支持广泛,易于扩展,弹性较大
<
/p>
能够将通过链接表的方式来打开
EXCEL
文件、格式化文本文件等,这样就可以
利用数据库的高效率对其中的数据进行查询、处
理。还可以通过以
Access
作为前台
客户端,以
SQL Server
作为后台数据库的方式(如
ADP
)开发大型数据库应用系
统。<
/p>
总之,
Ac
cess
是一个既可以只用来存放数据的数据库,也可以作为一个客户端
开发工具来进行数据库应用系统开发;即可以开发方便易用的小型软件,也可以用
来开发大型的应用系统。
Access
的缺点:
ACCESS
是小型数据库,
既然是小型就有它的局
限性
(下面关于性能方面的缺点
仅指用
Access
作为数据库的情况下,不包括用
Access
p>
作为客户端前台,用
SQL
Server
作为后台数据库的情况):
(1).
数据库过大,一般百
M
以上(纯数据,不包括窗体、报表等客户端对象)性
能会变差。
(2).
虽然理论上支
持
255
个并发用户,但实际上根本支持不了那么多,如果以只
读方式访问大概在
100
个用户左右,
而如果是并发编辑,则大概在
10-20
个用户。
(3).
记录数过多,
单表记录数过百万性能就会变得较差,如果加上设计不良,这
个限度还要降低。
不能编译成可执行文件(
< br>.exe
),必须要安装
Access
< br>运行环境才能使用。
2.2
套
接字(
Socket
)
套接字(
Socket<
/p>
)是通信的基石,是支持
TCP/IP
协
议的网络通信的基本操作单
-
可编辑修改
-
。
元。
可以将套接字看作不同主机间的进程进行双向通信的端点,
它构成了单个主机内
及整个网络间的编程界面。
套接字存在于通信域中,
< br>通信域是为了处理一般的线程通
过套接字通信而引进的一种抽象概念。套接字通常
和同一个域中的套接字交换数据
(数据交换也可能穿越域的界限,但这时一定要执行某种
解释程序)
。各种进程使用
这个相同的域互相之间用
Internet
协议簇来进行通信。
套接字可以根据通信性质分类,
这种性质对于用户是可见的。
应用程序一般仅在
同一类的套接字间进行通信。
不
过只要底层的通信协议允许,
不同类型的套接字间也
照样可以通信。套接字有三种不同的类型:流套接字、数据报套接字和原始套接字。
流套接字(
SOCK_STREAM
):流套接字用于提供面向连接、可靠的数据传输
服务。该服务将保证数据能
够实现无差错、无重复发送,并按顺序接收。流套接字之
所以能够实现可靠的数据服务,
原因在于其使用了传输控制协议,即
TCP
(
< br>The
Transmission Control
Protocol
)协议。
数据报套接字(
SOCK_DGRAM
):数
据报套接字提供了一种无连接的服务。该
服务并不能保证数据传输的可靠性,数据有可能
在传输过程中丢失或出现数据重复,
且无法保证顺序地接收到数据。
数据报套接字使用
UDP
(
Use
r Datagram Protocol
)
协议进行数据的传
输。
由于数据包套接字不能保证数据传输的可靠性,
对于有可能
出
现的数据丢失情况,需要在程序中做相应的处理。
原始套接字(
SOCK_RAW
p>
):原始套接字与标准套接字(标准套接字指的是前
面介绍的流套接
字和数据报套接字)
的区别在于:
原始套接字可以读写内核没有
处理
的
IP
数据包,而流套接字只能读
取
TCP
协议的数据,数据报套接字只能读取
< br>UDP
协议的数据。因此,如果要访问其他协议发送数据必须使用原始套接字。<
/p>
套接字的工作原理可以简单描述:
要通
过互联网进行通信,
你至少需要一对套接
字,其中一个运行于客
户机端,我们称之为
ClientSocket
,另一个运行于
服务器端,
我们称之为
ServerSocket
。
根据连接启动的方式以及本地套接字要连接的目标,
套接字之间的连接
过程可以
分为三个步骤:服务器监听,客户端请求,连接确认。
所谓服务器监听,
是服务器端套接字并不定位具体的客户端套接
字,
而是处于等
待连接的状态,实时监控网络状态。
所谓客户端请求,
是指由客户端的套接字提出连
接请求,
要连接的目标是服务器
端的套接字。
< 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
风格的库函数;
也包含了一组针对
p>
Windows
的扩展库函数,
以使程序员
能充分地利
用
Windows
消息驱动
机制进行编程。
Windows Sockets
规范本意在于
提供给应用
程序开发者一套简单的
API
,
并让各家网络软件供应商共同遵守。
此外,
在一个特定
版本
Windows
的基础上,
Windows Sockets
也定义了一个二
进制接口(
ABI
)
,以
此来保证应用
Windows Sockets API
的应用程序能够在任何网络软件供应商的符合
Windows Sockets
p>
协议的实现上工作。因此这份规范定义了应用程序开发者能够使
用,
并且网络软件供应商能够实现的一套库函数调用和相关语义。
遵
守这套
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
实现都支持
流套接口和数据报套接口,
应用程序调
用
Windows Sockets
的
API
实现相互之间的
通讯。
Wind
ows Sockets
又利用下层的网络通讯协议功能和操作系统调用实现实际
-
可编辑修改
-
。
的通讯工作。
选定
< br>WINDOWS
平台开发网络通信程序,可以选择
WIN
DOWS
的
SOCKETS
编程接口,
Windows Sockets
是一套开放的、支持多种协议
的
Windows
下的网络
编程接口。
现在的
Winsock
已经基本上实现了与协议无关,你可以使
用
Winsock
来调用多种协议的功能,但较常使用的是
p>
TCP/IP
协议。
Windows
p>
sockets
无疑是
我们进行网络编程的
利器。
所有的
Windows Sockets
实现都支持流套接口和数据报
套接口。应用程序调用
W
indows
Sockets
的
AP
I
实现相互之间的通讯。
Windows
Sockets
又利用下层的网络通讯协议功能和操作系统调用实现实际的通讯工作
。
它们
之间的关系如图
2-2
所示:
p>
应用程序
1
应用程序
2
网络编程界面,例如
Windows Sockets
p>
网络通讯协议服务界面,例如
TCP/IP
操作系统,例如
WindowsXP
物理通讯介质
图
2-2 Windows
Sockets
实现通讯工作的各层关系图
2.2.2
Socket
的同步和异步方式
p>
所谓
socket
通常也称作
套接字
,应用程序通常通过
套接字
向网络
发出请求
-
可编辑修改
-
。
或者应答网络请求。对于一个网络
连接来说,套接字是平等的,并没有差别,不因为
在服务器端或在客户端而产生不同级别
。
所谓
Socket
的同步方式,就是发送方发送数据包以后,不等待接收方响应,就
接着发送下一
个数据包。
Socket
的异步方式,就是当发送方发送一个数
据包以后,
一直等到接收方响应后,才接着发送下一个数据包。
关于套接字还有阻塞和非阻塞之分:阻塞套接字是指执行此套接字的网络调用
时,
直到调用成功才返回,
否则此套接字就一直阻
塞在网络调用上。
而非阻塞套接字
是指在执行此套接字的网络调
用时,不管成功与否,都立即返回。在
Windows
网络
p>
通信软件的开发中,最常用的方法就是异步非阻塞套接字。
2.2.3
用
Socket
开发一个
Server-
Client
模型的程序
开发原理:
服务器,使用
ServerSocket
监听指定的端口,端
口可以随意指定(由于
1024
以下的端口通常属于保留端口,
在一些操作系统中不可以随意使用,
所以建议使用大
于
1024
的端口),等待客户连接请求,客户连
接后,会话产生;在退出客户端后,
关闭连接。
客户端,使用
Socket
对网络上某一个服务器的
某一个端口发出连接请求,一旦
连接成功,连接成功;客户端退出后,关闭
Socket
。客户端不需要指定打开的端口,
通常
临时的、动态的分配一个
1024
以上的端口。
Socket
接口是
TCP
/IP
网络的
API
,
Socket
接口定义了许多函数或例程,程序
员可以
用它们来开发
TCP/IP
网络上的应用程序。要学
Internet
上的
TCP/IP
网络编
程,必须理解
Socket
< br>接口。网络的
Socket
数据传输是一种特殊的
I/O
,
Socket
也
是一种文件描述符。
Socket
也具有一个类似于打开文件的函数调用
Socket()
,该函
数返回一个整型的
Socket
描述符
,随后的连接建立、数据传输等操作都是通过该
Socket
实
现的。
常用的
Socket
类型有两种:
流式
Socket
(
SOCK_STREAM
)
和数据报式
Socket
(
SOCK_
DGRAM
)。流式是一种面向连接的
Socket
,针对于面向连接的
TCP
服务
< br>应用;数据报式
Socket
是一种无连接的
Socket
,对应于无连接的
UDP
服务应用。
为了建立
Socket
,程序可以调用
Socket
函数,该函数返回一个类
似于文件描述符
的
句
柄
。
socket
函
数
原
型
为
:
int
socket(int
domain,
int
type,
int
protocol);domain
指明所使用的协议族,通常为
p>
AF_INET
,表示互联网协议族
(
p>
TCP/IP
协
议
族
)
;
type
参
数
指
定
s
ocket
的
类
型
:
SOCK_STREAM
或
S
OCK_DGRAM
,
Socket
接
口还定义了原始
Socket
(
SOC
K_RAW
),允许程序使
用低层协议;
protocol
通常赋值
0
。
p>
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
发挥更大效率,即所谓
“
超线程(
Hyper-Threading
,
简称
“
HT
”
)
”
技术。超线程技术就是利用特殊的硬件指令,把两个逻辑内核模拟成两
个物理芯片,
让单个处理器都能使用线程级并行计算,
进而兼容多线程操作系统和软
件,减少了
CPU
的闲置时间,提高的
CPU
的运行效率。
p>
采用超线程即是可在同一时间里,
应用程
序可以使用芯片的不同部分。
虽然单线
程芯片每秒钟能够处理成
千上万条指令,但是在任一时刻只能够对一条指令进行操
作。而超线程技术可以使芯片同
时进行多线程处理,使芯片性能得到提升。
超线程技术是在一
颗
CPU
同时执行多个程序而共同分享一颗
CPU
内的资源,
理
论上要像两颗
CPU
一样在同一时间执行两个线程,
P4
处理器需要多加入一个
Logical
CPU
Pointer
(逻辑处理单元)。因此新一代的
P4 HT<
/p>
的
die
的面积比以往的
P4
增
大了
5%
。而其余部分如
ALU
(整数运算单元)、
FPU
(浮点运算单元)、
L2
Cache
(二级缓存)则保持不变,这些部分是被分享的。
虽然采用超线程技术能同时执行两个线程,但它并不象两个真正的
CPU
那样,
每个
CPU
都具有独立的资源。当两个线程都同时需要某一个资源时,其中一个要暂
时
停止,
并让出资源,
直到这些资源闲置后才能继续。
因此超线程的性能并不等于两
颗
CPU
的性能。
英特尔
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>
的方法,
但编出的程序很难移植,
由此造成
了另一类的代价高昂问题。
中断对那些实
时性很强的任务来说是
很有必要的。
但对于其他许多问题,
只要求将问题划分进入独<
/p>
立运行的程序片断中,使整个程序能更迅速地响应用户的请求。
多线程是为了同步完成多项任务,
不是为了提高运行效率,
p>
而是为了提高资源使
用效率来提高系统的效率。线程是在同一时间需
要完成多项任务的时候实现的。
多线程在构建大型系统的时候
是需要重点关注的一个重要方面,特别是在效率
(系统跑得多快)和性能(系统工作正常
)之间做一个权衡的时候。恰当的使用多线
程可以极大的提高系统性能。使用多线程的好
处有以下几点:
?
使用线程可以把占据长时间的程序中的任务放到后台去处理;
?
用户界面可以更加吸引人,
这样比如用户在点击了一个按钮去触发某些时间
的处理,可以弹出一个
进度条显示处理的进度;
?
程序的运行速度可能加快;
?
在一些等待的任务实现上如用户输
入、文件读写和网络收发数据等,线程就
比较有用了,在这种情况下我们可以释放一些珍
贵的资源如内存占用等。
2.4
TCP/IP
协议、
UDP
协议
网际协议
IP
是
TCP/IP
的心脏,也是网络层中最重要的协议。
IP
< br>层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并
把该数
据包发送到更高层
---TCP
或
UD
P
层;
相反,
IP
层也把从
TCP
或
UDP
层接收
-
可编辑修改
-
。
来的数据包传送到更低层。
IP
数据包是不可靠的,因为
IP
并没有做任何事情来确认
数据包是否按顺序发送的或者被破坏。
IP
数据包中含有发送它的主机地址(源地址)
和
接收它的主机的地址(目的地址)
。
如果
IP
数据包中有已经封好的
TCP
数据包,那么
IP
将把他们向‘上’<
/p>
传送到
TCP
层。
TCP
将包排序并进行错误检查,同时实现虚电路间的连接
。
TCP
数据包中
包括序号和确认,所
以未按照顺序收到的包可以被排序,而损坏的包可以被重传。
UDP
与
TCP
位于同一层,
但对于数据
包的顺序错误或重发。
因此,
UDP
不
被应用于
那些使用虚电路的面向连接的服务
UDP
主要用于那些面向查询
---
应答的服务。
TCP
和
UDP
p>
服务通常有一个客户
/
服务器的关系。
p>
两个系统间的多重连接是这样
相互确认并协调一致的,
TCP
或
UDP
连接唯一地
使用每个信息中的如下四项进行确
认:
表
2-1
源
IP
地址
发送包的
IP
地址
目的
IP
地址
接收包的
IP
地址
源端口
源系统上的连接的端口
目的端口
目的系统上的连接的端口
端口是一个
软件结构,
被客户程序或服务进程用来发送和接收信息。
一个端
口对
应一个
16
比特的数。服务进程通
常使用一个固定的端口,
例如,
SMTP
使用
25
。这
些端口号是“广为人知
”的,因为在建立与特定的主机或服务的连接时,需要这些地
址和目的地址进行通讯。<
/p>
2.4.1
面向连接的
TCP
“面向连接”
p>
就是在正式通信前必须要与对方建立起连接。
比如你给别人打电话,
必须等线路接通了、对方拿起话筒才能相互通话。
TCP
(
Transmission
Control
Protocol
,
传输控制协议)是基于连接的协议,
也就是说,在正式收发数据前,必须和对方建立可靠
的连接。一个
TCP
连接必须要
经过三
次
“
对话
”
才
能建立起来,其中的过程非常复杂,我们这里只做简单、形象的介
绍,你只要做到能够理
解这个过程即可。我们来看看这三次对话的简单过程:主机
A
向
主机
B
发出连接请求数据包:“我想给你发数据,可以吗?”,
这是第一次对话;
-
可编辑修改
-
。
主机
B<
/p>
向主机
A
发送同意连接和要求同步(同步
就是两台主机一个在发送,一个在
接收,协调工作)的数据包:“可以,你什么时候发?
”,这是第二次对话;主机
A
再发出一个数据包确认主机
B
的要求同步:“我现在就发,你接着吧!”,这是第
三次对话。三次“对话”的目的是使数据包的发送和接收同步,经过三次“对话”之
后,主机
A
才向主机
B
正式发送数据。
TCP
协议能为应用程序提供可靠的通信连接,
使一台计算机发出的字节流无差错
地发往网络上的其他计算机,对可靠性要求高的数据通信系统往往使用
TCP
协议传
输数据。
图
2-3
本地连接
TCP
我们来做一个实验,
用计算机
A
(安装
Windows 2000 Server
操作系统)
从<
/p>
“网
上邻居”上的一台计算机
B
拷贝大小为
8,644,608
字节的文件,通
过状态栏右下角
网卡的发送和接收指标就会发现:
虽然是数据流
是由计算机
B
流向计算机
A
,
但是计
算机
A
仍发送了
3,456
个数据包,如上图所示。这
些数据包是怎样产生的呢?因为
文件传输时使用了
TCP/IP
协议,
更确切地说是使用了面向连接的
TCP
协议,
计算机
A
接收数据包的时候,要向计算机
B
回发数据包,所以也
产生了一些通信量。
图
2-4
网络统计
如
果事
先
用网
络
监视
器
监
视
网
络
流量
,就
会
发
现由
此
产
生
的数
据
流
量
是
9,478,819
字节,比文件大
小多出
10.96%
(如上图所示),原因不仅在于数据包和<
/p>
帧本身占用了一些空间,而且也在于
TCP
协议面向连接的特性导致了一些额外的通
信量的产生。
-
可编辑修改
-
。
2.4.2
面向非连接的
UDP
协议
“面向非连接”
就是在正式通信前不必与对方先建立连接,
不管对方状态就直接
发送。
这与现在风行的手机短
信非常相似:
你在发短信的时候,
只需要输入对方手机
号就
OK
了。
UDP
(
User Data Pro
tocol
,用户数据报协议)是与
TCP
相对应的协议。它是
面向非连接的协议,它不与对方建立连接,而是直接就把数据包
发送过去!
图
2-5
本地连接
UDP
UDP
适用于一次只传送少量数据、对可靠性要求不高的应用环境。比如,我们
经常
使用“
ping
”命令来测试两台主机之间
TCP/IP
通信是否正常,其实“
ping
”命
令的原理就是向对方主机发送
UDP
数据包,然后对方主机确认收到数据包,如果数
据包是否到达的消息及时反
馈回来,那么网络就是通的。例如,在默认状态下,一次
“
pi
ng
”操作发送
4
个数据包(如上图所
示)。大家可以看到,发送的数据包数量
是
4
< br>包,收到的也是
4
包(因为对方主机收到后会发回一个确
认收到的数据包)。
这充分说明了
UDP
协议是面向非连接的协议,没有建立连接的过程。正因为
UDP
协议没有连接的过程,
所以它的通信效果高;
但也正因为如此
,
它的可靠性不如
TCP
协议高。
p>
QQ
就使用
UDP
发消息,因此有时会出现收不到消息的情况。
2.5
C
lient/Server
结构(客户机
/
服务器模式)
Client/Server
结构
(C/S
结构
)
是大家熟知的客户机和服务器结构。
它是软件系统
体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到
Clien
t
端
和
Server
< br>端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是
Client/
Server
形式的两层结构,由于现在的软件应用系统正在向分布式的
Web
应
用发展,
Web
p>
和
Client/Server
应用都可
以进行同样的业务处理,应用不同的模块
共享逻辑组件;
因此,
内部的和外部的用户都可以访问新的和现有的应用系统,
通过<
/p>
现有应用系统中的逻辑可以扩展出新的应用系统。这也就是目前应用系统的发展方
向。
-
可编辑修改
-
。
C/S
结
构的优点是能充分发挥客户端
PC
的处理能力,很多工作可以在
客户端处
理后再提交给服务器。对应的优点就是客户端响应速度快。缺点主要有以下几个
:
(1).
只适用于局域网。而随着
互联网的飞速发展,移动办公和分布式办公越来越
普及,
这需要
我们的系统具有扩展性。
这种方式远程访问需要专门的技术,
同
时要对
系统进行专门的设计来处理分布式的数据。
(2).
客户端需要安装专用的客户
端软件。首先涉及到安装的工作量,其次任何一
台电脑出问题,
如病毒、
硬件损坏,
都需要进行安装或维护。
< br>还有,
系统软件升级时,
每一台客户机需要重新安装,其
维护和升级成本非常高。
(3).
对客户端的操作系统一般也会有限制。可能适应于
win200
0
或
Windows
XP
,
但不能用于
Windows7
< br>。
或者不适用于微软新的操作系统等等,
更不用说
Linux
、
Unix
等。
C/S
架构软件的优势与劣势:
p>
(
1
)应用服务器运行数据负荷较轻。最简
单的
C/S
体系结构的数据库应用由两
部分组成,
即客户应用程序和数据库服务器程序。
二者可分别称
为前台程序与后台程
序。运行数据库服务器程序的机器,也称为应用服务器。一旦服务器
程序被启动,就
随时等待响应客户程序发来的请求;
客户应用程
序运行在用户自己的电脑上,
对应于
数据库服务器,
可称为客户电脑,
当需要对数据库中的数据进行任何操作时,
客户程
序就自动地寻找服务器程序,
并向其发出请求
,
服务器程序根据预定的规则作出应答,
送回结果,应用服务器
运行数据负荷较轻。
(
2
)数据的储存管理功能较为透明。在数据库应用中,数据的储存管理功能,
是由服务器程序和客户应用程序分别独立进行的,
前台应用可以违反的规则,
并且通
常把那些不同的(不管是已知还是未知的)运行数据,在服务器程序
中不集中实现,
例如访问者的权限,
编号可以重复、
必须有客户才能建立定单这样的规则。
所有这些,
对于工作在前台程序上的最终用户,是
“
透明
< br>”
的,他们无须过问(通常也无法干涉)
背后的过程,<
/p>
就可以完成自己的一切工作。
在客户服务器架构的应用中,
前台程序不
是非常
“
瘦小
”
,
麻烦的事情都交给了服务器和
网络。
在
C/S
体系的下,
数据库不能真
正成为公共、专业化的仓库,它受到独立的专门管理。
(
3
)
C/S
架构的劣势是高昂的维护成本且投资大。首先,采用
C/S
架构,要选
择适当的数据库平台来实现数据库数
据的真正
“
统一
”
,
使分布于两地的数据同步完全
交由数据库系统去管理,<
/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
p>
的组件集成
为和谐的开发环境。
2.7
本章小结
本章介绍了
ACCESS
,
Socket
套接字
,多线程
,
TCP/IP
协议
UDP
协议
以
及
C/S
结构
(客户
/
服务模式)
。
根据本问所述的系统功能,
逐一介绍了需要了相关的
知识;最后对本系统实现所用到的软硬件和开发平台作了简要的说明。
-
可编辑修改
-
。
3
需求分析
聊天交流是目前互联网提供的主要内容。聊天系统有多种实现方式,类似
ICQ
属于一种点对点的聊天系统;还有一种是基于
Socket
的集中式聊天系统,这种聊天
系统需要登陆统一的聊天服务器。在基于
p>
Socket
的聊天系统中,主要有两种角色:
服务器和客户端,
不同的客户端登陆集中式的服务器,
通过
服务器将一个客户端发出
的信息推送到其他所有客户端。
p>
基于
Socket
的聊天系统最早实现是使
用网页刷新方式,通过客户端不断地自动
刷新,
将服务器端整个
页面内容下载到客户端显示,
这种方式的聊天速度慢,
而且有<
/p>
聊天系统在客户端和服务器之间主要传送的是文字信息,
服务器端
只需要把最近
的文字信息推送到客户端,
这样减少了网络传输内
容,
节省了网络传输的时间,
无疑
提高
了聊天速度。这种“推”技术是目前基于
Socket
聊天系统
的主要实现技术。
在基于
Socke
t
的聊天系统,客户端和服务器必须保持随时随地的连接。这有别
于普通
Web
浏览的连接方式。在使用浏览器访问服务器时,
先由客户端发出
HTTP
协议,然后服务器响应处理这个客户端
的响应,再返回处理结果;请求(
Request
)
和响应(
Response
)是一种一对一的前后
因果关系。而在基于
Socket
的聊天系统
< br>中,
客户端发出聊天信息的同时,
客户端也在接受服务器
发送过来的其他人的聊天信
息,因此,请求和响应不存在那种前后对应关系,是两种分别
独立进行的进程。因为
服务器任何时候都可能发送信息到客户端,
因此,
客户端和服务器一旦建立连接,
必
须能让服务器在以后发送中寻找定位到这个连接。
本系统主要通过客户端,服务器端来体现聊天系统的基本功能。
(1)
服务器端:
1
处理用户注册
,
○
2
处理用户登录
,
○
< br>3
处理用户发送信息,
○
4
处理用户得到信息;
○
刷屏现象,很快被更新的聊天技术所替代。
-
可编辑修改
-
。
(2)
客户端:
1
用户注册界面及结果,
○
2
用户登录界面及结果,
○
3
用户发送信息界面及结果,
○
4
用户得到信息界面及结果,
○
5
用户传送文件,
○
6
用户退出界面及结果。
○
3.1
需求分析
3.1.1
可行性分析
经济可行性:
本系统的开发前提是作为一个毕业设计在实施,
不注重直接的经济
效益和其后的发展方向,只在注重自身水平和能力的提高,故不用考虑到经济问题。
技术可行性:本系统的开发利用
Microsoft Acce
ss
作为本系统的数据库,它是
一个支持多用户的新型数据库,
适用于大中规模的数据量要求。使用
C++
作为系统
开发语言,它具有
C
语言的注重安全稳定性能,也
是一种面向对象开发的语言,保
证了代码的模块化要求,
而代码
的模块化的提高,
非常有利于以后对新系统的扩展与
修改。
p>
运行可行性:
本系统为一个小型的局域网
聊天系统,
所耗费的资源非常的小,
现
在一般的电脑无论是硬件还是软件都能满足条件。因此,本系统在运行上是可行的。
操作可行性:操作性强,容易上手使用。
3.2.2
系统性能需求
实用性:为局域网聊天提供方便,有效进行作业管理。
操作简单:
本系统应该适用于不同水平的使用者,
包括事业单位和企业单位,
同
时系统不应太复杂和烦琐,因
此要求系统的操作尽可能简单易行。
技术先进:
产品的系统设计和开发应紧跟着整个计算机发展潮流,
采用当时最先
进的设计思想,利用最新的开发技术和开发工具。
适应性:
应该能广泛应用于不同类型的企事业单位。
系统采
用模块化设计,
用户
-
可编辑修改
p>
-
。
可以根据
自己的实际情况自行组合,使系统在不同的硬件环境下都能得以应用。
代码可读性好:文中的代码将尽可能简洁,易懂。
3.1.3
系统运行需求
?
处理器:
Intel Pentium PIII
或更高处理器
?
内存:
2
56MB
或更高
?
网络:局域网
?
操作系统:
Windows 2000 /Windows
XP
3.2
数据流图
3.2.1
顶层数据流图
聊天用
户
局域网多
人聊天系
统
聊天用户
图
3-1
顶层数据流图
3.2.2
一层数据流图
聊天用户
读取
返回
写聊天信息
p>
返回
聊天用户
客户端
提交
反馈
服务器端
存储
-
可编辑修改
-
。
图
3-2
一层数据流图
3.2.3
二层数据流图
用户
< br>用户登录
用户注
册
客户端
处理用户
退出
处理
服
务器端
用户得到
的信息
监控
保存
保存
用户发送
信息<
/p>
服务器日志
数据聊天信息
聊天内容
图
3-3
系统二层数据流图
3.3
本章小结
本章从软件工程的角度,对
基于
MFC
的多功能局域网聊天器系统进行了需求分
析,分别系统可行性,系统性能需求,系统运行需求以及数据流程图分析。明确了系
统要实现的目标和开发中的注意事项。
-
可编辑修改<
/p>
-
。
4
系统设计
4.1
系统实现原理
聊天系统的设计跟普通
网站设计有着许多不同的地方,
普通网站设计所考虑的因
素,<
/p>
例如,
普通网站需要对布局进入大量美化以及动画设计等等,
p>
而聊天室只要提供
满足访客双方直接实时聊天即可。
因此,
在设计聊天系统的过程中,
需要从局域网络
p>
的角度重新进行设计。
在
Internet
上的聊天程序一般都是以服务器提供服务端连接响应,使用者
通过
客户端程序登录到服务器,
就可以与登录在同一服务器上的
用户交谈,
这是一个面向
连接的通信过程。因此,程序要在
p>
TCP/IP
环境下,实现服务器端和客户端两部分程
序。
根据这种服务器
/<
/p>
客户端的模式,
在基于
MFC
的多功能局域网聊天器的总体构架
设计如下图:
局域网聊天系统
客户端
退
出
聊
p>
天
系
统
服
务
器
处
理
注
册
信
息
< br>服务器端
p>
用户
注册
用户
登录
用户
文字
聊天
用户
文件
传送
服
务
器
处
理
登
录
服
务
器
p>
处
理
文
件
传
送
服
务
器
监
控
文
< br>字
聊
天
实
时
显
示
在
线
用
户
信
息
p>
图
4-1
系统总体架构图
-
可编辑修改
-
。
4.2
C/S
架构设计
在本系统中,
客户端需要将用户输入的聊天信息发往服务器,
那么建立一个线程
一直实现发送功能,
由于客户端监视用户输
入也有一个监视线程在运行。
这样,
有两
个线程各司其职。
一个负责监视输入,
另外一个线程负责将输
入发送出去。
那么再这
两个线程之间如何通信?最经常使用的办
法是使用队列(
Queue
)模式。
Q
ueue
模
式是处理消息通信的基本办法,如图
4-2
所示。
加入
队列
Queue
提取
图
4-2
队列
Queue
模式
本系统中应用
p>
Queue
模式有一个问题,加入动作是由用户输入决定的,一旦有
用户输入,
就会发生假如动作,
那么,
提取线程会在队列另外一段进入死循环不断的
读取,这样才能在
队列中一旦有对象事件时,能够被立即提取出来,因此必须使用
while
()实现死循环。
但是必须注意到,每次循环中的
提取动作执行是有前提条件的——队列中有对
象事件。
这样提取
线程将中断等待,
从
Queue
中读取
假如对象。
线程再中断等待时,
将释放
CPU
的霸占,这样就有效率地利用了
CPU
< br>,如图
4-3
所示。
提
加
队列
Queue
图
4-3
改进后的队列
Queue
模式
w
由此可见,
并不是说使用了多线程就能提高
系统性能,
更重要的是还要注意提高
CPU
使用效率,防止
Block
发生。
提高多线程的使用效率还必须了解下列几点:
(
1
)
线程运行的次序并不是
按照创建他们时的顺序来运行的,
CPU
处理线程的
顺序是不确定的,如果需要确定,那么必须手工介入。
-
可编辑修改
-
。
(
2
p>
)要避免大量线程运行时发生堵塞现象,可以通过设置线程优先级来实现,
< br>但是同时又必须注意到,
再大量线程被堵塞时,
最高优先
级的线程先运行,
但不表示
低级别线程不会运行,只是运行概率
较小而已。
(
3
)检查所有可能
Block
的地方,尽可能多的使用
sleep
;尽可能延长
sleep
(毫秒数)的时间。
但是,
< br>当多线程数量很多时,
每次启动线程的开销也非常大,
有
时创建新线程的
服务器再创建和销毁线程上花费的时间和消耗的资源,
< br>可能要比花再处理应用逻辑运
算的时间和资源要多得多。
除了创建和销毁线程的开销之外,
活动的线程也会消耗系
统资源
。当应用系统突然遭遇巨大访问量访问时,服务器内存中会创建太多的线程,
直至资源完
全消耗,这对于应用系统的正常运行是有致命伤害的。
为了能
再访问线程开启数目,
以及减少线程频繁创建和销毁带来的系统开销,
< br>提
高系统的大量访问量处理性能和速度,
需要事先创建一
定数量的线程供调用者循环反
复使用,这也就是“池”技术。
线程池的基本原理也是基于队列
Queue
事先,通过不断查询队列
Queue
是否
< br>有可以运行的线程。如果有,就立即运行线程;如果没有,就锁定等待,直至有新的
线程假如被出发解锁。
本系统中,
聊天系统核心功能的处理可以采取线程池设计,
这样可以加快对每次
聊天信息的处理时间和提高处理速度。
整个系统的核心底
层是非堵塞
I/O
技术,
通过使用这一
新技术,
可以实现底层网
络
I/O
p>
的无堵塞、流畅地读写,为整个系统的高性能运行奠定了坚实的基础。
非堵塞的
Socket I/O
有
两大部分:服务器和客户端。在两端都将采取这一新技
术,根据
TCP/UDP
不同,又分别有两套
Socket
详细实现。
-
可编辑修改
-
。
4.3
模块设计
4.3.1
系统流程图
4.3.1.1
系统总体流程图
启动服务器
否
开始
p>
判断启动信息
是
启动客户端
判断登录信息
是
否
p>
注册用户
登录聊天器客
服端
是
退出聊天器
退出服务器
结束
图
4-4
系统总体流程图
-
可编辑修改
-
-
-
-
-
-
-
-
-
-
上一篇:中东网站大全
下一篇:S8300 媒体服务器&G450媒体网关