基于MFC的聊天程序设计

合集下载

基于MFC的聊天程序设计

基于MFC的聊天程序设计

聊天程序设计报告---- 网络编程设计报告目录【1】设计原理———————————————————————— 1 【2】功能描述———————————————————————— 1 【3】详细设计———————————————————————— 2 【4】工作进度————————————————————————7 【5】设计总结————————————————————————8 【6】使用方法————————————————————————9 【7】附录——————————————————————————9一. 设计原理计算机网络技术发展至今已经大大超越了人们当初的预想,无论是人们日常的工作还是学习,我们都越来越多的依靠到互联网。

各种实时性的聊天娱乐软件也同时诞生,而且为我们的即时通讯带来了众多的方便,比如说大家所熟知的腾讯QQ、微软的MSN、中国移动的Fetion 等,都是做的比较成功的实时聊天工具。

随着网络的日益普及,各种聊天工具也层出不穷,但当我们学习了《网络编程》这门课程之后,我们便会觉得,其实要实现简单的网络通讯其实并不难。

接下来的课程设计就是针对一个简单的网络聊天程序,利用MFC 为开发工具,实现基本的通讯功能。

此程序主要分为两个模块:服务线程和聊天线程。

服务线程用于提供一个网络端口,等待客户线程发出请求,登录到作为服务端的程序,然后进行网络通讯和消息的收发;客户端可通过服务器端的IP 地址发送连接请求,然后建立连接,进行通讯。

整个程序的主体使用了CSocket类的方法,实现了网络通讯聊天。

二.功能描述(需求分析)1、一对一会话。

此程序既可以作为服务器,也可以作为客户端。

当发起聊天请求时是客户端,而当接受连接请求时时服务器。

通讯基于可靠的TCP 连接。

2、修改联系人通讯地址。

可以根据联系人IP 地址和端口的不同建立不同的连接。

可以实时修改联系人的地址。

3、多线程技术。

进程启动时会开启一个专门用于监听连接请求的服务进程,线程函数为UINT threadListen(LPVOID lpParam) ,用来被动接受聊天请求。

MFC实现简单网络聊天程序

MFC实现简单网络聊天程序

MFC实现简单网络聊天程序MFC(Microsoft Foundation Classes)是微软公司提供的一个应用程序框架,用于开发Windows系统上的图形用户界面程序。

在此基础上,我们可以利用MFC来实现简单的网络聊天程序。

首先,我们需要创建一个MFC应用程序项目。

使用Visual Studio打开,选择MFC应用程序向导,选择对话框风格。

然后,设置对话框的布局,包括聊天消息显示框、消息输入框、发送按钮等控件。

接下来,我们需要使用Socket编程来实现网络通信功能。

MFC提供了CSocket类,我们可以使用它来处理数据的发送和接收。

在对话框类中添加成员变量m_socket,类型为CSocket。

在OnInitDialog函数中,我们需要创建Socket,并进行连接。

可以通过使用Create函数创建CSocket对象,并调用Connect函数来连接指定的地址和端口号。

例如,可以连接到本地主机上的一些端口,这样就可以进行本地测试。

然后,我们需要添加事件处理函数来处理发送和接收消息。

当发送按钮被点击时,可以通过调用Socket对象的Send函数将消息发送给服务器。

可以使用CString类来处理字符串数据。

当接收到消息时,可以通过调用Socket对象的Receive函数将消息接收到的缓冲区中。

为了提供实时地聊天消息显示功能,我们需要使用SetWindowText函数将数据显示到聊天消息显示框中。

当接收到消息时,可以将消息显示在聊天消息显示框中,同时可以使用UpdateData函数实时更新界面。

在程序结束时,我们需要断开连接并销毁Socket对象。

在析构函数中,可以调用Shutdown函数来关闭连接,然后销毁Socket对象。

除了基本的发送和接收消息功能,我们还可以添加一些其他的功能,比如可以使用菜单栏来选择连接和断开服务器,可以添加登录和注册功能等。

这些可以根据实际需求进行扩展。

总结起来,通过使用MFC应用程序框架和Socket编程,我们可以实现简单的网络聊天程序。

MFC聊天系统设计报告

MFC聊天系统设计报告
第章
2.1
本课程采用Visual C++6.0平台编程。MFC,微软基础类(Microsoft Foundation Classes),实际上是微软提供的,用于在C++环境下编写应用程序的一个框架和引擎。应用程序向导通过创建和继承MFC库的基本类以及派生出的新类生成一个应用软件。MFC类是一组预先定义的C++。应用程序向导通过创建和继承MFC库的基本类以及派生出的新类生成一个应用软件。因为用VC编程很方便,有很多类是可以继承调用的,不用全都自己编写,对于我们这些初学者来说是一个很不错的选择。
本次测试在3台电脑之间进行,首先测试程序的聊天室功能:设测试的3台电脑分别为A,B,C。测试步骤如下:
1)首先将程序分别拷贝到3台电脑上,并以A电脑为服务器,开启程序的服务端,等待连接;
2)以B,C电脑为客户机,开启程序客户端,选择TCP进行连接,客户端程序显示连接成功后,可以在服务端看到B,C电脑都已连接A电脑(服务端将显示出B,C电脑的IP地址),然后A,B,C三者之问就可以进行聊天了;
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));
关键字:聊天软件;网络通讯;MFC;课程设计;Visual C++

基于MFC的聊天程序的设计与实现

基于MFC的聊天程序的设计与实现
( ) 造 一 个 套 接 字 C Y c 0 k t 1 e t 并 在 2构 A n S c e C i n , S ( ] C s n S ce 中派生一个子类C y o k t 3 ̄ Ay cok类 )k m sce。
是以V + 2 0 为平 台, C+08 采用M C F 控件设计聊天程序 的对话框, 以 变量。
于 低 层 的A I P 函数 。
C t ig sr e v ; Sr n tR c d KCVd m—s 0n nect 0Cke t・
据 包含了通信双方 的I 地 址和当前 的连接 状态等信息 , P 它可 以 R c ie iB fi u sz ,) e ev ( u ,B f i e0 : p
i (R v f i c d— u J t CtigmE rr s; Sr n — r oM g m E r r s G tr oM g) _r oMg e E r r s (: M sa e o 【— r o M g : e s g B xm E r r s ) rtr ; eu nl
C s n S c e类为基础, Ay cokt 实现基于T P C 的点对点聊天 工具 。 本聊 起, 实现两者 间的实 时通信。
p ia e C y o k t m s 0 n c s c e : rv t : M s c e — c n e t o k t C y o k t — L s e S c e ; 定义监听、 M s c e m s it n o k t/ / 连接 的成员
软 件透 视 ・
基于MF C的聊 天程序的设计与实现
冯晓静 马毓垫 王玉爽 _ (河南农业 1 职业学院电 信息工程系, 子 河南 郑 州 400;. 州城市 5002 郑 职业学院, 河南 新 密 42 0 53 ) 7

MFC课程设计报告-聊天室程序设计模板

MFC课程设计报告-聊天室程序设计模板

河海大学计算机及信息工程学院MFC课程设计报告题目聊天室程序设计学号专业授课班号学生姓名指导教师完成时间题目:设计一个聊天室系统,实现多人一起聊天。

一.引言1.1开发背景随着网络信息时代的来临,INTERNET应用越来越广泛,人们越来越习惯于在网上获取和交流信息。

据调查显示,80%以上的人上网都会打开聊天工具来聊天,而几乎每一个年轻人都会去聊天。

使用网上聊天已经成为现代年轻人一种新的交往方式。

聊天室更适合于陌生人之间进行较为主观、感兴化的讨论。

所以有大部分的人会进入聊天室聊天,它会给人一个完全自由的聊天世界。

因此我联系所学的MFC 知识,决定做一个简易的聊天室程序。

1.2开发环境以及运行环境1.2.1 开发环境●Intel® Pentium® 4 2.0GHz,512M内存,80G硬盘●Mi crosoft® Windows™ XP Professional●Microsoft® Visual C++ 6.01.2.2 运行环境●Intel® Pentium® 2及以上处理器,32M以上内存,4G以上硬盘●Microsoft® Windows™ XP操作系统●800*600或以上的屏幕分辨率二.需求分析1、用WINSOCK实现简单的网络聊天;2、在MFC开发平台上编写一个聊天系统;3、得server和client之间可以相互通信;4、多人能够发送信息至服务器,首先显示进入聊天室的成员名,然后显示对方名字和聊天信息,可以并发执行。

三、算法分析建立连接过程流程图如下:Server端Client端创建CClientSocket对象,在某个端口提供监听服务等待来自Client端的服务请求接受Client端的请求,用返回的CClientSocket建立连接向用CClientSocket连接建立的流中读写数据关闭CClientSocket,结束与当前Client的通信,等待其他请求关闭CClientSocket对象,结束监听服务创建CChatSocket对象,向Server的监听端口发出请求向用CChatSocket连接建立的流中读写数据关闭CChatSocket,结束与当前Server端的通信建立连接拆除链路数据通路四、详细设计程序个模块代码如下:1.客户端(1)通过AppWizard生成基于对话框的应用程序ChatClient,在向导的第二步选择WindowsSockets的支持,其余步骤均用默认值。

基于MFC的聊天程序设计

基于MFC的聊天程序设计

一. 设计原理计算机网络技术发展至今已经大大超越了人们当初的预想,无论是人们日常的工作还是学习,我们都越来越多的依靠到互联网。

各种实时性的聊天娱乐软件也同时诞生,而且为我们的即时通讯带来了众多的方便,比如说大家所熟知的腾讯QQ、微软的MSN、中国移动的Fetion等,都是做的比较成功的实时聊天工具。

随着网络的日益普及,各种聊天工具也层出不穷,但当我们学习了《网络编程》这门课程之后,我们便会觉得,其实要实现简单的网络通讯其实并不难。

接下来的课程设计就是针对一个简单的网络聊天程序,利用MFC为开发工具,实现基本的通讯功能。

此程序主要分为两个模块:服务线程和聊天线程。

服务线程用于提供一个网络端口,等待客户线程发出请求,登录到作为服务端的程序,然后进行网络通讯和消息的收发;客户端可通过服务器端的IP 地址发送连接请求,然后建立连接,进行通讯。

整个程序的主体使用了CSocket类的方法,实现了网络通讯聊天。

二.功能描述(需求分析)1、一对一会话。

此程序既可以作为服务器,也可以作为客户端。

当发起聊天请求时是客户端,而当接受连接请求时时服务器。

通讯基于可靠的TCP连接。

2、修改联系人通讯地址。

可以根据联系人IP地址和端口的不同建立不同的连接。

可以实时修改联系人的地址。

3、多线程技术。

进程启动时会开启一个专门用于监听连接请求的服务进程,线程函数为UINT threadListen(LPVOID lpParam),用来被动接受聊天请求。

无论是主动发起聊天请求还是被动接受连接请求,都将启动一个名为CIMTalking的线程,专门处理聊天业务。

4、整个程序的主体使用了基于CSocket类的网络编程方法,综合运用了CSocket、CSocketFile、CArchive等类的方法,实现了网络通讯聊天。

IM的功能可划分为以下几点:1)界面显示:将在线好友显示在好友列表中,并实现好友分组,便于选择联系人。

2)聊天功能:与好友聊天。

2 C MFC对话框程序设计示例详解

2 C  MFC对话框程序设计示例详解
4.2 源文件 123.cpp (对类 c123 的构造函数进行实现)
#include "stdafx.h" //VC++程序要包含这个文件,而且要先包含 #include "123.h" //"123.h"头文件放在(#include "stdafx.h")的后面 #include "string" // 添加包含字符处理库函数的头文件
//以下为自己添加的预处理语句--------
#include <fstream> //文件输入、输出流类对象的使用
图 2.4 在弹出的“属性”对话框中指定该控件的 ID(名称)、标题(可见内容)
图 2.5 按照图 2.1~2.4 的方法画出一个编辑框(EDIT),并在它的“属性”对话框中暂时只 要指定该控件的 ID(名称)
图 2.6 按照图 2.1~2.4 的方法画出一个命令按钮(BUTTON),并在它的“属性”对话框中 指定该命令按钮控件的 ID(名称)、标题(可见内容)
图 4.1 对话框源文件 123Dlg.cpp 的初始内容
4.1 头文件 123.h (其内容是定义一个描述学生信息的“类”:c123)
以下只给出该文件自己写的那些代码,而系统生成的代码在此省略。
#include <string> // 添加包含字符处理库函数的头文件---此句加在文件最前面 ……… //这里略去的是系统自动生成的代码
符串更加简单、方便。
3.3 为每个命令按钮(Button)设置消息映射(Message Maps) 以“添加学生”按钮设置鼠标单击的消息映射为例:在图 3.1 中,选“Message Maps”

mfc下简单聊天程序总结

mfc下简单聊天程序总结

具体界面如下:(1)加载套接字库:BOOL AfxSocketInit(WSADATA* lpwsaData=NULL); Msdn中的AfxSocketInitRemarksCall this function in your CWinApp::InitInstance override to initialize Windows Sockets. 所以我们要再CWINApp下的InitInstance中加载套接字if(!AfxSocketInit()){AfxMessageBox("套接字库加载失败");return FALSE;}(2)在Dlg类中定义一个类型为BOOL的InitSocket函数,并且定义一个类型为SOCKET 的变量m_socket。

m_socket=socket(AF_INET,SOCK_DGRAM,0);if(INVALID_SOCKET==m_socket){MessageBox("套接字创建失败");return FALSE;}sockaddr_in addrsrv;addrsrv.sin_family=AF_INET;addrsrv.sin_port=htons(6000);addrsrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);nt reval;reval=bind(m_socket,(SOCKADDR *)&addrsrv,sizeof(SOCKADDR));if(reval==SOCKET_ERROR){closesocket(m_socket);MessageBox("绑定失败");return FALSE;}return TRUE;(3)在CXXDlg类下的OnInitDialog调用InitSocket,并且创建线程函数,用来接收数据。

因为recvfrom函数当没数据接收的时候会造成堵塞,所以我们采用线程函数来接收数据。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

聊天程序设计报告
----网络编程设计报告
目录
【1】设计原理————————————————————————1【2】功能描述————————————————————————1【3】详细设计————————————————————————2【4】工作进度————————————————————————7【5】设计总结————————————————————————8【6】使用方法————————————————————————9【7】附录——————————————————————————9
一. 设计原理
计算机网络技术发展至今已经大大超越了人们当初的预想,无论是人们日常的工作还是学习,我们都越来越多的依靠到互联网。

各种实时性的聊天娱乐软件也同时诞生,而且为我们的即时通讯带来了众多的方便,比如说大家所熟知的腾讯QQ、微软的MSN、中国移动的Fetion等,都是做的比较成功的实时聊天工具。

随着网络的日益普及,各种聊天工具也层出不穷,但当我们学习了《网络编程》这门课程之后,我们便会觉得,其实要实现简单的网络通讯其实并不难。

接下来的课程设计就是针对一个简单的网络聊天程序,利用MFC为开发工具,实现基本的通讯功能。

此程序主要分为两个模块:服务线程和聊天线程。

服务线程用于提供一个网络端口,等待客户线程发出请求,登录到作为服务端的程序,然后进行网络通讯和消息的收发;客户端可通过服务器端的IP地址发送连接请求,然后建立连接,进行通讯。

整个程序的主体使用了CSocket类的方法,实现了网络通讯聊天。

二.功能描述(需求分析)
1、一对一会话。

此程序既可以作为服务器,也可以作为客户端。

当发起聊
天请求时是客户端,而当接受连接请求时时服务器。

通讯基于可靠的TCP连接。

2、修改联系人通讯地址。

可以根据联系人IP地址和端口的不同建立不同的连接。

可以实时修改联系人的地址。

3、多线程技术。

进程启动时会开启一个专门用于监听连接请求的服务进程,线程函数为UINT threadListen(LPVOID lpParam),用来被动接受聊天请求。

无论是主动发起聊天请求还是被动接受连接请求,都将启动一个名为CIMTalking 的线程,专门处理聊天业务。

4、整个程序的主体使用了基于CSocket类的网络编程方法,综合运用了CSocket、CSocketFile、CArchive等类的方法,实现了网络通讯聊天。

IM的功能可划分为以下几点:
1)界面显示:将在线好友显示在好友列表中,并实现好友分组,便于选择联系人。

2)聊天功能:与好友聊天。

3)聊天纪录:能保存聊天纪录,并能察看聊天纪录。

(未实现)
4)信息提示:当连接失败(一般为对方不在线)时,提醒用户连接失败及原因。

5)修改联系地址:由于本聊天程序不涉及登录服务器,故开启进程即为在线,否则离线。

故需要动态修改联系人IP地址及端口号。

聊天程序模块图
三、详细设计
程序中主要变量及类的功能说明如下:
CIMTalkingDlg --- 聊天过程处理函数类
CIMTalking ---- 用于处理聊天过程的运行时类
peerAddress ---- 联系人地址,包括套接字地址和联系人姓名,这是一个结构体
CIMApp ----- 程序主线程
CIMDlg ----- 程序UI线程,用于处理消息,界面窗口初始化等工作CChatSock ---- 专门用于聊天的套接字类,继承自CSocket
CAddrDlg ----- 显示联系人地址、修改联系人地址
CAboutDlg----- 显示程序版本信息
联系人地址结构体类型:
struct peerAddress
{
struct sockaddr_in peerAddr; //对方地址
char peerName[20]; //对方姓名
};
类图框架
用Visual Studio 2008逆向工程导出的详细类图
程序流程图
UI设计
程序主界面
聊天对话框界面
修改联系人地址对话框界面四.工程进度
第一阶段 6月4号-----6月10号分析功能要求
五、设计总结
4.1 程序的应改进之处:
1、无法知道联系人是否在线,除非连接;而且若把联系人的套接字地址,即IP 地址和端口搞错,通讯失败。

即使对方在线,也有可能出错;这是本程序最大的缺憾。

2、被连接时自动启动窗口,表示对方已经发起聊天请求,可以改为发送第一条消息后自动弹出聊天窗口。

3、聊天记录文件应该加密,虽然在本程序中没有实现。

4、可以在程序启动后立即探测联系人的状态,并在用户界面上显示其状态,即是否在线。

4.2 个人小结
1、在做这次网络创新实验之前基本上还没接触过MFC套接字网络编程,这次实验是在边学习边实践的基础上完成的。

由于临近考试,因此做的时间不多,做的结果不太好,与自己原来的设想还有点差距。

2、通过“计算机网络基础”自己对网络的基础知识也打下了很好的基础。

这次网络实验可以说是在理解网络的基础上对Windows Socket 编程的一次学习过程,虽然做的不好,但也学到了很多知识,对自己以后进行网络开发有很大的帮助。

3、在做本次实验时,我尽可能的将上一学期学的软件工程思想运用到这次开发实验中来。

在进行详细设计之前,先进行需求功能分析,在功能分析的基础上,划分程序的框架,创建类来分担不同的功能,并根据类的功能加入函数和变量,这对详细设计有一个总纲的作用。

4、在开始这个设计之前,对MFC编程(大一开设的半学期课程)只是初步了解,没有掌握MFC编程的原理。

通过本次设计,对MFC的机制乃至Windows程序的运行机制加深了了解,同时基本掌握了MFC编程方法,这是本次设计最大的收获之一!
5、一些东西貌似很简单,但在实现时往往遇到意想不到的困难。

比如本次设计中,由于缺乏编程经验,加入如何开启一个新的线程,与控制台程序就有很大不
同,虽然思想相同;再比如一些控件的使用方法,比如右击一个树形控件子项目,如何获取其text,就是一个问题,费了很大力气才发现少了如下语句:ScreenToClient(&myPoint);//该函数把屏幕上指定点的屏幕坐标转换成用户坐标
然后再执行
m_hTreeItem = (myPoint, &uFlags);//获取选取的项目的控件句柄
6、第一次在本次设计中用到了C++关键字 extern ;第一次在MFC程序中用到了全局变量;第一次在程序中使用MFC多线程函数AfxBeginThread();第一次试用了CTreeCtrl等控件;第一次实现了CSocket、CSocketFile、CArchive类的联合使用以实现消息的发送和接收;对MFC套接字实现消息收发的原理有了较深的了解。

总结:动手是提高的最佳手段!虽然过程中会遇到很多令人沮丧的问题,但解决这些问题之后是一种强烈的成就感!
六、使用方法
要进行通信,需要编译两个不同程序,但只要交换void
CIMDlg::OnDblclkFriend(NMHDR* pNMHDR, LRESULT* pResult)和
UINT threadListen(LPVOID lpParam)函数中的端口号即可,编译生成可执行文件后即可通过双击好友名单收发消息。

七、附录
程序代码见附件。

相关文档
最新文档