当前位置:文档之家› (2011届)基于Visual C++的聊天室程序的设计__李挺(含修改意见4)

(2011届)基于Visual C++的聊天室程序的设计__李挺(含修改意见4)

韶关学院

毕业论文

题目:基于Visual C++的聊天室程序的设计学生姓名:李挺

学号:0711********

系(院):计算机科学院

专业:计算机科学与技术

班级:07级计算机(1)班

指导教师姓名及职称:程细柱讲师

起止时间:2010年11月~2011年4月

1

基于Visual C++的聊天室程序的设计

摘要:网络聊天室,其实质就是基于Internet的一种网络聊天软件。它可以在网络环境下进行实时的一对多或多对多的匿名交谈。网络聊天室软件的制作方法有很多种,比如用MFC和Java等语言设计的就有很多,本毕业设计主要是利用MFC所提供的各种控件尤其是WinSock控件,基于C/S模式,设计了一个网络聊天室,圆满地实现在网络上实时聊天的功能。

关键词:WinSock;C/S;Visual C++ 6.0;聊天室

According to Visual C++of the design of chat room procedure Abstract:The network chatroom,its essence is a kind of network chat software based on Internet.More than of one that it can be while carrying on really under environment of the network or to a lot of anonymous talk https://www.doczj.com/doc/6c15730432.html,work manufacture method,chatroom of software have many,for example that language designed to there are a lot of with MFC and Java,etc., graduation project this to utilize various kinds of controlling parts, especially WinSock Control controlling parts that MFC offers mainly, because of C/S mode,design a network chatroom,realizes the function that chats when real on the network satisfactorily.

Key words:WinSock;C/S;Visual C++ 6.0;Chatroom

2

目录

1引言 (5)

1.1选题的依据及课题的意义 (5)

1.2国内外主流聊天工具的研究 (5)

2需求分析 (6)

2.1开发目的 (6)

2.2系统需求分析 (6)

2.2.1聊天室设计目标 (6)

2.2.2系统总体用例图 (6)

2.3总体结构架构图: (7)

2.4服务器端结构包括有:服务器连接端口设置、信息显示、在线人员管理、在线人员统计、

信息统计、连接客户机。 (8)

2.5客户机端结构包括有:设置连接服务器信息、设置个人信息、信息编辑与发送、信息显示 (8)

3系统实施方案 (9)

3.1基础知识介绍 (9)

3.1.1Winsock介绍 (9)

3.1.2MFC类CAsyncSocket类和CSocket类简述 (10)

3.1.3CAsyncSocket类编程模型 (10)

3.1.4Csocket类编程模型 (12)

3.1.5WINSOCK API主要函数简介 (12)

3.2开发工具选择 (13)

4系统详细设计 (14)

4.1服务器端详细设计 (14)

4.1.1服务器端设计思想 (14)

4.1.2服务器端界面设计(控件属性设置) (14)

4.1.3服务器端主要类的定义与实现 (16)

4.1.4服务器端的自定义连接端口号的设计与实现 (24)

4.1.5服务器端在线成员显示与管理的设计与实现 (24)

4.1.6服务器端信息显示设计与实现 (25)

4.2客户机端详细设计 (25)

4.2.1客户机端设计思想 (25)

4.2.2客户机端界面设计(控件属性设置) (26)

4.2.3客户机端各个主要类的定义与实现 (28)

4.2.4客户机端连接服务器设置的设计与实现 (30)

4.2.5客户机端发送信息的设计与实现 (32)

5编码与调试 (33)

5.1编码与调试方法 (33)

6测试 (33)

6.2运行结果 (33)

3

7总结 (37)

致谢 (38)

参考文献 (39)

4

基于Visual C++的聊天室程序的设计

专业班级:计算机科学与技术07级软件1班姓名:李挺

指导教师:程细柱

1引言

1.1选题的依据及课题的意义

当前是数字信息时代,网络时代,任何一种工具都不能忽视在网络上的应用,并且随着Internet的普及和宽带技术的成熟,截止2010年12月底,互联网普及率达到34.3%,男女比例为男性占55.2%,女性占44.8%。越来越多的用户进入网络世界中享用浏览新闻、查询信息、交友聊天、接收发送邮件、在线影院、在线电视直播等服务,享受网络带来的便利和办公的高效,与此同时一个新型的Web应用程序为网民之间提供了一个实时通信的功能和场所,这就是聊天室。

在网络早期就开始盛行,不论是BBS,IRC都有类似网上聊天室的机制。聊天室为网友提供了实时性对话的渠道,是网络上极为流行的一项服务。

聊天室适用于网上会议或闲聊的一些场合。聊天室为网友提供了较好的交友环境,网友之间相互以文字交谈。

1.2国内外主流聊天工具的研究

在现在网络上流行着几大聊天软件:QQ,MSN,飞信,Gtalk等。

QQ:它是现在在中国被使用次数最多的通讯工具。QQ之所以能够取得成功,原因不在于它的功能如何强大,而在于它的界面设计的十分合理,用户操作简单。MSN:它商务人群使用多,使用MSN Messenger可以与他人进行即时交流,还可以通过此软件来查看联系人是否联机。它以占用内存小,性能稳定备受广大网民的喜爱,尤其是在工作中的使用比腾迅QQ,使用率要高很多。

飞信:飞信这一中国移动由“移动通信专家”向“移动信息专家”转型过程中的战略业务。飞信除具备传统意义上的IM功能,也将捆绑如彩信、彩铃、博客、流媒体等内容,在实现电信与互联网互通的基础上,飞信将成为3G时代重要的应用平台。飞信采用号码强制分配,QQ、MSN等大多数的IM产品,都是容许用户自选号码或是账户名称,用户可以使用个性化的账户名称或号码,容易获得用户的青睐,而飞信则是采用号码强制分配这种形式,有些遗憾。

5

2需求分析

2.1开发目的

本毕业设计主要目的是综合大学期间所学习的专业知识,结合网络编程相关知识并实现一个网络应用程序。以Visual C++作为开发平台,通过实践将自己学到的知识运用到实践中,能提高自己的应用能力。即时了解和掌握流行的即时通讯机制并且应用到实践过程中,将极大的提高自己的设计和开发软件的积极性;提升自己的理论和技术水平,跟踪国内外最新的技术和开发模式,为以后类似的开发积累经验;同时,开发出来的作品也可以真正运用到实际当中。

随着新一轮网络技术的飞速发展,越来越多人与网络相连在一起了。作为一个网络上的沟通工具,聊天室也跟随着发展,越来越多人认识到QQ、MSN、飞信等等主流聊天工具。

聊天室作为一个大众化的聊天舞台,丰富了人们沟通的方式。不过一些大网站上的聊天室都存在一些不足,聊天室都是网站管理者的,用户不能自己选择房间,用户自然慢慢的对聊天室的热情减弱。

2.2系统需求分析

2.2.1聊天室设计目标

2.2.1.1服务器端设计目标

(1)侦听客户端连接

(2)自定义与客户端连接的端口号.

(3)创建与客户端的连接.

(4)与客户端发送/接收信息.

(5)接收客户端发送的信息后同步各个客户端.

(6)通过MFC的文档进行保存聊天记录(格式是.txt).

2.2.1.2客户端设计目标

(1)自定义与客户端连接的端口号(与服务器设置的端口号匹配).

(2)向服务器发送连接请求.

(3)与服务器发送/接收信息.

(4)通过MFC的文档进行保存聊天记录(格式是.txt).

2.2.2系统总体用例图

根据系统分析,系统总体结构基本确定为包括有:服务器启动、服务器端信息列表、服务器端人员管理。客户端设置、用户进入聊天室、用户离开聊天室、用户聊天

6

2.3总体结构架构图:

总体系统架构包括有:聊天室系统、服务器端、客户机端系统总体的架构如图2.2

7

图2.4系统总体架构图

2.4服务器端结构包括有:服务器连接端口设置、信息显示、在线人员管理、在线人员统计、信息统计、连接客户机。

服务器端结构图如图2.3

图2.5服务器端结构图

2.5客户机端结构包括有:设置连接服务器信息、设置个人信息、信息编辑与发送、信息显示

客户机端结构图如图2.4

8

图2.6客户机端结构图

3系统实施方案

3.1基础知识介绍

3.1.1Winsock介绍

Socket(套接字)最初是由加利福尼亚大学Berkeley(伯克利)分校为UNIX 操作系统开发的网络通信接口,随着UNIX的广泛使用,Socket成为当前最流行的网络通信应用程序接口之一。20世纪90年代初,由Sun Microsystems,JSB,FTP software,Microdyne和Microsoft等几家公司共同定制了一套标准,即Windows Socket规范,简称WinSock。

Windows Sockets规范以U.C.Berkeley大学BSD UNIX中流行的Socket接口为范例定义了一套Micosoft Windows下网络编程接口。它不仅包含了人们所熟悉的Berkeley Socket风格的库函数;也包含了一组针对Windows的扩展库函数,以使程序员能充分地利用Windows消息驱动机制进行编程。

Windows Sockets规范本意在于提供给应用程序开发者一套简单的API,并让各家网络软件供应商共同遵守。此外,在一个特定版本Windows的基础上,

9

Windows Sockets也定义了一个二进制接口(ABI),以此来保证应用Windows Sockets API的应用程序能够在任何网络软件供应商的符合Windows Sockets协议的实现上工作。因此这份规范定义了应用程序开发者能够使用,并且网络软件供应商能够实现的一套库函数调用和相关语义。遵守这套Windows Sockets规范的网络软件,我们称之为Windows Sockets兼容的,而Windows Sockets兼容实现的提供者,我们称之为Windows Sockets提供者。

一个网络软件供应商必须百分之百地实现Windows Sockets规范才能做到现Windows Sockets兼容。任何能够与Windows Sockets兼容实现协同工作的应用程序就被认为是具有Windows Sockets接口。我们称这种应用程序为Windows Sockets应用程序。Windows Sockets规范定义并记录了如何使用API与Internet 协议族(IPS,通常我们指的是TCP/IP)连接,尤其要指出的是所有的Windows Sockets实现都支持流套接口和数据报套接口.应用程序调用Windows Sockets的API实现相互之间的通讯。

通信的基石是套接口(Socket),一个套接口是通讯的一端。在这一端上你可以找到与其对应的一个名字。一个正在被使用的套接口都有它的类型和与其相关的进程。

套接口存在于通讯域中。通讯域是为了处理一般的线程通过套接口通讯而引进的一种抽象概念。套接口通常和同一个域中的套接口交换数据(数据交换也可能穿越域的界限,但这时一定要执行某种解释程序)。

Windows Sockets规范支持单一的通讯域,即Internet域。各种进程使用这个域互相之间用Internet协议族来进行通讯(Windows Sockets1.1以上的版本支持其他的域,例如Windows Sockets2)。套接口可以根据通讯性质分类;这种性质对于用户是可见的。应用程序一般仅在同一类的套接口间通讯。不过只要底层的通讯协议允许,不同类型的套接口间也照样可以通讯。用户目前可以使用两种套接口,即流套接口和数据报套接口。

3.1.2MFC类CAsyncSocket类和CSocket类简述

MFC提供了两个Windows Sockets封装类,即AsyncSocket类和CSocket 类,它们使编程工作变得相对简单,尤其是Csocket类。

CAsyncSocket类所提供的唯一抽象就是将与套接字相联系的windows消息以回调函数的形式表示,因此它所带来的惟一方便就是程序员无需自行处理Winsock的I/O模型,而对于阻塞处理、字节排序差异以及Unicode等依然负有责任与灵活的控制权。

Csocket类作为CasyncSocket类的派生类,它提供了对通过Carchive对象使用套接字工作的更高级的抽象。它提供了比CAsyncSocket更高层的WinSock API接口。Csocket类和CsocketFile类可以与Carchive类一起合作来管理发送和接收的数据,这使管理数据收发更加便利。CSocket对象提供阻塞模式,这对于Carchive的同步操作是至关重要的。阻塞函数(如Receive()、Send()、ReceiveFrom()、SendTo()和Accept())直到操作完成后才返回控制权,因此如果需要低层控制和高效率,就使用CasyncSock类;如果需要方便,则可使用Csocket 类。

3.1.3CAsyncSocket类编程模型

(1)重要的成员函数

10

CAsyncSocket()和Creat()

CAsyncSocket()是构造函数,他构造一个空的套接字对象,原型如下:

CAsyncSocket();

在构造空的套接字对象后,调用Socket创建句柄,并绑定到指定的地址。如果是在服务器端,当监听套接字调用Accept()函数时,会自动创建新的套接字,用户无需对该套接字调用Creat()函数。

Creat()函数的原型如下:

BOOL Creat(UINT nSocketPort=0,int nSocketType=SOCK_STREAM,

Long Ievent=FD_READ|FD_WRITE|FD_OOB|FD_ACCEPT

|FD_CONNECT|FD_CLOSE,LPCTSTR lpszSocketAddress=

NULL);

(2)编程模型

第一步:构造一个CAsyncSocket对象,利用这个对象的Create成员函数来创建底层的套接字。并且在Create函数中通过参数可以设定套接字的端口设置,事件通知,套接字的类型。例如:

//这个方法是使用的是默认参数产生的流套接字

CAsyncSocket sock;

sock.Create();

//指定端口号,产生数据报套接字

//这种方法在堆上产生CasyncSocke对象,Creat()函数用指定的端口与//地址产生一个数据报套接字

CAsyncSocket*pSocket=new CAsyncSocket;

int nPort=27;

pSocket->Create(nPort,SOCK_DGRAM);

第二步:如果创建的是流套接字,那么久需要在客户和服务器之间建立。因为只有客户机和服务器之间建立连接,套接字才能进行数据的传输。(如果是数据报套接字,则不需要建立连接,也不需要调用Connect()函数。)//客户端

用CAsyncSocket类的Connect()成员函数连接到服务器。

//服务端(数据报套接字省去上面的客户端的)

用CAsyncSocket类的Listen()成员函数开始侦听,一旦收到连接的请求,则调用CasyncSocket的Accept()成员函数开始接收

第四步:通信结束,释放系统资源和销毁对象

调用CAsyncSocket类的成员函数Close();这个函数用来释放与套接字有关的系统资源。

11

销毁CAsyncSocket对象:

A.如果是在栈上产生的CAsyncSocket对象,则对象超出定义的范围时自动被析构。

B.如果是在堆上产生,也就是用了new这个操作符,则必须使用delete 操作符销毁CAsyncSocket对象,否则会造成内存泄露。

3.1.4Csocket类编程模型

使用Csocket对象涉及Carchive和CsocketFile类对象。

第一步:构造一个CSocket对象

第二步:使用Csocket对象的Creat()成员函数产生一个socket对象。在客户端,除非需要数据报套接字,Creat()函数一般情况下应该使用默认参数。而对于服务器端,必须在调用Creat时指定一个端口。需要注意的是:Carchive类对象不能与数据报UDP套接字一起工作,因此对于数据报套接字,CAsyncSocket和Csocket的使用方法是一样的。

第三步:

客户机端套接字:调用CAsyncSocket::Connect()函数与服务器端套接字接;服务器端套接字:调用CAsyncSocket::Listen()开始监听来自客户机端的来接请求,收到连接请求后,调用CAsyncSocket::Accept()函数接受请求,建立连接。注意:Accept()成员函数需要一个新的并且为空的Csocket对象作为它的参数,解释同上。

第四步:产生一个CsocketFile对象,并把它与Csocket对象关联起来。

第五步:为接收和发送数据各产生一个Carchive对象,把它们与CsocketFile 对象关联起来。切记Carchive是不能和数据报套接字一起工作的。

第六步:使用Carchive对象Read()、Write()等函数在客户与服务端传送数据。

第七步:通讯完毕后,销毁Carchive、CsocketFile和Csocket对象。

3.1.5WINSOCK API主要函数简介

Socket接口是网络编程(通常是TCP/IP协议,也可以是其他协议)的API。最早的Socket接口是Berkeley接口,在Unix操作系统中实现。WinSock 也是一个基于Socket模型的API,在Microsoft Windows操作系统类中使用。它在Berkeley接口函数的基础之上,还增加了基于消息驱动机制的Windows扩展函数。Winscok1.1只支持TCP/IP网络,WinSock2.0增加了对更多协议的支持。这里,讨论TCP/IP网络上的API。

主要函数:

第一类是WinSock API包含的Berkeley socket函数。

用于网络I/O函数:Accept()、CloseSocket()、connect()rect()、recvfrom()、select()、send()、sendto()

不涉及网络I/O,在本地端完成的函数:Bind(),Getpeername(),GetSockname(),GetSocketopt(),Htonl(),

12

Htons(),Inet_addr,Inet_nton(),IoctlSocket(),Listen(),Ntohl(),Nto hs(),SetSocketopt(),Shutdow(),Socket()

第二类是检索有关域名、通信服务和协议等Internet信息的数据库函数,如:

Gethostbyaddr(),Gethostbyname(),Gethostname(),Getprotolbynam

e()等

第三类是Berkekley socket例程的Windows专用的扩展函数,如gethostbyname对应的WSAAsynGetHostByName(其他数据库函数除了gethostname都有异步版本),select对应的WSAAsynSelect,判断是否阻塞的函数WSAIsBlocking,得到上一次Windsock API错误信息的WSAGetLastError,等等。

3.2开发工具选择

Visual C++作为一个功能强大的可视化应用程序开发工具,是计算机界公认的最优秀的应用开发工具之一。Microsoft的基本类库MFC使得开发Windows应用程序比以往任何时候都要容易。在Visual C++这些不同的类型的文件有不同的作用,详细如下:

.dsw的文件类型,这种类型的文件在VC中是级别最高的,称为Workspace 文件。在VC中,应用程序是以Project的形式存在的,Project文件以.dsp扩展名,在Workspace文件中可以包含多个Project,由Workspace文件对它进行统一管理和协调。

.opt的文件类型是与Workspace文件配合的。这个文件包含的是在Workspace文件中药用到的本地计算机的有关配置信息,所以这个文件不能再不同计算机上共享。

.dsp文件类型,也就是前面提到的Project文件的扩展名,它存放的是一个工程的,也就是特定的应用程序的有关信息,每个工程都对应有一个dsp类型的文件。

.clw文件用来存放应用程序中用到的类和资源信息的。这些信息是VC中的ClassWizard工具管理和适应能个类的信息来源。

.h和.cpp分别是头文件和实现文件。

.rc文件成为资源文件,其中包含了应用程序中用到的所有的windows资源。

13

4系统详细设计

4.1服务器端详细设计

4.1.1服务器端设计思想

利用CAsyncSocket类派生出来的自己需要的套接字,然后用套接字建立连接、传输数据等套接字事件进行处理。

具有如下特点:

(1)可以与多个客户端相连接,并能与每个客户机端之间进行数据的传输

(2)可以统计和显示客户端的个数和所有客户端发送的信息的数目。

(3)接收客户端发送的信息,并将该信息显示出来,而且还要根据客户机的状即时发布一些信息,如客户机的离开等。

(4)将接收到的一个客户端的信息发送给所有其他的或指定的客户端的程序,实现聊天室的信息同步。

服务器端系统活动图如图4.1

4.1.2服务器端界面设计(控件属性设置)

(1)服务器端口号设置

14

15

界面设计:如图

4.2

图4.2服务器端口号设置图

控件属性:关于界面设计的有关控件的属性设置如表4.1所示

表4.1服务器端口号设置界面控件属性表

控件

属性设置

Static Text ID

IDC_STATIC Caption 端口号:

Edit Box ID IDC_EDIT_CHANNEL Button

ID

IDOK Caption 确定

控件变量设置:在端口号设置的界面中,其中编辑控件要对其变量进行设置。

服务器端口号设置界面的控件变量设置如表4.2所示

表4.2服务器端口号设置界面的设置控件变量表

对象名称类别类型IDC_EDIT_CHANNEL m_nPort Value Int (2)主窗口

界面设计:如图4.3

图4.3服务器端主窗口页面设计图

(3)人员管理界面:如图

4.4

人员管理界面的控件包括有:List Box、Button。其属性设置如表4.3所示

表4.3人员管理界面控件属性表

控件属性设置

List Box ID IDC_CLEANLIST

Tab Stop未选中

Sort未选中

Selection None

Button ID IDOK

Caption确定

Disabled未选中

Default未选中

Button ID IDCANCEL

Caption取消

Disabled未选中

Default未选中

人员管理界面的控件需要进行控件变量设置:如表4.4所示

表4.4人员管理界面的控件控件变量表

对象名称类别类型

IDC_CLEANLIST m_cleanname Value CString

IDC_CLEANLIST m_cleanlist Control CListBox

4.1.3服务器端主要类的定义与实现

(1)获取通信端口号CPortDlg类

在建立客户机与服务器之间的连接之前,服务器应该处于侦听状态。为了侦听连接请求,需要获得通信端口号。即在应用程序的主页面出现之前,弹出创建

16

通信端口对话框,获取侦听连接的端口号,这个端口号也就是客户机连接请求应该发送的端口号。

该对话框的名字:IDD_DIALOG_PORT

在添加一个类CPortDlg类对应IDD_DIALOG_PORT对话框。下面是具体的定义:

a.定义:class CPortDlg:public CDialog

{

………….

…………

};

b.获取通信端口CPortDlg类数据成员:m_nPort;类型是整形的

c.获取通信端口CPortDlg类成员函数包括有:CPortDlg,DoDataExchange,OnInitDialog,具体设置如表4.5所示,具体定义在PortDlg.h文件中

表4.5获取通信端口CPortDlg类成员函数表

函数描述函数类型Access

CPortDlg public

DoDataExchange void protected virtual OnInitDialog BOOL protected virtual

d.主要函数的实现,代码在PortDlg.cpp中

//构造函数

CPortDlg::CPortDlg(CWnd*pParent/*=NULL*/)

:CDialog(CPortDlg::IDD,pParent)

{

//{{AFX_DATA_INIT(CPortDlg)

//}}AFX_DATA_INIT

}

void CPortDlg::DoDataExchange(CDataExchange*pDX)

{

CDialog::DoDataExchange(pDX);

//{{AFX_DATA_MAP(CPortDlg)

DDX_Text(pDX,IDC_EDIT_CHANNEL,m_nPort);

DDV_MinMaxInt(pDX,m_nPort,700,9000);

//}}AFX_DATA_MAP

}

//CPortDlg类的初始化

BOOL CPortDlg::OnInitDialog()

{

CDialog::OnInitDialog();

//设置默认的端口号

m_nPort=700;

//更新窗体

UpdateData(FALSE);

17

return TRUE;

}

(2)构造自己的信息类CMsg类

为了利用CSocket类及其派生类可以与CsocketFile对象和Carchive对象合作来进行数据的传送和接收工作的特性,我们构造一个用来进行信息传输的类。由于CSocket类及其派生类要利用Carchive对象对要传送或接收的数据进行序列化的功能,即该信息类必须从CObject类或CObject类的派生类中派生出来。

a.类的定义:

class CMsg:public CObject

{

……………

……………

……………

};//该类是从CObject类中派生出来的

b.信息类CMsg类成员变量,包括有:m_strText,from,to,sec,type,clr, m_bClose,m_msgList,fromList,tolist,seclist,typelist,clrlist.变量设置如表4.6所示

表4.6信息类CMsg类成员变量表

类型成员变量名作用

Cstring m_strText传送字符串

Cstring from

Cstring to

Cstring sec

Cstring type方式

Cstring clr显示的颜色

BOOL m_bClose客户机状态

Cstring m_msgList记录信息的列表

Cstring fromlist

Cstring tolist

Cstring seclist

Cstring typelist

Cstring clrlist

c.信息类CMsg类成员函数,包括有:CMsg,~CMsg,AssertValid,Dump, Init,Serialize,成员函数设置具体如表4.7所示。它们具体的定义在Msg.h文件中

表4.7信息类CMsg类成员函数表

函数描述函数类型Access作用

CMsg public构造函数

~CMsg public virtual析构函数AssertValid void public virtual

Dump void public virtual

Init void public初始化

18

Serialize void public virtual

d.成员函数的实现:代码在Msg.cpp文件中

//构造函数

CMsg::CMsg()

//析构函数

CMsg::~CMsg()

void CMsg::AssertValid()const

void CMsg::Dump(CDumpContext&dc)const

//初始化函数

void CMsg::Init()

{

type="0";

sec="FALSE";

clr="0,136,255";

m_bClose=FALSE;

from=to=m_strText=_T("");

m_msgList.RemoveAll();

fromlist.RemoveAll();

tolist.RemoveAll();

seclist.RemoveAll();

typelist.RemoveAll();

clrlist.RemoveAll();

}

void CMsg::Serialize(CArchive&ar)

(3)从CSocket类派生出来的ClisteningSocket类,头文件为:ListeningSocket.h,而实现文件为:ListeningSocket.cpp。

该类的主要作用是侦听连接请求并对连接请求进行处理。

a.ClisteningSocket类定义:

class CListeningSocket:public CSocket

{

…………

…………

};

b.ClisteningSocket类成员变量:只有个一个成员变量m_pDoc,它的数据类型是CServerDoc*,是一个指向主界面类的指针。

c.ClisteningSocket类成员函数包括有:AssertV oid,ClisteningSocket, ~ClisteningSocket,Dump,OnAccept,operator=。函数的具体设置如表4.8所示

表4.8ClisteningSocket类成员函数表

函数描述函数类型Access作用AssertV oid public virtual

ClisteningSocket public

~ClisteningSocket public virtual

19

Dump public virtual

OnAccept void protected virtual重载成员函

operator=private

d.ClisteningSocket类主要函数的实现

void CListeningSocket::OnAccept(int nErrorCode)

{

CSocket::OnAccept(nErrorCode);

m_pDoc->ProcessPendingAccept();

}

//构造函数的实现

CListeningSocket::CListeningSocket(CServerDoc*pDoc)

(4)CClientSocket类

CClientSocket类是相对于ClisteningSocket类接受客户机的连接请求后,创建一个套接字类用于建立服务器与客户机之间的连接并进行数据的传送和接收工作。该类是从CSocket派生出来的。

https://www.doczj.com/doc/6c15730432.html,lientSocket类成员变量包括有:m_nMsgCount,m_pArchiveIn, m_pArchiveOut,m_pDoc,m_pFile,name,needdel.具体设置如表4.9所示。

表4.9CClientSocket类成员变量表

变量名类型作用

m_nMsgCount int信息的数目

m_pArchiveIn CArchive*CArchive*对象,用于数据

传输

m_pArchiveOut CArchive*CArchive*对象,用于数据

传输

m_pDoc CServerDoc*指向CserverDoc类的指

m_pFile CSocketFile*用于数据传输

name Cstring

needdel BOOL

https://www.doczj.com/doc/6c15730432.html,lientSocket类成员函数,包括有:Abort,AssertValid,CClientSocket, ~CClientSocket,Dump,HasConnectionDropped,IsAborted,OnReceive,ReceiveMsg, SendMsg.具体设置如表4.10所示。

表4.10CClientSocket类成员函数表

函数描述函数类型Access作用

Abort void public放弃发送AssertValid void public virtual

CClientSocket public

~CClientSocket public

Dump void public virtual HasConnectionDropped BOOL public

Init void public初始化

20

相关主题
文本预览
相关文档 最新文档