原创《网络工程》课程设计基于MFC WinSock的点对点聊天室的设计与实现 服务器端设计说明书.docx
- 文档编号:10276115
- 上传时间:2023-05-24
- 格式:DOCX
- 页数:13
- 大小:100.37KB
原创《网络工程》课程设计基于MFC WinSock的点对点聊天室的设计与实现 服务器端设计说明书.docx
《原创《网络工程》课程设计基于MFC WinSock的点对点聊天室的设计与实现 服务器端设计说明书.docx》由会员分享,可在线阅读,更多相关《原创《网络工程》课程设计基于MFC WinSock的点对点聊天室的设计与实现 服务器端设计说明书.docx(13页珍藏版)》请在冰点文库上搜索。
原创《网络工程》课程设计基于MFCWinSock的点对点聊天室的设计与实现服务器端设计说明书
网络编程课程设计
基于MFCWinSock的点对点聊天室的设计与实现
服务器端设计说明书
学生:
学号:
指导教师:
2013年6月25日
目录:
1.程序结构................................................................3
1)类定义.............................................................................................3
2)主要类成员..................................................................................3
二.详细设计................................................................4
1)使用MFCAppWizard创建服务器端应用程序框架.............4
2)为对话框界面添加控件对象......................................................4
3)为对话框中的控件对象定义相应的成员变量.....................5
4)在预编译头文件StdAfx.h中增加头文件.........................6
5)创建从CAsyncSocket类继承的派生类.......................6
6)为CMySocket类添加成员变量和成员函数..............6
7)手工添加代码.....................................................................6
8)添加对于MySocket.h的包含语句..................................8
9)为对话框中的控件对象添加事件响应函数........................8
10)为对话框类添加成员变量和成员函数.................................8
11)为对话框类添加事件函数和成员函数的代码.......................8
三.运行结果.........................................................................11
一.程序结构
1)类定义
class
specification
CCAsyncServerDlg
主对话框类,用于图形界面的处理,通过调用CMySocket类提供的函数实现与服务器的连接与交互。
CMySocket
事件处理类,由CAsyncSocket类派生出的套接字类,该类主要负责实现功能需求的各种函数,供CCAsyncServerDlg直接调用,
CCAsyncServerApp
应用程序类,
CAboutDlg
MFC自带的对话框对应的类
2)主要类成员
2.1CCAsyncServerDlg类
classmember
function
InitDlg()
自行添加的初始化函数,包含获取端口号及主机地址的方法
OnAccept()
自行添加的事件函数,由套接字类的OnAccept事件处理函数调用,实际处理该事件
OnClose()
自行添加的事件函数,由套接字类的Onlose事件处理函数调用,实际处理该事件
OnReceive()
自行添加的事件处理函数,由套接字类的OnReceive事件处理函数调用,实际处理该事件
OnLsiten()
当用户单击“listen”按钮时,执行此函数
OnSend()
当用户单击“send”按钮时,执行此函数
OnDisconnnect()
当用户单击“disconnect”按钮时,执行此函数
m_listenSocket
CMySocket下,服务器端用作与客户端连接的套接字
m_connSocket
CMySocket下,服务器端用作监听的套接字
m_Iport
UINT类型的对话框类控件对象
m_listen
CButton类型的对话框类控件对象
m_Msg
CString类型的对话框类控件对象
m_send
CButton类型的对话框类控件对象
m_sendList
CListBox类型的对话框类控件对象
m_recvList
CListBox类型的对话框类控件对象
2.2CMySocket类
classmember
function
CMySocket()
构造函数
~CMySocket()
析构函数
OnAccept(intnErrorCode)
事件处理函数,对所处理消息的回调函数,与CCAsyncServerDlg类的OnAccept()关联。
OnClose(intnErrorCode)
事件处理函数,对所处理消息的回调函数,与CCAsyncServerDlg类的OnClose()关联。
OnReceive(intnErrorCode)
事件处理函数,对所处理消息的回调函数,与CCAsyncServerDlg类的OnReceive()关联。
SetPtr(CCAsyncServerDlg*pDlg)
自行添加的成员函数,参数为指针型
m_pDlg
自行添加的指向服务器端对话框类的指针,类型为CCAsyncServerDlg*
2.详细设计
1)使用MFCAppWizard创建服务器端应用程序框架
工程名为CAsyncServer,选择Dialogbased的应用程序类型,选择中文(中国),选择Windowssockets支持,其他接受系统的默认值。
所创建的程序会自动创建两个类,应用程序类CCAsyncServerApp,对应的文件是CAsyncServer.h和CAsyncServer.cpp;对话框类CCAsyncServerDlg,对应的文件是CCAsyncServerDlg.h和CCAsyncServerDlg.cpp。
2)为对话框界面添加控件对象
完成的对话框如图
修改控件属性
控件类型
控件ID
Caption
IPAddress
IDC_IPADDRESS1
editbox
IDC_HOSTNAME
editbox
IDC_PORT
button
IDC_LSITEN
listen
button
IDC_DISCONNECT
disconnect
button
IDC_SEND
send
editbox
IDC_MSG
listbox
IDC_SENDLIST
listbox
IDC_RECVLIST
statictext
IDC_STATIC_SEND
发送的消息
statictext
IDC_STATIC_RECV
接收的消息
3)为对话框中的控件对象定义相应的成员变量
用类向导为对话框中的控件对象定义相应的成员变量
控件ID
变量名称
变量类别
变量类型
IDC_LSITEN
m_listen
Control
Cbutton
IDC_SEND
m_send
Control
Cbutton
IDC_PORT
m_Iport
Value
UNIT
IDC_MSG
m_Msg
Value
CString
IDC_SENDLIST
m_sendList
Value
CString
IDC_RECVLIST
m_recvList
Value
CString
4)在预编译头文件StdAfx.h中增加头文件afxsocket.h
#include
5)创建从CAsyncSocket类继承的派生类
(1)为了能够捕获并响应socket事件,应创建用户自己的套接字类,从
CAsyncSocket类派生,还能将套接字事件传递给对话框,以便执行用户自己的事件处理函数,并在类向导中生成对所处理消息的回调函数。
类名为CMySocket,事件处理函数为OnAccept,OnClose和OnReceive
classCMySocket:
publicCAsyncSocket
voidCMySocket:
:
OnAccept(intnErrorCode);//回调函数声明
voidCMySocket:
:
OnClose(intnErrorCode);//回调函数声明
voidCMySocket:
:
OnReceive(intnErrorCode);//回调函数声明
6)为CMySocket类添加成员变量和成员函数
1)对这个套接字类,添加一个成员变量,是一个对话框类的指针。
CCAsyncServerDlg*m_pDlg;//指向服务器端对话框类的指针
2)再添加一个成员函数:
voidSetPtr(CCAsyncServerDlg*pDlg);//函数声明
7)手工添加代码
1)对于MySocket.h,在文件开头添加对话框类的声明
classCCAsyncServerDlg;//添加的服务器端对话框类的声明
2)对于MySocket.cpp
(a)在文件开头,添加包含语句
#include"CAsyncServerDlg.h"//添加包含语句
(b)在构造函数中,添加对于对话框指针成员变量的初始化代码
CMySocket:
:
CMySocket()
{
m_pDlg=NULL;//初始化,将对话框指针变量置为空
}
(C)在析构函数中,添加添加对于对话框指针成员变量的初始化代码
CMySocket:
:
~CMySocket()
{
m_pDlg=NULL;//终止处理,将对话框指针变量置为空
}
(d)为成员函数SetPtr添加代码
voidCMySocket:
:
SetPtr(CCAsyncServerDlg*pDlg)
{
m_pDlg=pDlg;//设置对话框类指针变量
}
(e)为事件处理函数添加代码
voidCMySocket:
:
OnAccept(intnErrorCode)
{
//TODO:
Addyourspecializedcodehereand/orcallthebaseclass
//如果没错,调用服务器端对话框类的OnAccept函数
if(nErrorCode==0)
m_pDlg->OnAccept();
CAsyncSocket:
:
OnAccept(nErrorCode);
}
voidCMySocket:
:
OnClose(intnErrorCode)
{
//TODO:
Addyourspecializedcodehereand/orcallthebaseclass
//如果没错,调用服务器端对话框类的OnClose函数
if(nErrorCode==0)
m_pDlg->OnClose();
CAsyncSocket:
:
OnClose(nErrorCode);
}
voidCMySocket:
:
OnReceive(intnErrorCode)
{
//TODO:
Addyourspecializedcodehereand/orcallthebaseclass
//如果没错,调用服务器端对话框类的OnReceive函数
if(nErrorCode==0)
m_pDlg->OnReceive();
CAsyncSocket:
:
OnReceive(nErrorCode);
}
8)在CCAsyncServerDlg.h中添加对于MySocket.h的包含语句
#include
9)用类向导为对话框中的控件对象添加事件响应函数
主要是3个按钮的单击事件的处理函数
控件类型
对象标识
消息
成员函数
命令按钮
IDC_DISCONNECT
BN_CLCKED
OnDisconnect
命令按钮
IDC_LISTEN
BN_CLCKED
OnListen
命令按钮
IDC_SEND
BN_CLCKED
OnSend
10)为CCAsyncServerDlg对话框类添加成员变量和成员函数
CMySocketm_connSocket;//服务器端用作监听的套接字
CMySocketm_listenSocket;//服务器端用作与客户端连接的套接字
voidInitDlg();//自行创建的初始化函数
voidOnReceive();//由套接字OnReceive函数调用,处理OnReceive事件
voidOnAccept();//由套接字OnAccept函数调用,处理OnAccept事件
voidOnClose();//由套接字OnClose函数调用,处理OnClose事件
11)为对话框类添加事件函数和成员函数的代码
voidCCAsyncServerDlg:
:
InitDlg()//对控件变量的初始化
{
charhost[256];
gethostname(host,sizeof(host));
SetDlgItemText(IDC_HOSTNAME,host);
HOSTENT*hs;
hs=gethostbyname(host);
u_longhIp;
hIp=*((u_long*)(hs->h_addr_list[0]));
((CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESS1))->SetAddress(ntohl(hIp));
m_Iport=6000;//服务器端口号为6000
UpdateData(false);//更新用户界面
//设置套接字的对话框指针成员变量
m_listenSocket.SetPtr(this);
m_connSocket.SetPtr(this);
GetDlgItem(IDC_IPADDRESS1)->EnableWindow(false);
GetDlgItem(IDC_HOSTNAME)->EnableWindow(false);
GetDlgItem(IDC_PORT)->EnableWindow(true);
GetDlgItem(IDC_MSG)->EnableWindow(false);
GetDlgItem(IDC_DISCONNECT)->EnableWindow(false);
GetDlgItem(IDC_SEND)->EnableWindow(false);
GetDlgItem(IDC_RECVLIST)->EnableWindow(true);
GetDlgItem(IDC_SENDLIST)->EnableWindow(false);
}
//当用户单击“listen”按钮时,执行此函数
voidCCAsyncServerDlg:
:
OnLsiten()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData(true);//从对话框中获取数据
m_listenSocket.Create(m_Iport);//用6000端口创建服务器端监听套接字对象的底层套接字
m_listenSocket.Listen(5);//开始监听客户端的连接请求
//监听按钮,发送,接收文本框
GetDlgItem(IDC_SEND)->EnableWindow(true);
GetDlgItem(IDC_DISCONNECT)->EnableWindow(true);
GetDlgItem(IDC_RECVLIST)->EnableWindow(true);
GetDlgItem(IDC_SENDLIST)->EnableWindow(true);
}
//当用户单击“send”按钮时,执行此函数
voidCCAsyncServerDlg:
:
OnSend()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData(true);
CStringsendBuf;
GetDlgItemText(IDC_MSG,sendBuf);
m_connSocket.Send(sendBuf,sendBuf.GetLength()+1);//?
m_sendList.AddString(sendBuf);
}
//当用户单击“disconnect”按钮时,执行此函数
voidCCAsyncServerDlg:
:
OnDisconnnect()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
OnClose();//调用OnClose函数
}
//由套接字类的Onlose事件处理函数调用,实际处理该事件
voidCCAsyncServerDlg:
:
OnClose()
{
m_connSocket.Close();//关闭连接的套接字
m_listenSocket.Close();
//清除列表框
while(m_recvList.GetCount()!
=0)
m_recvList.DeleteString(0);
}
//由套接字类的OnAccept事件处理函数调用,实际处理该事件
voidCCAsyncServerDlg:
:
OnAccept()
{
SOCKADDR_INcAddr;
intaddrLen=sizeof(SOCKADDR);
m_listenSocket.Accept(m_connSocket,(SOCKADDR*)&cAddr,&addrLen);//接收客户端的连接请求
CStringtempStr;
tempStr.Format("ip:
%s,port:
%d",inet_ntoa(cAddr.sin_addr),cAddr.sin_port);//显示客户端的IP地址和端口号
m_recvList.AddString(tempStr);//将客户端的IP地址和端口号显示在接收窗口中
}
//由套接字类的OnReceive事件处理函数调用,实际处理该事件
voidCCAsyncServerDlg:
:
OnReceive()
{
charrecvBuf[1024];
memset(recvBuf,0,1024);
m_connSocket.Receive(recvBuf,1024,0);
m_recvList.AddString(recvBuf);
}
3.运行结果
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网络工程 原创网络工程课程设计基于MFC WinSock的点对点聊天室的设计与实现 服务器端设计说明书 原创 课程设计 基于 MFC WinSock 点对点 聊天室 设计 实现 服务器端 说明书
链接地址:https://www.bingdoc.com/p-10276115.html