c++课程设计网络聊天室Word文档下载推荐.docx
《c++课程设计网络聊天室Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《c++课程设计网络聊天室Word文档下载推荐.docx(4页珍藏版)》请在冰豆网上搜索。
本系统分为两个部分,分别为服务器端和客户端,其主要功能介绍如下:
2.1.服务器端功能l通过对Socket进行初始化,来简单创建服务器l通过定义变量来保存本机的IP地址,方便与客户端输入的IP地址进行比较,判断用户是否登入成功。
l通过一个文本框控件,来接收用户发送的信息。
l服务器端在初始化时首先需要为系统设置一个专用端口,以方便和客户端进行通信。
2.2.客户端功能客户端操作主要分2个步骤,在使用客户端系统时,用户首先需要设置要登录的IP地址,此处所填写的IP地址需要和服务器端的本机IP地址一致,平且输入正确的端口,方能登录成功。
当登录成功之后,用户可以在输入文本框中输入要发送的信息,点击发送按钮来实现发送,系统将会把信息发送到与其通信的服务器端界面中,以这样的原理俩实现客户端和服务器端两者之间的通信功能。
3.详细设计3.1.服务端实现本系统采用VC6.0为开发工具,在实际开发中,首先创建一个工程项目,然后在相应位置添加一个窗体,来展示信息。
主要的界面布局情况如下图:
3.1.1.服务端布局服务器端的开发主要分两个阶段,首先开发端口设置功能,该功能是供管理员在打开服务器端时,设置一个特殊的网络端口,方便后面供客户端来使用;
其次是主界面的开发,该步骤中中,主要是使用了一个文本框控件来存放接收客户端所传送的信息。
其主要开发代码如下:
#include“stdafx.h“#include“ChatSvr.h“#include“InitDlg.h“#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;
#endifCInitDlg:
:
CInitDlg(CWnd*pParent/*=NULL*/):
CDialog(CInitDlg:
IDD,pParent){//{{AFX_DATA_INIT(CInitDlg)m_nPort=0;
//}}AFX_DATA_INIT}voidCInitDlg:
DoDataExchange(CDataExchange*pDX){CDialog:
DoDataExchange(pDX);
//{{AFX_DATA_MAP(CInitDlg)DDX_Text(pDX,IDC_EDIT1,m_nPort);
//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CInitDlg,CDialog)END_MESSAGE_MAP()核心代码如下:
#include“stdafx.h“#include“ChatSvr.h“#include“ChatSvrDlg.h“#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;
#endifBEGIN_MESSAGE_MAP(CChatSvrApp,CWinApp)ON_COMMAND(ID_HELP,CWinApp:
OnHelp)END_MESSAGE_MAP()CChatSvrApp:
CChatSvrApp(){}CChatSvrApptheApp;
BOOLCChatSvrApp:
InitInstance(){if(!
AfxSocketInit()){AfxMessageBox(IDP_SOCKETS_INIT_FAILED);
returnFALSE;
}AfxEnableControlContainer();
#ifdef_AFXDLLEnable3dControls();
#elseEnable3dControlsStatic();
#endifCChatSvrDlgdlg;
m_pMainWnd=intnResponse=dlg.DoModal();
if(nResponse==IDOK){}elseif(nResponse==IDCANCEL){}returnFALSE;
}3.2.客户端实现客户端主要是用户通过设置端口和IP地址来与服务器端想链接,从而实现系统之间的通信功能,当链接成功之后,用户进入到系统主要界面,用户可以在输入区域来输入信息,通过点击发送来发送信息到服务器端,从而实现两者之间的通信功能,其主要界面如下:
3.2.1.客户端布局客户端的功能实现,主要有验证输入信息是否正确,和通过验证之后且建立了通信之后,在实现发送信息功能,将信息发送到服务器端,实现两者之间的信息传送,从而达到客户端和服务器之间的聊天效果,其主要代码如下:
(输入端口和IP信息窗口代码)#include“stdafx.h“#include“ChatClient.h“#include“SetupDlg.h“#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;
#endifCSetupDlg:
CSetupDlg(CWnd*pParent/*=NULL*/):
CDialog(CSetupDlg:
IDD,pParent){//{{AFX_DATA_INIT(CSetupDlg)m_strName=_T(““);
m_strServer=_T(““);
m_nPort=0;
//}}AFX_DATA_INIT}voidCSetupDlg:
//{{AFX_DATA_MAP(CSetupDlg)DDX_Text(pDX,IDC_NAME,m_strName);
DDX_Text(pDX,IDC_SERVER,m_strServer);
DDX_Text(pDX,IDC_PORT,m_nPort);
//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CSetupDlg,CDialog)//{{AFX_MSG_MAP(CSetupDlg)//}}AFX_MSG_MAPEND_MESSAGE_MAP()voidCSetupDlg:
OnOK(){//TODO:
AddextravalidationhereCDialog:
OnOK();
}voidCSetupDlg:
OnCancel(){//TODO:
AddextracleanuphereCDialog:
OnCancel();
}(客户端主窗体窗口代码)#include“stdafx.h“#include“ChatClient.h“#include“ChatClientDlg.h“#include“ChatSocket.h“#include“SetupDlg.h“#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;
#endifclassCAboutDlg:
publicCDialog{public:
CAboutDlg();
//{{AFX_DATA(CAboutDlg)enum{IDD=IDD_ABOUTBOX};
//}}AFX_DATA//{{AFX_VIRTUAL(CAboutDlg)protected:
virtualvoidDoDataExchange(CDataExchange*pDX);
//DDX/DDVsupport//}}AFX_VIRTUAL//Implementationprotected:
//{{AFX_MSG(CAboutDlg)virtualvoidOnOK();
//}}AFX_MSGDECLARE_MESSAGE_MAP()};
CAboutDlg:
CAboutDlg():
CDialog(CAboutDlg:
IDD){//{{AFX_DATA_INIT(CAboutDlg)//}}AFX_DATA_INIT}voidCAboutDlg:
//{{AFX_DATA_MAP(CAboutDlg)//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CAboutDlg,CDialog)//{{AFX_MSG_MAP(CAboutDlg)//}}AFX_MSG_MAPEND_MESSAGE_MAP()//CChatClientDlgCChatClientDlg:
CChatClientDlg(CWnd*pParent/*=NULL*/):
CDialog(CChatClientDlg:
IDD,pParent){//{{AFX_DATA_INIT(CChatClientDlg)m_strMsg=_T(““);
m_strClientName=_T(““);
//}}AFX_DATA_INITm_hIcon=AfxGetApp()->
LoadIcon(IDR_MAINFRAME);
}voidCChatClientDlg:
//{{AFX_DATA_MAP(CChatClientDlg)DDX_Control(pDX,IDC_LIST_MSGS,m_ctrlMsgs);
DDX_Text(pDX,IDC_MSG,m_strMsg);
//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CChatClientDlg,CDialog)//{{AFX_MSG_MAP(CChatClientDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_SEND,OnSend)//}}AFX_MSG_MAPEND_MESSAGE_MAP()BOOLCChatClientDlg:
OnInitDialog(){CDialog:
OnInitDialog();
ASSERT((IDM_ABOUTBOXASSERT(IDM_ABOUTBOXAppendMenu(MF_SEPARATOR);
pSysMenu->
AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);
}}SetIcon(m_hIcon,TRUE);
SetIcon(m_hIcon,FALSE);
//显示登录对话框CSetupDlgdlg;
if(dlg.DoModal()==IDOK){//创建一个新的Socketm_pSocket=newCChatSocket(this);
if(!
m_pSocket->
Create()){deletem_pSocket;
m_pSocket=NULL;
AfxMessageBox(“createsocketfailed“);
}//连接服务器while(!
Connect(dlg.m_strServer,dlg.m_nPort+700)){if(AfxMessageBox(“Failedtoconnecttoserver\nTryagain?
“,MB_YESNO)==IDNO){deletem_pSocket;
}}m_strClientName=dlg.m_strName;
}elsereturnFALSE;
//发送登录消息给服务器SendMsg(“进入聊天室“);
returnTRUE;
//returnTRUE}voidCChatClientDlg:
OnSysCommand(UINTnID,LPARAMlParam){if((nIDdlgAbout.DoModal();
}else{CDialog:
OnSysCommand(nID,lParam);
}}voidCChatClientDlg:
OnPaint(){if(IsIconic()){CPaintDCdc(this);
SendMessage(WM_ICONERASEBKGND,(WPARAM)dc.GetSafeHdc(),0);
intcxIcon=GetSystemMetrics(SM_CXICON);
intcyIcon=GetSystemMetrics(SM_CYICON);
CRectrect;
GetClientRect(intx=(rect.Width()-cxIcon+1)/2;
inty=(rect.Height()-cyIcon+1)/2;
dc.DrawIcon(x,y,m_hIcon);
OnPaint();
}}HCURSORCChatClientDlg:
OnQueryDragIcon(){return(HCURSOR)m_hIcon;
}//接收数据voidCChatClientDlg:
ProcessPendingRead(){//定义缓冲区charbuffer[BUFFER_SIZE];
//接收数据intnReceived=m_pSocket->
Receive(buffer,BUFFER_SIZE,0);
buffer[nReceived]=0;
//将数据在列表框中显示出来CStringstr;
str.Format(“%s“,buffer);
m_ctrlMsgs.AddString(str);
OnSend(){UpdateData(TRUE);
SendMsg(m_strMsg);
}//发送数据到服务器voidCChatClientDlg:
SendMsg(CStringstrMsg){CStringstr;
str.Format(“%s:
%s“,m_strClientName,strMsg);
m_pSocket->
Send(str.GetBuffer(0),str.GetLength(),0);
}voidCAboutDlg:
OnOK(){Dialog:
}4.系统调试l服务器端运行效果:
l客户端运行效果:
l发送消息效果:
5.结果分析根据需求分析中的基本要求,本系统基本完成了一个网络聊天功能的效果,能进行简单的聊天通信,系统主要是通过服务器端的本机IP地址为通信IP,来连接客户端和服务器端两者之间的通信功能,对于一个基本的通讯软件-网络聊天室,本系统已经基本实现了该效果与功能。
6.总结通过此次课程设计,让我认识到C++作为一门面向对象开发语言的好处,在此次开发过程中,遇见了很多从前在做实例过程中没有遇见的BUG,通过各种渠道来解决之后,让我从中学到了许多有用的知识,同时也提高了我独自解决一个问题的能力,作为一名程序员,在开发程序过程中肯定会遇见各种各样的困难和错误,只有通过不断的学习来积累这些知识的瑰宝,从而丰富自己的实践经验。
就像在此次开发过程中,为了实现网络通信功能,我必须通过网络和从书中查询来获取自己想要的知识,来解决在项目开发过程中的困难,在研究这些东西的同时,我也从中获取了很多新的、有用的知识;
而且也对自己的实际开发能力有所好处,开发程序就是不断解决BUG的过程,痛并快乐着。