MFC实现简单网络聊天程序

合集下载

简单的双人聊天软件

简单的双人聊天软件
,提示用户输入 IP 地址。
2、登录后的界面
(1)服务器运行后,显示的窗口如下: 此时“IP”地址栏、“运行”按钮和“套接字类型”都被置灰了,此时服务
器只能发送和接受信息。
(2)客户机连接成功后,显示的窗口如下:
7
此时“套接字类型”、“连接”按钮被置灰。 用客户机登录的客户可以选择与服务器断开,点击“断开”按钮即可实现。
%X"); %X");
int nRes = m_asClient.Receive(pBuf,nBufSize);
if (nRes == SOCKET_ERROR)
{ AfxMessageBox("无法接收消息!");
return FALSE;
}
pBuf[nRes] = NULL; strReceived = pBuf; if (m_bServer) {
四、界面设计:
1、登录界面:登录类型分为:服务器和客户机。
以服务器登录的界面:
5
以客户机登录的界面;
6
当客户以服务器登录时,只需要在“套接字类型”选择服务器后点右侧的运 行即可;当客户以客户机登录时,只需要在“套接字类型”处选择“客户机”并 在 IP 地址栏输入服务器的 IP 地址,点击右侧的连接即可,这样就可以实现 2 台 PC 机的网络连接了。若客户机登录时,没有填 IP 地址而直接点连接,就会填出 如下窗口:
1、服务器登录:
当客户以服务器登录时,向对方发送消息时显示如下图所示: ,此消息同步了系统时间,并且当客户机接受到服务器
发送的消息时有音乐提示客户已接受到了对方的信息。
2、客户机登录:
当客户以客户机登录时,向对方发送消息时显示如下图所示: ,此消息同步了系统时间,并且当服务器接受到客户机

网络聊天程序

网络聊天程序

部分程序代码一、消息的发送设置void CChatDlg::OnBtnSend(){// TODO: Add your control notification handler code hereDWORD dwIP;((CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESS1))->GetAddress(dwIP);SOCKADDR_IN addrTo;addrTo.sin_family=AF_INET;addrTo.sin_port=htons(6000);addrTo.sin_addr.S_un.S_addr=htonl(dwIP);CString strSend;GetDlgItemText(IDC_EDIT_SEND,strSend);sendto(m_socket,strSend,strSend,GetLength()+1,0,(SOCKADDR*)&addrTo,sizeof(SOCKADDR));SetDlgItemText(IDC_EDIT_SEND,"");}二、接收数据void CChatDlg::OnRecvData(WPARAM wParam,LPARAM lParam){CString str=(char*)lParam;CString strTemp;GetDlgItemText(IDC_EDIT_RECV,strTemp);str+="\r\n";str+=strTemp;SetDlgItemText(IDC_EDIT_RECV,str);}三、获取IP地址DWORD WINAPI CChatDlg::RecvProc(LPVOID lpParameter){SOCKET sock=((RECVPARAM*)lpParameter)->sock;HWND hwnd=((RECVPARAM*)lpParameter)->hwnd;SOCKADDR_IN addrFrom;int len=sizeof(SOCKADDR);char recvBuf[200];char tempBuf[300];int retval;while(TRUE){retval=recvfrom(sock,recvBuf,200,0,(SOCKADDR*)&addrFrom,&len);if(SOCKET_ERROR==retval)break;sprintf(tempBuf,"%s说:%s",inet_ntoa(addrFrom.sin_addr),recvBuf);::PostMessage(hwnd,WM_RECVDATA,0,(LPARAM)tempBuf);}return 0;}四、创建套接字并链接BOOL CChatDlg::lnitsocket(){m_socket=socket(AF_INET,SOCK_DGRAM,0);if(INV ALID_SOCKET==m_socket){MessageBox("套接字创建失败!");return FALSE;}SOCKADDR_IN addrSock;addrSock.sin_family=AF_INET;addrSock.sin_port=htons(6000);addrSock.sin_addr.S_un.S_addr=htonl(INADDR_ANY);int retval;retval=bind(m_socket,(SOCKADDR*)&addrSock,sizeof(SOCKADDR));if(SOCKET_ERROR==retval){closesocket(m_socket);MessageBox("绑定失败!");return FALSE;}return TRUE;}五、加载套接字BOOL CChatApp::InitInstance(){if (!AfxSocketInit()){AfxMessageBox("加载套接字失败!");return FALSE;}AfxEnableControlContainer();六、方法步骤1、新建工程,file->new->MFC AppWizard(exe),工程名字叫“寒暄”,选择“D基本对话”。

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编程,我们可以实现简单的网络聊天程序。

VC++6.0使用MFC创建应用程序框架操作步骤

VC++6.0使用MFC创建应用程序框架操作步骤

图 为套接字类添加响应消息的事件处理成员函数
(3)为套接字类添加一般的成员函数和成员变量 •在VC++的界面中,在工作区窗口选择ClassView卡,用右键 单 击 CMySocket 类 , 会 弹 出 快 捷 菜 单 , 选 择 其 中 的 Add Member Function 可 以 为 该 类 添 加 成 员 函 数 ; 选 择 Add Member Variable可以为该类添加成员变量。
m_listRecetved
Control
CListBox
定义了一个枚举变量IDD,值 , 定义了一个枚举变量 为IDD_TALKC_DIALOG。 。 这个对话框类就是通过这个 IDD和对话框资源建立了联系。 和对话框资源建立了联系。 和对话框资源建立了联系
CTalkcDlg类的 类的 构造函数
类CMySocket的定义 的定义
CMySocket的构造函数 的构造函数 CMySocket的析构函数 的析构函数
(2)利用类向导ClassWizard为这个套接字类添加 响应消息的事件处理成员函数。 •点菜单View/ClassWizard...,进入类向导对话框, 选择Message Maps(消息映射)卡,确认Class name是CMySocket,从Messages(消息)栏中选 择事件消息,然后点击Add Function按钮,就会看 到在Member Function栏中添加了相应的事件处理 函数。 •如图所示,此程序中需要添加OnConnect, OnClose和OnReceive三个函数。这一步会在 CMySocket类的MySocket.h中自动生成这些函数的 声明,在MySocket.cpp中生成这些函数的框架,以 及消息映射的相关代码。可参看后面的程序清单。

基于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、开打VC++6.0。

点击文件,新建,点击工程中的MFC AppWizard(exe),在右边选择工程保存的位置,并且为工程取好名字。

2、点击确定后,选择单个文档,你可以一直点击下一步,直到完成,或者在这里直接点击完成即可,完成后界面如下。

3、点击工具栏中的“!”号试着编译运行一次,看是否有问题。

如果没有问题,我们继续。

点击左边的ResourceView,在Dialog上面鼠标右键单击弹出一弹出框,单击Insert Dialog。

4、在右边新增的对话框中,适当改变窗口大小,加入静态文本框和文本编辑框。

输入用户名:。

然后回车同样在下面的第二个静态文本框的属性标题改为:输入密码:。

然后回车。

6、在第一个文本编辑框上右键单击,点击属性,把ID框中的IDC_EDIT1改为容易理解的名字,如:IDC_EDIT_NAME,注意前面的IDC_EDIT最好不要去掉,这样容易见名而知义。

同样,对第二个文本编辑框的属性中的IDC_EDIT2改为:IDC_EDIT_PWD7、在对话框上的任何空白的地方右键单击,点击建立类向导。

然后弹出选择建立Create a new class,点击OK。

这是为这个对话框创建一个新的类。

在Name中,为该对话框类取个名字:CDlg_login。

下面的Base class以及Dialog ID不要随便改动。

然后点击OK。

这样新的类CDlg_login就与本对话框建立起了联系。

8、点击OK后,我们并没有退出建立类向导。

点击member variables。

9、左键双击IDC_EDIT_NAME(或者单击后,点击右边的add variables),为IDC_EDIT_NAME增加一个对应在类中的名字:m_login_name。

其他地方不要改动。

mfc程序实验报告

mfc程序实验报告

mfc程序实验报告篇一:MFC实验报告实验日期:2013 年05 月18 日一、实验目的1、熟悉Visual C++的基本操作。

2、基本了解基于对话框的windows 应用程序的编写过程。

3、对于Windows Socket编程建立初步概念。

二、实验要求1、应用Visual C++中MFC CSocket 类,实现网络数据传输。

2、仿照本实验步骤,制作实用的局域网一对一聊天程序。

三、实验原理设置加入连接的数目,通过更改IP 地址和端口号,成为不同的客户端,与服务器端连接,实现用户间的聊天功能。

1.程序整体框架:主程序监听一端口,等待客户接入;同时构造一个线程类,准备接管会话。

当一个Socket会话产生后,将这个会话交给线程处理,然后主程序继续监听。

2.客户端(Client)客户端,使用Socket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭Socket。

客户端不需要指定打开的端口,通常临时的、动态的分配一个端口。

3.服务器端(Server)服务器端,使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大于1024的端口),等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。

4.用户图形界面用户图形界面方便程序与用户的交互,多个用户参加,完成会话功能,具体的设计要方便用户的使用,直观清晰,简洁明了,友好美观。

四、实验内容一个最简单的点对点聊天程序客户机/服务器模式是socket点对点网络程序典型的模式,以下这个实验就是实现一个简单的点对点通信的聊天程序。

它用到的方法也是面向连接TCP连接的套接字MFC典型方式。

其工作过程是:服务器首先启动,创建套接字后等待客户的连接;客户启动以后,创建套接字,然后和服务器建立连接;连接建立后,客户机和服务器可以通过建立的套接字连接进行信息通信。

局域网聊天程序(类飞鸽)综合设计

局域网聊天程序(类飞鸽)综合设计

基于Socks局域网内即时通讯软件(类飞鸽)摘要网络通讯在当今已经不算新鲜事物,但大多数网络通讯都需要借助Internet 上的服务器,这就给那些具有大规模内部网络的用户造成了许多问题,如浪费网络资源、遭遇到网络攻击、传播的病毒、破坏防御系统等等。

由于互连网上的网络通讯工具给企业内部信息交流带来了不便,所以为了方便内部网络的用户之间的沟通,需要开发一个基于局域网的信息收发系统的即时通讯工具,实现在内部网络中进行信息的交流。

本课题设计主要针对局域网通讯而开发设计的,采用的是C/S 构架,类似飞鸽传书系统,来实现聊天、文件传输功能,并借助一些网络通讯组件,成功的实现了在局域网上的即时通讯。

本论文的目标是设计一个类似飞鸽传输的局域网通信软件,并分析它在其领域的优势。

本设计以 C 编写,能在windows xp 等环境下运行。

设计共分为几大模块,分别是:首先,介绍选题设计内容和目标;其次,介绍需求分析和设计思想(TCP/IP 点对点协议技术,C/S 架构和SOCKET 网络编程技术);然后,设计的具体实现;最后,对工作计划统计以及分析系统进行测试并得到测试结果和附录。

关键词:聊天;文件传输;socket;类飞鸽传书;C/S 结构一、设计内容1.1 课题背景当时间走向21 世纪,当今时代也由工业经济渐渐成为了知识经济、信息经济的时代。

信息的需求量的不停增加,促使了计算机通信的日新月异!虽然网络的使用频率与使用的范围都越来越广泛,但是人们使用的网络的用途主要的还是只有两个:(1).相互之间的沟通,(2).资源共享。

局域网作为网络的一个重要组成部分,它不但用户与外界连接的枢纽,同时也是近距离用户之间沟通与资源共享的一个重要途径。

在这种情况下,如何使局域网内的用户便捷的勾通,以及快速的资源共享,也就成为了人们对网络研究的重点之一。

本系统仿飞鸽传输,是一个局域网内的通迅工具,主要通过Winsockt 完成。

它据有的功能有:(1)局域网内用户间简单的文字聊天功能;(2)局域网内用户间相互的文件、文件夹传输。

用VC++制作一个简单的局域网消息发送工程

用VC++制作一个简单的局域网消息发送工程

用VC++制作一个简单的局域网消息发送工程本工程类似于oicq的消息发送机制,不过他只能够发送简单的字符串。

虽然简单,但他也是一个很好的VC网络学习例子。

本例通过VC带的SOCKET类,重载了他的一个接受类mysock类,此类可以吧接收到的信息显示在客户区理。

以下是实现过程:建立一个MFC 单文档工程,工程名为oicq,在第四步选取WINDOWS SOCKetS支持,其它取默认设置即可。

为了简单,这里直接把about对话框作些改变,作为发送信息界面。

这里通过失去对话框来得到发送的字符串、获得焦点时把字符串发送出去。

创建oicq 类的窗口,获得VIEW类指针,进而可以把接收到的信息显示出来。

extern CString bb;void CAboutDlg::OnKillFocus(CWnd* pNewWnd){// TODO: Add your message handler code hereCDialog::OnKillFocus(pNewWnd);bb=m_edit;}对于OICQVIEW类char aa[100];CString mm;CDC* pdc;class mysock:public CSocket //派生mysock类,此类既有接受功能{public:void OnReceive(int nErrorCode) //可以随时接收信息{CSocket::Receive((void*)aa,100,0);mm=aa;CString ll=" ";//在显示消息之前,消除前面发送的消息pdc->TextOut(50,50,ll);pdc->TextOut(50,50,mm);}};mysock sock1;CString bb;BOOL COicqView::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message){CView::OnSetFocus(pOldWnd);// TODO: Add your message handler code here and/or call defaultbb="besting:"+bb; //确定发送者身份为bestingsock1.SendTo(bb,100,1060,"192.168.0.255",0); //获得焦点以广播形式发送信息,端口号为1060return CView::OnSetCursor(pWnd, nHitTest, message);}int COicqView::OnCreate(LPCREATESTRUCT lpCreateStruct){if (CView::OnCreate(lpCreateStruct) == -1)return -1;sock1.Create(1060,SOCK_DGRAM,NULL);//以数据报形式发送消息static CClientDC wdc(this); //获得当前视类的指针pdc=&wdc;// TODO: Add your specialized creation code herereturn 0;}运行一下,打开ABOUT对话框,输入发送信息,enter键就可以发送信息了,是不是有点像qq啊?。

MFC实验二 对话框程序设计

MFC实验二 对话框程序设计

实验二对话框程序设计(一) 实验目的:1 学习如何创建对话框程序,并想其中添加控件。

2 学习如何使用对话框来打开和保存文件。

3 学习创建消息对话框。

在Windows程序中,对话框是最重要的显示信息和取得用户数据的单元;一个应用程序可以拥有几个对话框,这些对话框从用户那里接受特定类型的信息;可以使用资源编辑器创建对话框资源,向其中添加控件,调整对话框的布局,使对话框更加便于使用。

(二) 实验内容:应用实例创建一个基于对话框的应用程序,并添加文件菜单,用来打开和保存文件;建立消息对话框,用来提醒用户在退出前保存文件;同时建立一个属性页对话框,掌握其基本用法。

(三) 实验步骤:实验一:创建简单的对话框应用程序1.使用AppWizard创建一个基于对话框类型的程序Prog01。

在AppWizard的第一页选择“Dialog based” ,生成标准对话框模板。

2.可以设置对话框的属性,右键单击整个对话框的背景,选择“Properties”项,在弹出的对话框中修改此对话框ID为:IDD_PROG01_DIALOG,标题为:“简单计算器”。

当对话框资源完成以后,选择ctrl+w,打开ClassWizard,已经有一个类Prog01Dlg与新的对话框相联系。

3.在控件工作栏点击要添加的空间图标,选择所需的控件。

一共要添加三个静态文本框、三个编辑框、五个命令按钮。

可以改变空间的大小、位置、对齐方式等等。

4.添加控件结束后,设置各个控件的属性。

右键需要设置属性的控件,在弹出的菜单中选择Prperties,或选中控件按回车键。

各个控件的属性设置如下图。

下表列出了本题中所有控件的属性设置以及添加的成员变量:5.为控件添加相对应的成员变量。

执行xiew-class wizard命令或者Ctrl+w,选择member variables ,可以在对话框类中为控件添加关联的成员变量和删除变量。

以第一个编辑框为例,成员变量名为m_floatFirstNum,float型。

MFC网络编程

MFC网络编程

2.MFC框架对于六个网络事件的处理 当上述的网络事件发生时,MFC框架作何处理 呢?按照Windows的消息驱动机制,MFC框 架应当把消息发送给相应的套接字对象,并调 用作为该对象成员函数的事件处理函数。事件 与处理函数是一一映射的。
在afxSock.h文件中的CAsyncSocket类的声明中, 定义了与这六个网络事件对应的事件处理函数。
关闭套接字 1.使用CAsyncSocket类的Close成员函 数 格式:virtual void Close( );
2.使用CAsyncSocket类的ShutDown() 成员函数 使用CAsyncSocket类的ShutDown()成员 函数,可以选择关闭套接字的方式。将套接字 置为不能发送数据,或不能接收数据,或二者 均不能的状态。
CSocket类,从CAsyncSocket类派生,是对 Windows Sockets API 的 高 级 封 装 。 CSocket类继承了CAsyncSocket类的许多成 员函数,用法一致。CSocket类的高级表现在 三个方面: (1)CSocket结合archive类来使用套接字。
(2)CSocket管理了通信的许多方面,如字 节顺序问题和字符串转换问题。 (3)CSocket类为Windows消息的后台处理 提供了阻塞的工作模式。
发送与接收流式数据 当服务器和客户机建立了连接以后,就可以 在服务器端的连接套接字对象和客户端的套 接字对象之间传输数据了。对于流式套接字 对象,使用CAsyncSocket类的Send成员函 数向流式套接字发送数据,使用Receive成 员函数从流式套接字接收数据。
1.用Send成员函数发送数据
virtual void OnConnect(int 对应 FD_CONNECT事件

实现一个简单的点对点网络聊天程序

实现一个简单的点对点网络聊天程序

实现一个简单的点对点网络聊天程序随着互联网的不断发展,人们越来越依赖于网络进行信息传递和交流。

而随着新技术的不断涌现,人们对网络聊天的需求也越来越高。

在这个背景下,开发一个简单易用的点对点网络聊天程序,无疑是一个非常受欢迎的项目。

本文将介绍如何实现一个基于Python的简单点对点网络聊天程序。

第1步确定技术框架在开始编写程序之前,需要确定使用的技术框架。

由于点对点网络聊天程序需要实现实时通信,这就需要使用一种支持Socket 编程的技术框架。

Python作为一种易于学习的高级编程语言,在网络编程方面也表现出了优秀的性能。

因此,本文选择使用Python的Socket库和Tkinter库实现点对点网络聊天程序。

第2步编写客户端程序接下来,需要编写客户端程序。

客户端程序主要用于连接服务器,并向其他客户端发送消息。

客户端程序的实现需要遵循以下步骤:1、导入Socket和Tkinter库。

2、定义客户端程序类。

3、定义GUI组件和方法,包括用户界面、消息发送功能和消息接收功能。

4、定义连接服务器和发送消息的方法。

客户端程序的核心代码如下:import socketimport tkinter as tkclass Client:def __init__(self):ername = Noneself.server_ip = "127.0.0.1"self.server_port = 5555self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)self.client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)self.gui()def gui(self):self.root = ()self.root.geometry("400x400")self.root.title("P2P Chat - Client")self.entry_message = tk.Entry(self.root)self.entry_message.pack(side="left", fill="x", expand=True)self.button_send = tk.Button(self.root, text="Send", command=self.send_message)self.button_send.pack(side="right")bel_message = bel(self.root, text="Enter username:")bel_message.pack(side="left")self.entry_username = tk.Entry(self.root)self.entry_username.pack(side="left", fill="x", expand=True)self.button_connect = tk.Button(self.root, text="Connect", command=self.connect_to_server)self.button_connect.pack(side="right")def connect_to_server(self):self.client_socket.connect((self.server_ip, self.server_port)) ername = self.entry_username.get()self.client_socket.send(bytes(ername, "utf8"))self.receive_messages()def send_message(self):message = self.entry_message.get()self.client_socket.send(bytes(message, "utf8"))self.entry_message.delete(0, tk.END)def receive_messages(self):while True:try:message = self.client_socket.recv(1024).decode("utf8") print(message)except OSError:breakdef mainloop(self):self.root.mainloop()if __name__ == "__main__":client = Client()client.mainloop()第3步编写服务器端程序客户端程序只能够实现连接服务器和发送消息的基本功能,还需要依靠服务器端程序实现客户端之间的消息传递。

(完整)基于MFC仿QQ聊天程序设计完整实例教程

(完整)基于MFC仿QQ聊天程序设计完整实例教程

本系统基于客户端/服务器基本原理,程序即是服务端,也是客户端,通过IP就可以相互添加好友,并且实现点到点通信,有聊天记录(未实现根据用户发送的消息而改变字体颜色,只能在客户端改),字体颜色设置(一改全改~),包含主界面MaindBord和聊天Talk两大功能模块。

(1) MaindBord模块A、登录模块登陆模块的实现过程有下面几个步骤:(1)初始化列表信息,获取用户名,服务器的IP地址,使按键失效(2)确认登陆后创建套接字,绑定,监听(3)初始化成功后,激活添加好友和隐藏功能B、好友模块添加好友的实现过程有下面几个步骤:(1)弹出对话框(2)获取对话框中的IP(3)检查对方是否在线,建立连接(4)发送请求验证C、好友列表模块(1)客户接收请求,将服务端加入列表,发送客户端信息(2)服务端得到客户端信息,加入列表(3)双击好友列表,弹出发送信息对话框D、隐藏模块(1)隐藏与显示(2)响应鼠标,弹出控制菜单(2)聊天Talk模块A、发送信息模块聊天模块中,发送信息模块的实现过程有下面几个步骤:(1)通过列表双击一个好友为聊天对象,弹出聊天窗口;(2)用户按下发送按钮后,检测对方是否在线,检测对方是否在线(3)将聊天内容发送出去(4)在本地即时聊天内容显示的编辑框中添加发送的内容并写入聊天记录。

B、接收信息模块聊天模块中,接收信息模块的实现过程有下面几个步骤:(1)由主界面判断接收到信息的类型,是否为好友发来信息,如果是,则打开聊天窗口(2)读取消息,并写入聊天记录,(3)载入字体颜色信息。

(4) 显示聊天记录C、聊天记录管理模块聊天记录管理模块的实现过程有下面几个步骤:(1)将发送内容和接收内容写入文本文件;(2)显示聊天记录;(3)删除聊天记录。

D、字体颜色模块实现字体颜色模块的过程有下面几个步骤:(1)调用系统字体,获取字体,写入存档(2) 调用系统字体颜色,获取颜色,写入存档(3)读取、更新字体颜色。

MFC实现简单网络聊天程序

MFC实现简单网络聊天程序

// TODO: Add your control notification handler code here UpdateData(TRUE); //使控件与变量同步 if(m_iType==0) //m_iType=0 即 client 端 m_ctlConnect.SetWindowText("连接");//m_ctlConnect 为控件“连接”按钮的映射变 量 else m_ctlConnect.SetWindowText("监听"); } 运行程序,结果如下图所示: 选中“客户端”显示“连接” ;选中“服务器端”显示“监听” :
添加代码: //in MySocket.h class CMySocket : public CAsyncSocket { //省略代码(自动生成) public: void SetParent(CDialog* pWnd);//成员函数,设置指向父对话框的指针 // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(MySocket) public: virtual void OnAccept(int nErrorCode); virtual void OnConnect(int nErrorCode); virtual void OnClose(int nErrorCode); virtual void OnReceive(int nErrorCode); virtual void OnSend(int nErrorCode); //}}AFX_VIRTUAL // 省略代码(自动生成) protected: private: CDialog* m_pWnd;//私有成员变量,指向父对话框的指针 }; // in MySocket.cpp 以下代码很重复,都是调用对话框类的成员函数 void CMySocket::OnAccept(int nErrorCode) { // TODO: Add your specialized code here and/or call the base class if(nErrorCode==0)//判断是否有错误 ((CMySockDlg*)m_pWnd)->OnAccept();//没有错误,则调用对话框类的 OnAccept

实验五 CAsyncSocket聊天程序

实验五   CAsyncSocket聊天程序

if (!AfxSocketInit())
{
AfxMessageBox(IDP_SOCKETS_INIT_FAILED);
return FALSE;
}
AfxEnableControlContainer();
// 创建 shell 管理器,以防对话框包含
// 任何 shell 树视图控件或 shell 列表视图控件。
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
// 实现
protected:
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD)
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// TODO: 在此添加额外的初始化代码
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
END_MESSAGE_MAP()
// CChatServerDlg 消息处理程序
BOOL CChatServerDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
if (pShellManager != NULL)
{
delete pShellManager;
}

MFC之编写一个简单的登录对话框

MFC之编写一个简单的登录对话框

MFC之编写一个简单的登录对话框编写一个简单的登录对话框大家好,我们利用MFC编写一个简单的登录对话框。

主窗体是单文档界面。

程序运行的时候,先弹出一个简单的登录对话框,输入用户名和密码后主窗体显示出来。

1、开打VC++6.0。

点击文件,新建,点击工程中的MFC AppWizard(exe),在右边选择工程保存的位置,并且为工程取好名字。

2、点击确定后,选择单个文档,你可以一直点击下一步,直到完成,或者在这里直接点击完成即可,完成后界面如下。

3、点击工具栏中的“!”号试着编译运行一次,看是否有问题。

如果没有问题,我们继续。

点击左边的ResourceView,在Dialog上面鼠标右键单击弹出一弹出框,单击Insert Dialog。

4、在右边新增的对话框中,适当改变窗口大小,加入静态文本框和文本编辑框。

输入用户名:。

然后回车同样在下面的第二个静态文本框的属性标题改为:输入密码:。

然后回车。

6、在第一个文本编辑框上右键单击,点击属性,把ID框中的IDC_EDIT1改为容易理解的名字,如:IDC_EDIT_NAME,注意前面的IDC_EDIT最好不要去掉,这样容易见名而知义。

同样,对第二个文本编辑框的属性中的IDC_EDIT2改为:IDC_EDIT_PWD7、在对话框上的任何空白的地方右键单击,点击建立类向导。

然后弹出选择建立Create a new class,点击OK。

这是为这个对话框创建一个新的类。

在Name中,为该对话框类取个名字:CDlg_login。

下面的Base class以及Dialog ID不要随便改动。

然后点击OK。

这样新的类CDlg_login就与本对话框建立起了联系。

8、点击OK后,我们并没有退出建立类向导。

点击member variables。

9、左键双击IDC_EDIT_NAME(或者单击后,点击右边的add variables),为IDC_EDIT_NAME增加一个对应在类中的名字:m_login_name。

基于MFC的即时通讯软件的设计与实现

基于MFC的即时通讯软件的设计与实现

基于MFC的即时通讯软件的设计与实现摘要在互联网上有很多即时通讯软件。

由于安全性原因,企业内部网络与外网是物理隔离的,无法使用传统的即时通讯软件。

本文开了一个专门为企业定制的通讯软件,该软件通过MFC、XML和Socket编程实现。

其中客户端包含登录、用户列表和收发消息。

服务器端包含主界面、组织管理和用户管理。

最终通过测试,该基于MFC的即时通讯软件能够实现注册、登录、收发消息等基本功能,软件运行稳定。

关键词:MFC; XML; Socket; 即时通讯Design and Implementation of Instant Messaging Software Based on MFCZhu Yan, Guo Xiaomei(College of Information Engineering, Hunan University of Science and Engineering, Yong Zhou425199, Hunan.)AbstractThere are many instant messaging programs on the Internet. For security reasons, the Intranet is physically isolated from theInternet, and traditional IM software cannot be used. This paper develops a communication software specially customized for enterprises, which is implemented by MFC, XML and Socket programming. The client includes login, user list, and sending and receiving messages. The server contains the main interface, organization management, and user management. Finally through the test, the MFC based instant messagingsoftware can achieve registration, login, send and receive messages and other basic functions, the software runs stably.Key words:MFC; XML; Socket; instant messaging1背景及意义企业级的即时通信实际上也可以说是个人即时通信的应用延伸。

利用MFC的Csocket类实现网络通信

利用MFC的Csocket类实现网络通信

利用MFC的Csocket类实现网络通信2007年06月27日星期三11:29近年来,利用Internet进行网际间通讯,在WWW浏览、FTP、Gopher这些常规服务,以及在网络电话、多媒体会议等这些对实时性要求严格的应用中成为研究的热点,而且已经是必需的了。

Windows环境下进行通讯程序设计的最基本方法是应用Windows Sockets实现进程间的通讯,为此微软提供了大量基于Windows Sockets的通讯API,如WinSockAPI、WinInetAPI和ISAPI,并一直致力于开发更快、更容易的通讯API,将其和MFC集成在一起以使通讯编程越来越容易。

本实例重点介绍使用MFC的CSocket类编写网络通讯程序的方法,并通过使用CSocket类实现了网络聊天程序。

程序编译运行后的界面效果如图一所示:图一、网络聊天程序界面效果图一、实现方法微软的MFC把复杂的WinSock API函数封装到类里,这使得编写网络应用程序更容易。

CAsyncSocket类逐个封装了WinSock API,为高级网络程序员提供了更加有力而灵活的方法。

这个类基于程序员了解网络通讯的假设,目的是为了在MFC中使用WinSock,程序员有责任处理诸如阻塞、字节顺序和在Unicode与MBCS 间转换字符的任务。

为了给程序员提供更方便的接口以自动处理这些任务,MFC给出了CSocket类,这个类是由CAsyncSocket类继承下来的,它提供了比CAsyncSocket更高层的WinSock API接口。

Csocket类和CsocketFile类可以与Carchive类一起合作来管理发送和接收的数据,这使管理数据收发更加便利。

CSocket对象提供阻塞模式,这对于Carchive的同步操作是至关重要的。

阻塞函数(如Receive()、Send()、ReceiveFrom()、SendTo() 和Accept())直到操作完成后才返回控制权,因此如果需要低层控制和高效率,就使用CasyncSock类;如果需要方便,则可使用Csocket类。

手工生成(不用向导)MFC对话框应用程序

手工生成(不用向导)MFC对话框应用程序

手工生成(不用向导)MFC对话框应用程序天天用MFC的向导开发程序觉得有的时候不是很方便,怎样不用向导直接用MFC来生成一个对话框应用程序呢?现在我来为大家介绍一下。

打开vc++6.0,建立个基本的工程,当然了工程名称自己随便取,这里我取名为AppDlgTst。

工程的类型选择Win32 Application,如下图:第二歩选择“An empty project”,一个空的工程,如下图:点击“完成”,再“确定”,建立一个win32工程。

接下来,给工程添加主程序类。

主菜单(insert->NewClass),打开“New Class”对话框。

新建一个类,Name: CWinAppDlg ,Derived From :CWinApp,as:public。

点击“Change…”按钮,修改类文件的路径,把类文件放到新建的工程目录下。

界面如下:点击“OK”,会出现如下提示框:不用管它,确定。

这是一个基本的应用程序类,就这样建成了。

接下来,我们需要手动添加一个对话框,添加方法如下:依次点击主菜单的“insert”→“resource…”,打开insert resource对话框。

选中“Dialog”,点击“New”按钮,一个对话框就添加到你的工程中了。

如下图:对话框添加了,但工程中相应的资源管理器(ResourceView)还没有出现,无法操作添加的对话框。

关闭工作区,此时系统会提示是否保存资源文件?如下图:点击“是”,保存资源文件为“script.rc”,保存,如下图。

重新打开工程,但左侧的工程管理栏内仍然没有“resourceView”页,怎么办?把刚才保存的资源文件添加到工程即可,操作如下:依次点击主菜单“project”→“add project”→“Files…”,打开“Insert Files into Project”对话框,找到刚才退出工程时保存的资源文件“Script.rc”,选中它,点击“保存”。

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

Generated by Foxit PDF Creator © Foxit Software For evaluation only.
Generated by Foxit PDF Creator © Foxit Software For evaluation only.
Generated by Foxit PDF Creator © Foxit Software For evaluation only.
函数 CAsyncSocket::OnAccept(nErrorCode); } void CMySocket::OnConnect(int nErrorCode) { // TODO: Add your specialized code here and/or call the base class if(nErrorCode==0)//判断是否有错误 ((CMySockDlg*)m_pWnd)->OnConnect();//没有错误, 则调用对话框类的 OnConnect 函数 CAsyncSocket::OnConnect(nErrorCode); } void CMySocket::OnClose(int nErrorCode) { // TODO: Add your specialized code here and/or call the base class if(nErrorCode==0)//判断是否有错误 ((CMySockDlg*)m_pWnd)->OnClose();//没有错误, 则调用对话框类的 OnClose 函数 CAsyncSocket::OnClose(nErrorCode); } void CMySocket::OnReceive(int nErrorCode) { // TODO: Add your specialized code here and/or call the base class if(nErrorCode==0)//判断是否有错误 ((CMySockDlg*)m_pWnd)->OnReceive();//没有错误,则调用对话框类的 OnReceive 函数 CAsyncSocket::OnReceive(nErrorCode); } CMySocket 类添加所有必要的事件函数后,应该对话框类添加一个 CMySocket 类变量。从 服务器的角度来看,对话框类需要 2 个变量,一个用于监听请求,一个用于与对方应用程序 的连接。故需要两个 CMySocket 对象,为对话框类添加两个成员变量。把两个变量的类型 指定为 CMySocket 类,访问方式两个都为私有,一个变量名为 m_sListenSocket,用于连接 请求的监听,另一个命名为 m_sConnectSocket,用于来回发送消息。 //in MySockDlg.h #include "MySocket.h" // CMySockDlg dialog class CMySockDlg : public CDialog { // 省略代码(自动生成的) private: CMySocket m_sConnectSocket; CMySocket m_sListenSocket;
2.添加控件,并设置控件属性 控件类型 Group Box Radio Button RadioButton Static text Edit box Static text Edit box Button ID IDC_STATIC IDC_RCLIENT IDC_RSERVER IDC_SNAME IDC_ESERVERNAME IDC_SPORT IDC_EPORT IDC_BCONNECT 端口号 连接 socket 类型 客户端 服务器端 Caption 控件类型 Static box Edit box Button Static box ID IDC_SMSG IDC_EMSG IDC_BSEND IDC_SSEND IDC_LSEND IDC_SRECV IDC_LRECV IDC_BCLOSE 关闭 接收 发送 发送 Caption 消息
添加代码: //in MySocket.h class CMySocket : public CAsyncSocket { //省略代码(自动生成) public: void SetParent(CDialog* pWnd);//成员函数,设置指向父对话框的指针 // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(MySocket) public: virtual void OnAccept(int nErrorCode); virtual void OnConnect(int nErrorCode); virtual void OnClose(int nErrorCode); virtual void OnReceive(int nErrorCode); virtual void OnSend(int nErrorCode); //}}AFX_VIRTUAL // 省略代码(自动生成) protected: private: CDialog* m_pWnd;//私有成员变量,指向父对话框的指针 }; // in MySocket.cpp 以下代码很重复,都是调用对话框类的成员函数 void CMySocket::OnAccept(int nErrorCode) { // TODO: Add your specialized code here and/or call the base class if(nErrorCode==0)//判断是否有错误 ((CMySockDlg*)m_pWnd)->OnAccept();//没有错误,则调用对话框类的 OnAccept
Generated by Foxit PDF Creator © Foxit Software For evaluation only.
MFC 实现简单网络聊天程序
看来得声明一下:这个程序的功能还很不健全,只是基本实现了消息的收发过程,而且 并不跟 QQ 似的那么灵活,因为没有快捷方式。关于程序无法运行的问题,很抱歉,我只是 大概组织了一下该应用程序的总体流程和重点代码的添加。 我再看了一下, 是有些代码没有 列出来。比如 MySocket 类中成员函数的实现代码,都没列举出来。不过现在已经添加!应 该可以运行出同样的界面了。 一个简单的用 MFC 实现的基于对话框的网络聊天程序 重点理解:基于对话框和类。 实现功能:可以选择作为客户端或服务器端;服务器连接过程;消息接收过程;关闭连接。 1.建立基于对话框的 MFC 工程 MySock 注意:①基于对话框;②支持 window socket。
数。 编辑该函数,添加如下代码: //in MySockDlg.cpp void CMySockDlg::OnRType() {
Generated by Foxit PDF Creator © Foxit Software For evaluation only.
Generated by Foxit PDF Creator © Foxit Software For evaluation only.
4.添加 CAsyncSocket 类的继承类 MySocket 为了使应用程序能够捕捉和相应 socket 事件,可以从 AsyncSocket 创建自己的派生类。该类 需要有自己版本的事件函数, 也需要一种把此事件传到对话框的方法。 为把每个事件传给对 话框类、添加一个指向父对话框的指针作为 socket 类的成员变量。对每个 socket 事件使用 此 指 针 调 用 事 件 函 数 。 具 体 做 法 , 如 图 所 示 :
Generated by Foxit PDF Creator © Foxit Software For evaluation de "MySocket.h" 5.初始化 CMySocket 类的成员函数 添加 CMySocket 变量后,添加所有变量的初始化代码。默认设置为:应用程序类型设置为 客户端程序,服务器名为 loopback,端口为 4000,在两个 CMySocket 对象中设置父对话框 的指针,指向对话框类对象。所有这些初始化,都在 OnInitDialog 函数中完成。 注意:计算机名 loopback 是 TCP/IP 网络协议的一个特殊名字,表示你正在这台计算机上工 作,这个内部计算机名网址为 127.0.0.1。需要与另一个程序连接,运行在同一台计算机上的 应用程序都用此名字和网址。 // in MySockDlg.cpp BOOL CMySockDlg::OnInitDialog() { //省略代码(自动生成的) // TODO: Add extra initialization here //初始化控件对应的变量 m_iType = 0; m_strName ="loopback"; m_iPort = 4000; //更新控件 UpdateData(FALSE); //设置 Socket 对应的对话框 m_sConnectSocket.SetParent(this); m_sListenSocket.SetParent(this); return TRUE; // return TRUE } 5.实现客户端与服务端间的连接功能 用户单击“连接”按钮后,就禁止了对话框上顶端的所有控件,此时,用户不可修改对方计 算机的设置或修改应用程序的监听方式。可以调用 Create 函数,其 Socket 变量根据应用程 序运行在客户机或服务器上而定。 最后调用 Connect 或 Listen 函数初始化应用程序端的连接。 unless you set the focus to a control
服 务 器 名 List box 称 Static box List box Button
Generated by Foxit PDF Creator © Foxit Software For evaluation only.
相关文档
最新文档