网络聊天程序的设计和实现报告.docx
- 文档编号:1645713
- 上传时间:2022-10-23
- 格式:DOCX
- 页数:18
- 大小:283.33KB
网络聊天程序的设计和实现报告.docx
《网络聊天程序的设计和实现报告.docx》由会员分享,可在线阅读,更多相关《网络聊天程序的设计和实现报告.docx(18页珍藏版)》请在冰豆网上搜索。
程序设计实践
设
计
报
告
课题名称:
网络聊天程序的设计和实现
学生姓名:
班级:
班内序号:
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)
{
//
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网络 聊天 程序 设计 实现 报告