网络聊天程序的设计和实现报告.docx

上传人:b****2 文档编号:1645713 上传时间:2022-10-23 格式:DOCX 页数:18 大小:283.33KB
下载 相关 举报
网络聊天程序的设计和实现报告.docx_第1页
第1页 / 共18页
网络聊天程序的设计和实现报告.docx_第2页
第2页 / 共18页
网络聊天程序的设计和实现报告.docx_第3页
第3页 / 共18页
网络聊天程序的设计和实现报告.docx_第4页
第4页 / 共18页
网络聊天程序的设计和实现报告.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

网络聊天程序的设计和实现报告.docx

《网络聊天程序的设计和实现报告.docx》由会员分享,可在线阅读,更多相关《网络聊天程序的设计和实现报告.docx(18页珍藏版)》请在冰豆网上搜索。

网络聊天程序的设计和实现报告.docx

程序设计实践

课题名称:

网络聊天程序的设计和实现

学生姓名:

班级:

班内序号:

17

学号:

日期:

2014.5.25

1)课题概述

1.1课题目标和主要内容

主要内容和目标:

(1)按实验步骤使用VC++设计出程序,在此的基础上用VC++或其他工具设计出一个能实现两个人及以上人次聊天的网络程序。

(2)熟悉VisualC++的基本操作;掌握最基本的Client/Server(客户机/服务器)模式的网络编程技术,并在此基础上实现更为复杂的网络编程;基本了解基于对话框的windows应用程序的编写过程;对于WindowsSocket编程建立初步概念。

使用的开发平台:

VC2013

采用的主要工具:

MFC应用程序

1.2系统的主要功能

功能表:

1.建立服务器:

程序运行后,可以输入IP地址和端口号后建立服务器,用于监听信息。

2.实现客户端功能:

程序运行后,可以输入IP地址和端口号,连入服务器,进入聊天室聊天。

3.聊天功能:

进入聊天室的客户可以给自己取昵称,然后进行多人聊天。

界面可以输入聊天内容、昵称,可以显示聊天信息。

2)系统设计

2.1系统总体框架

系统框架图:

系统在输入IP和端口之后,可以建立服务器。

再打开一个程序作为客户端,输入IP和端口,连接进入服务器聊天室可以进行多人聊天。

2.2系统详细设计

2.2.1模块划分图及描述

a)服务器监听模块:

添加一个基于CSocket的CserverSocket类,用于监听套接字。

其中CSocket是CAsyncSocket类的派生类,它们都是从CObject类继承下来的。

CSocket类是更高层次的网络接口抽象。

在服务器端,需要先用指定端口创建套接字,然后调用Listen()函数对制定连接端口进行监听,再创建一个空的CSocket对象。

收到请求后,调用Accept()函数对客户端的连接请求进行接收。

具体过程中,需要先添加成员变量和初始化函数声明。

然后需要重载OnAccept函数。

b)通信类模块

该部分主要用于创建客户端程序以及数据的传输,其实现方式原理如下:

i.客户端程序:

首先调用系统的Create()函数,用缺省的端口创建套接字;然后需要使用函数Connect()连接指定地址的服务器。

ii.数据传输:

该部分主要实现信息的传输、接受和处理。

首先创建与CSocket类的对象相连接的CSocketFile类对象,再创建与CSocketFile类的对象相连接的CArchive类对象,用于储存将要发送的数据,再创建与CSocketFile类的对象相连接的CArchive类对象,用于存储接收数据,最后只需要发送和接收数据。

具体实现方式为:

1.添加用于发送、接收和存储的成员变量以及初始化函数声明。

2.添加用于发送消息的SendMessage()函数,添加关闭套接字的函数CloseSocket()。

3.添加函数staticintGetIpAddress()函数获取本地IP地址。

4.重载函数OnClose(),OnReceive(),分别用于服务器处理关闭套接字以及接收数据。

c)信息模块:

为项目添加基于CObject类的CMessg类,主要用于保存数据。

核心包括定义CString类型的变量m_strText,另外需要修改构造函数和Serialize函数。

d)窗口界面模块:

首先创建一个基于对话框的项目,再设计对话框:

添加一个ListBox控件显示所有聊天内容,并为其关联Clistbox类型的成员变量;添加一个EditBox控件输入发送聊天信息,并为其关联CString类型成员变量;添加一个IP控件输入服务器地址,并为其关联IP控件类型成员变量;添加一个EditBox类型控件输入服务器端口,并为其关联UNIT类型的成员变量;添加一个EditBox类型控件输入用户昵称,并为其关联一个CString类型成员变量;对吼添加三个按钮分别表示“发送消息”、“建立服务”和“连接服务器”,设置好各自的ID。

在对窗口的处理中,需要实现以下几点:

1.为对话框类中添加实现处理连接和处理断开连接的函数ProcessAccert()和CloseSessionSocket().

2.实现对相关变量的初始化;

3.对三个按钮建立相关的消息函数,包括建立服务,连接和发送消息。

2.2.2类关系图及描述

本程序CAboutDlg类并没有太大变化,主要对其他类进行分析:

CClientSocket类成员表:

名称

属性

说明

CClientSocket:

:

~CClientSocket

成员函数

析构函数

CClientSocket:

:

CClientSocket

成员函数

构造函数

CClientSocket:

:

CloseSocket

成员函数

关闭套接字

CClientSocket:

:

GetIpAddress

成员函数

获取本地IP

CClientSocket:

:

Init

成员函数

初始化

CClientSocket:

:

OnClose

成员函数

关闭连接

CClientSocket:

:

OnReceive

成员函数

接受数据

CClientSocket:

:

SendMessage

成员函数

发送数据

CClientSocket:

:

m_aSessionIn

成员变量

数据输入

CClientSocket:

:

m_aSessionOut

成员变量

数据接收

CClientSocket:

:

m_bClose

成员变量

关闭连接的BOOL型变量

CClientSocket:

:

m_bInit

成员变量

初始化变量

CClientSocket:

:

m_dlg

对象指针

用于进行操作的指针

CClientSocket:

:

m_sfSocketFile

指针

用于储存的指针

Cmessg类成员表:

名称

属性

说明

CMessg:

:

~CMessg

成员函数

析构函数

CMessg:

:

CMessg

成员函数

构造函数

CMessg:

:

Serialize

成员函数

控制数据输入和输出

CMessg:

:

from

成员变量

用户昵称,显示数据来源

CMessg:

:

m_strText

成员变量

输入聊天内容

CMessg:

:

to

成员变量

用户昵称,显示数据对象

CServerSocket类成员表:

名称

属性

说明

CServerSocket:

:

~CServerSocket

成员函数

析构函数

CServerSocket:

:

CServerSocket

成员函数

构造函数

CServerSocket:

:

Init

成员函数

服务器初始化

CServerSocket:

:

OnAccept

成员函数

重载后用于接收连接

CServerSocket:

:

m_dlg

对象指针

实现操作

CServerSocket:

:

m_uPort

成员变量

端口号

CSimpleChatDlg类成员表:

名称

属性

说明

CSimpleChatDlg:

:

CloseSessionSocket

成员函数

处理断开连接

CSimpleChatDlg:

:

CSimpleChatDlg

成员函数

构造函数

CSimpleChatDlg:

:

OnBnClickedConnect

成员函数

点击后连接服务器

CSimpleChatDlg:

:

OnBnClickedSendMessage

成员函数

点击后发送数据

CSimpleChatDlg:

:

OnBnClickedSetServer

成员函数

点击后建立服务器

CSimpleChatDlg:

:

OnInitDialog

成员函数

初始化对话框

CSimpleChatDlg:

:

ProcessPendingAccept

成员函数

处理连接

CSimpleChatDlg:

:

m_bClient

成员变量

BOOL类型记录连接

CSimpleChatDlg:

:

m_bInit

成员变量

BOOL类型记录是否初始化

CSimpleChatDlg:

:

m_clientsocket

对象名

套接字对象

CSimpleChatDlg:

:

m_connectionList

成员变量

连接者清单

CSimpleChatDlg:

:

m_name

成员变量

显示连接着昵称

CSimpleChatDlg:

:

m_pListenSocket

成员变量

服务器套接字

CSimpleChatDlg:

:

m_srvIP

成员变量

记录输入的IP地址

CSimpleChatDlg:

:

m_srvMessage

成员变量

显示聊天内容的控件变量

CSimpleChatDlg:

:

m_strMessage

成员变量

输入信息的控件变量

2.2.3程序流程图及描述

整个聊天室工作状态如上图。

2.3关键算法分析

函数一:

Init(UINTport,CSimpleChatDlg*dlg)//初始化服务器函数

BOOLCServerSocket:

:

Init(UINTport,CSimpleChatDlg*dlg)

{

m_uPort=port;

m_dlg=dlg;

if(Create(m_uPort)==FALSE)

{

AfxMessageBox(_T("服务器创建错误!

"));

returnFALSE;

}

if(this->Listen()==FALSE)

{

AfxMessageBox(_T("服务器监听失败!

"));

returnFALSE;

}

m_dlg->m_srvMessage.AddString(_T("服务器建立成功!

"));

returnTRUE;

}

函数二:

OnClose(intnErrorCode)//关闭连接

voidCClientSocket:

:

OnClose(intnErrorCode)

{

//TODO:

在此添加专用代码和/或调用基类

m_bClose=true;

CloseSocket();

m_dlg->CloseSessionSocket();

CSocket:

:

OnClose(nErrorCode);

}

函数三:

CloseSocket()//关闭套接字

voidCClientSocket:

:

CloseSocket()

{

if(m_aSessionIn)

{

deletem_aSessionIn;

m_aSessionIn=NULL;

}

if(m_aSessionOut)

{

deletem_aSessionOut;

m_aSessionOut=NULL;

}

if(m_sfSocketFile)

{

deletem_aSessionOut;

m_sfSocketFile=NULL;

}

Close();

m_bInit=false;

m_bClose=true;

}

函数四:

OnReceive(intnErrorCode)//接收数据

voidCClientSocket:

:

OnReceive(intnErrorCode)

{

//

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 材料科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1