MFC聊天系统设计报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
buff[i-9]=0;
sTemp.Format("%s",buff);//新用户昵称sTemp
pDlg->m_USER.AddString(sTemp);
//新的在线用户昵称名单发给所有用户
m=pDlg->m_USER.GetCount();
strcpy(all_user,"USERLIST");
// CClientSocket member functions
CClientSocket::CClientSocket(CClientSocketList *tmp)
{Βιβλιοθήκη Baidu
Front=0;
Next=0;
List=tmp;
}
void CClientSocket::OnAccept(int nErrorCode)
for(i=0;i<m;i++)
{
pDlg->m_USER.GetText(i,name);
strcat(all_user,name);
strcat(all_user,"|");
}
strcat(buff,"进入聊天室");
//List->Sends(this,buff,strlen(buff));
List->Sends(all_user,strlen(all_user));
2.2
聊天系统包括两大部分:服务器端和客户端。服务器端主要功能是:向多个客户端之问发送服务器端的信息,以及转发客户端的信息和向客户端发送文件,可以选择TCP和UDP两种不同方式进行。当选择TCP时,服务端需要建立一个监听线程来监听来自客户端的连接,并记录已经建立连接的客户端的Socket,当一个客户端建立连接后,向服务端发送信息,服务端接收信息后将信息转发给所有连接的客户端;当选择UDP时,采用广播功能实现聊天室的功能。传输文件部分,采用TCP方式.因为发送文件的请求一般较少.文件传输的数据量一般较大,且对可靠性要求高一些。客户端的主要功能是:与已连接的客户端进行聊天和向服务器端发送文件。客户端通过输入服务端的IP地址,就可“与已经连接的客户端进行聊天,在传输文件部分,客户端连接服务端后,就可以与服务端之间实现点对点发送文件。
int n,m;
n=this->Receive(buff,1000);
buff[n]=0;
char Flag[10];
for(int i=0;i<8;i++) Flag[i]=buff[i];
Flag[8]=0;
//下面两行代码用来获取对话框指针
CChatRoomServerApp* pApp=(CChatRoomServerApp*)AfxGetApp();

摘要:
计算机网络技术发展至今已经大大超越了人们当初的预想,无论是人们日常的工作还是学习,我们都越来越多的依靠到互联网。各种实时性的聊天娱乐软件也同时诞生,而且为我们的即时通讯带来了众多的方便,比如说大家所熟知的腾讯QQ、微软的MSN、移动的Fetion等,都是做的比较成功的实时聊天工具。随着网络的日益普及,各种聊天工具也层出不穷,我们这一次的课程设计就是针对一个简单的网络聊天程序,利用MFC为开发工具,实现基本的通讯功能。在课程设计中,系统开发平台为Windows7,程序设计设计语言采用VisualC++。
客户端
由客户端的Socket提出连接请求,要连接的目标是服务器端的Socket。为此,客户端的Socket首先要描述它要连接的服务器端socket,然后再定位所要连接的服务器端Socket。与此同时服务端已经启动了一个监听的Socket,这样便在客户端和服务器端通过Sockets建立了连接。
3.2
系统调用流程图如图1所示
接着测试传输文件功能,由于采用了点对点的传输。因此选用A,B电脑就可以进行测试。测试步骤如下:
1)选择A电脑为服务器,开启传输文件的连接,等待客户端进行连接;
2)选择B电脑为客户机,启动连接后,点击传输文件按钮,会弹出一个对话框来选择文件,选择成功后,即可以发送;
3)在客户端选择发送后,服务端会弹出一个对话框来选择将文件保存在何处。选择路径后,文件就开始在两者之间传输了;
#include "ChatRoomServerDlg.h" //add
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
}
else
if(strcmp(Flag,"CLOSEUSE")==0)//用户退出
{
CString sTemp;
for(i=9;buff[i]!=0;i++)
buff[i-9]=buff[i];
buff[i-9]=0;
sTemp.Format("%s",buff);//离线用户昵称
第二章
2.1
本课程采用Visual C++6.0平台编程。MFC,微软基础类(Microsoft Foundation Classes),实际上是微软提供的,用于在C++环境下编写应用程序的一个框架和引擎。应用程序向导通过创建和继承MFC库的基本类以及派生出的新类生成一个应用软件。MFC类是一组预先定义的C++。应用程序向导通过创建和继承MFC库的基本类以及派生出的新类生成一个应用软件。因为用VC编程很方便,有很多类是可以继承调用的,不用全都自己编写,对于我们这些初学者来说是一个很不错的选择。
5.1
本项目中的聊天程序具有服务器与客户端的区分、按回车键发送和私聊群聊功能,可实现显示在线用户等信息,但是相对于比较成熟的QQ、MSN之类的聊天软件还有所欠缺,比如说:不能发送表情、没有离线消息、基本没有应用到数据库的功能等。
本次程序设计实习,由于时间的限制,功能不是很完善,不过对于我们第一次编写MFC程序的初学者来说这已是一个很大的进步。让我们对于编程的涵义有了更深的理解,对于我们的帮助也具有深远的意义。VC的程序编写、MFC的首次尝试使用、一个实用软件的编写、网络协议的添加;无疑加深了我们C语言知识结构的认知和对于网络连接的方式,而且自信心也大大的增强了,因为这是个我们自己编写出来的软件,看到自己的劳动成果与知识的结晶会很开心,对于以后的学习也会很有帮助的。
{
// TODO: Add your specialized code here and/or call the base class
// CClientSocket *tmp=new CClientSocket(&CCSL);//创建新的连接套接字
//Accept(*tmp);
//CCSL.Add(tmp);//将新的连接套接字加入套接字链表
4)同样服务端也可以传输文件到客户端。
聊天系统通过TCP方式来实现,TCP通过对信息转发来实现聊天室功能。此外,利用TCP实现了服务器与一个客户机之间文件的相互传输。系统能满足要求,对于传输文件的速度问题,在传输8M文件时,大约是10秒钟左右,这种速度是符合系统设计,因为文件接收缓冲区为1024kb。
图3 主要模块流程图
第四章
服务器端登陆界面
显示为客服端1与客服端2及整个对话情况
客服端登陆界面
客服端1及对话情况
Speak1对大家说‘i am speak1’可以在所有的客服端及服务器端看到发送的内容
客服端1及对话情况
Speak2对speak1说‘i am speak2’只能speak1收到及服务器收到,其他都不能看到
// CClientSocket
CClientSocket::CClientSocket()
{ myDlg=0;
}
CClientSocket::~CClientSocket()
{
}
// Do not edit the following lines, which are needed by ClassWizard.
#if 0
BEGIN_MESSAGE_MAP(CClientSocket, CSocket)
//{{AFX_MSG_MAP(CClientSocket)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
#endif// 0
/////////////////////////////////////////////////////////////////////////////
第三章
3.1
服务器端
首先由一个服务器启动一个线程监听来自客户器的Socket连接,当服务器的Socket与客户器的Socket经过TCP协议的3次握手建立了连接后,双方就可以通过这个连接来进行信息的发送和接收,并可以进行文件的传输。在进行程序设计时,对于多个用户连接服务器采用了多线程处理,每个客户端的Socket都启动一个线程来连接服务端的Socket,服务端的Socket接受连接后,通过一个结构体保存已经连接的客户端的地址和套接字,当客户端发送一个信息到服务端,服务器接收信息后,再从结构体中取出已保存的套接字转发所收到的信息。
CSocket::OnAccept(nErrorCode);
}
void CClientSocket::OnClose(int nErrorCode)
{
// TODO: Add your specialized code here and/or call the base class
CSocket::OnClose(nErrorCode);
CChatRoomServerDlg * pDlg=(CChatRoomServerDlg *)pApp->m_pMainWnd;
if(strcmp(Flag,"NEW_USER")==0)//新用户加入
{
CString sTemp;
for(i=9;buff[i]!=0;i++)
buff[i-9]=buff[i];
参考文献
深入浅出MFC侯俊杰华中理工大学出版社
MFCwindows程序设计(第2版)(Ieff Prosise著)
致谢
附录:部分程序
//用户套接字程序
#include "stdafx.h"
#include "ChatRoomServer.h"
#include "ClientSocket.h"
#include "ClientSocketList.h" //add
关键字:聊天软件;网络通讯;MFC;课程设计;Visual C++
第一章
近年来,随着全球信息化技术的发展,聊天软件也得到了快速的发展,而且规模越来越大,功能也越来越强。即时聊天软件使人们的沟通突破了时空和级别的界限,使陌生人之间的沟通突破了环境界限,使自我与外界的沟通突破心理界限。聊天软件的广泛应用,已经不仅仅是一种技术工具,它成为了人们交流的一种重要方式,并构建起一种新的社会关系。目前的聊天软件—般采用UDP或者TCP协议体系来实现,开发技术已经比较成熟。本文在VC开发环境下设计和实现了一种聊天软件,可以实现在线用户的即时聊天和文件传输功能。
}
void CClientSocket::OnReceive(int nErrorCode)
{
// TODO: Add your specialized code here and/or call the base class
char buff[1000];
char all_user[2000];
char name[20];
本次测试在3台电脑之间进行,首先测试程序的聊天室功能:设测试的3台电脑分别为A,B,C。测试步骤如下:
1)首先将程序分别拷贝到3台电脑上,并以A电脑为服务器,开启程序的服务端,等待连接;
2)以B,C电脑为客户机,开启程序客户端,选择TCP进行连接,客户端程序显示连接成功后,可以在服务端看到B,C电脑都已连接A电脑(服务端将显示出B,C电脑的IP地址),然后A,B,C三者之问就可以进行聊天了;
图1服务器端功能模块图2客户端功能模块
3.3设计流程图
根据对用户的要求及功能设置可以得到以下的流程图3.1,用户首先启动客户端,登陆服务器并向服务器发送信息,启动服务器,服务器等待客户要求并向客户反馈在线用户信息,用户向服务器发送信息,服务器处理用户的数据,然后用户开始聊天。客户端的聊天分为对所有人的信息和私聊的信息,该信息应通过程序控制分别进行处理。
相关文档
最新文档