`
chentingk
  • 浏览: 19962 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

MFC通信项目之--单线程聊天室

 
阅读更多



 

 画出如图界面,新建mfc项目->对话框项目->windows套接字

然后在工具栏中拖入控件



 

每个控件都可以添加控制变量以便在事件触发时控制按键



 

文件结构:



 一般都是头文件和cpp文件同名一份,头文件定义虚拟方法由cpp文件实现

通信流程如下:



 

五个状态:



 在资源视图里双击按钮可创建点击后事件处理函数

//连接事件处理--连上服务器
void CCHAT_ClientDlg::OnBnClickedConn()
{
	// TODO: 在此添加控件通知处理程序代码
	BYTE nFild[4];
	CString CIP;
	UpdateData();
	m_IpAddress.GetAddress(nFild[0],nFild[1],nFild[2],nFild[3]);
	CIP.Format("%d.%d.%d.%d",nFild[0],nFild[1],nFild[2],nFild[3]);
	m_ClientSocket.Create();
	m_ClientSocket.Connect(CIP,Port);

}

//退出事件处理
void CCHAT_ClientDlg::OnBnClickedExit()
{
	// TODO: 在此添加控件通知处理程序代码
	exit(0);
}

//断开按钮事件处理--断开socket连接
void CCHAT_ClientDlg::OnBnClickedDisconn()
{
	// TODO: 在此添加控件通知处理程序代码
	m_IpAddress.EnableWindow();
	m_portCtr.EnableWindow();
	m_ButtonConn.EnableWindow();
	m_ButtonDisConn.EnableWindow(false);
	m_sendMSG.EnableWindow(false);
	m_ButtonSend.EnableWindow(false);
	m_ButtonExit.EnableWindow();
	m_ClientSocket.Close();
	m_List.AddString("从服务器断开");

}



//发送按钮
void CCHAT_ClientDlg::OnBnClickedSendmsg()
{
	// TODO: 在此添加控件通知处理程序代码
	UpdateData();
	m_ClientSocket.Send(m_sendText,m_sendText.GetLength());
	cout<<m_sendText<<"   长度"<<m_sendText.GetLength()
		<<endl;
	m_List.AddString("发送 : "+m_sendText);
}

//清空 按钮
void CCHAT_ClientDlg::OnBnClickedClc()
{
	// TODO: 在此添加控件通知处理程序代码
	m_List.ResetContent();//清空历史信息
}

//关于按钮
void CCHAT_ClientDlg::OnBnClickedAbout()
{
	// TODO: 在此添加控件通知处理程序代码
	CAboutDlg dlgAbout;
	dlgAbout.DoModal();

}

 连接事件要在CAsyncSocket的状态中重写

 

//连接状态
void CClientSocket::OnConnect(int nErrorCode)
{
	// TODO: 在此添加专用代码和/或调用基类

	CAsyncSocket::OnConnect(nErrorCode);
	if(nErrorCode)
	{
		AfxMessageBox("连接失败,请你重试");
		return;
	}
	((CCHAT_ClientDlg*)(AfxGetApp()->m_pMainWnd))->m_List.AddString("连接服务器成功");
	//控件处理
	((CCHAT_ClientDlg*)(AfxGetApp()->m_pMainWnd))->m_IpAddress.EnableWindow(false);
	((CCHAT_ClientDlg*)(AfxGetApp()->m_pMainWnd))->m_portCtr.EnableWindow(false);
	((CCHAT_ClientDlg*)(AfxGetApp()->m_pMainWnd))->m_ButtonConn.EnableWindow(false);
	((CCHAT_ClientDlg*)(AfxGetApp()->m_pMainWnd))->m_ButtonDisConn.EnableWindow();
	((CCHAT_ClientDlg*)(AfxGetApp()->m_pMainWnd))->m_sendMSG.EnableWindow();
	((CCHAT_ClientDlg*)(AfxGetApp()->m_pMainWnd))->m_ButtonSend.EnableWindow();
	((CCHAT_ClientDlg*)(AfxGetApp()->m_pMainWnd))->m_ButtonExit.EnableWindow(false);
	((CCHAT_ClientDlg*)(AfxGetApp()->m_pMainWnd))->m_ButtonClear.EnableWindow();





}

//接收状态
void CClientSocket::OnReceive(int nErrorCode)
{
	// TODO: 在此添加专用代码和/或调用基类

	CAsyncSocket::OnReceive(nErrorCode);
	char szTemp[200];
	int n=Receive(szTemp,200);
	szTemp[n]='\0';
	CString sTemp;
	sTemp.Format("收到 :%s",szTemp);
	((CCHAT_ClientDlg*)(AfxGetApp()->m_pMainWnd))->m_List.AddString(sTemp);

}

//关闭状态
void CClientSocket::OnClose(int nErrorCode)
{
	// TODO: 在此添加专用代码和/或调用基类

	CAsyncSocket::OnClose(nErrorCode);
	((CCHAT_ClientDlg*)(AfxGetApp()->m_pMainWnd))->m_List.AddString("从服务器断开了!");
	Close();

	//控件处理
	((CCHAT_ClientDlg*)(AfxGetApp()->m_pMainWnd))->m_IpAddress.EnableWindow();
	((CCHAT_ClientDlg*)(AfxGetApp()->m_pMainWnd))->m_portCtr.EnableWindow();
	((CCHAT_ClientDlg*)(AfxGetApp()->m_pMainWnd))->m_ButtonConn.EnableWindow();
	((CCHAT_ClientDlg*)(AfxGetApp()->m_pMainWnd))->m_ButtonDisConn.EnableWindow(false);
	((CCHAT_ClientDlg*)(AfxGetApp()->m_pMainWnd))->m_sendMSG.EnableWindow(false);
	((CCHAT_ClientDlg*)(AfxGetApp()->m_pMainWnd))->m_ButtonSend.EnableWindow(false);
	((CCHAT_ClientDlg*)(AfxGetApp()->m_pMainWnd))->m_ButtonExit.EnableWindow();
	

}

 ((CCHAT_ClientDlg*)(AfxGetApp()->m_pMainWnd))->   可获得app的控制以便获取里面定义的变量

  • 大小: 10.6 KB
  • 大小: 12.1 KB
  • 大小: 31.6 KB
  • 大小: 43.1 KB
  • 大小: 24.3 KB
  • 大小: 155.2 KB
  • 大小: 3 KB
分享到:
评论

相关推荐

    MFC教程lesson 15-多线程&聊天室.rar

    在本MFC教程Lesson 15中,我们将深入探讨多线程编程以及如何利用MFC(Microsoft Foundation Classes)框架创建一个简单的聊天室应用。多线程是现代软件开发中的一个重要概念,它允许程序同时执行多个任务,提高了...

    网络程序设计--MFC网络聊天室

    总的来说,"网络程序设计--MFC网络聊天室"是一个涉及网络编程、多线程、用户界面设计等多方面技术的项目。通过实践,开发者不仅能深入理解MFC类库,还能提升在网络环境下的编程能力,特别是处理并发和通信问题的能力...

    visual c++ MFC之Lesson15多线程与聊天室程序的创建

    在Visual C++ MFC的Lesson...总之,通过学习Visual C++ MFC的Lesson15,开发者将掌握如何创建多线程聊天室程序,理解线程的创建、管理和同步,以及网络通信的基础知识。这将为构建复杂、高性能的应用程序打下坚实基础。

    CAsyncSocket基于tcp的单线程聊天室

    《CAsyncSocket构建TCP单线程聊天室详解》 在计算机网络编程中,TCP(Transmission Control Protocol)协议因其可靠的数据传输特性,常被用于构建聊天室等需要稳定通信的场景。CAsyncSocket是Microsoft MFC...

    MFC SOCKET 聊天室客户端

    本项目“MFC SOCKET 聊天室客户端”显然是一个使用MFC库和SOCKET API开发的网络聊天室应用,它允许用户通过网络与其他客户端进行实时交流。 MFC是微软为开发者设计的一个面向对象的类库,它封装了许多Windows API...

    MFC多人聊天室

    【标题】"MFC多人聊天室"涉及到的核心技术是多用户实时通信,主要利用了Microsoft Foundation Class (MFC) 库来实现一个功能完善的聊天室系统。MFC是微软为Windows应用程序开发提供的一套C++类库,它封装了Windows ...

    多线程MFC聊天室程序源代码

    本篇文章将详细探讨一个基于MFC的多线程聊天室程序源代码,它利用了多线程技术和异步套接字来实现高效、稳定的网络通信。 首先,我们要理解“多线程”这一概念。在单线程程序中,所有操作都在同一执行流中进行,而...

    网络聊天室 MFC

    在聊天室的实现中,每个客户端连接都会创建一个新的会话线程,这样可以避免单个线程因为处理网络通信而阻塞用户界面。MFC提供CWinThread类来创建和管理线程,这使得多用户同时交互成为可能。 为了实现消息的广播,...

    聊天室--网络编程MFC-WinSocket

    《聊天室--网络编程MFC-WinSocket》 在计算机科学领域,网络编程是构建分布式系统的关键技术之一,它使得不同设备之间的数据交换成为可能。本文将深入探讨使用MFC(Microsoft Foundation Classes)库和WinSocket ...

    mfc聊天室

    综上所述,"mfc聊天室"项目涵盖了MFC编程、网络通信、多线程、数据库集成、用户界面设计、安全性等多个方面的知识点,是一个综合性的实践项目。通过学习和分析这个项目,开发者可以提升自己的MFC应用开发能力和网络...

    基于MFC的简单聊天室程序

    综上所述,“基于MFC的简单聊天室程序”涉及到的知识点包括:MFC基础、服务端与客户端通信(Winsock)、多线程技术、事件驱动的编程模型以及文件操作和数据序列化。理解并掌握这些知识点,对于开发类似的应用程序是...

    MFC课程设计(聊天室)

    **MFC课程设计——构建...通过这个MFC聊天室的设计,你将学习到Windows编程的基本原理,MFC框架的使用,以及网络通信的实践。这不仅加深了对C++和Windows编程的理解,也为将来开发更复杂的分布式系统打下了坚实的基础。

    CSocket多线程聊天室源码

    CSocket多线程聊天室源码是一个基于MFC(Microsoft Foundation Classes)库中的CSocket类实现的网络通信项目。此源码提供了在一个多线程环境中创建一个简单的聊天室功能,让多个用户能够实时交流。MFC是微软为...

    基于VS2015的MFC的多线程同步套接字网络聊天室

    在本文中,我们将深入探讨如何使用Visual Studio 2015 (VS2015) 和MFC(Microsoft Foundation Classes)来构建一个基于多线程和异步套接字的网络聊天室。这个项目旨在提供一个实时、稳定且高效的通信平台,让多个...

    MFC聊天室客户端服务器端

    【MFC聊天室客户端服务器端】是一个基于Microsoft Foundation Class (MFC)库开发的聊天室应用程序,它包含客户端和服务器端两部分。MFC是微软为Windows平台提供的一套C++类库,用于简化Windows应用程序的开发。在这...

    基于Socket的MFC聊天室程序

    总的来说,基于Socket的MFC聊天室程序是一个结合了网络编程和GUI编程的项目,它展示了如何利用MFC来构建用户友好的界面,同时通过Socket实现网络通信,满足多人实时交流的需求。通过学习和理解这个项目,开发者可以...

    VS实现MFC的点对点聊天室

    用VS 2017的MFC实现客户端和服务器的点对点聊天功能,所有代码在VS 2017中能直接运行,主要实现CAsyncSocket类的编程,包括创建CAsyncSocket对象、建立连接、发送和接收数据等,从CAsyncSocket类派生出自己的WinSock...

    MFC聊天室 私聊 列表更新

    在本文中,我们将深入探讨如何使用Microsoft Foundation Class (MFC) 库在VC++环境中开发一个网络聊天室,特别关注实现私聊功能以及列表更新的关键技术。...希望这个概述能帮助你理解和构建自己的MFC聊天室项目。

    基于MFC的聊天室程序源码

    在本项目中,我们探讨的是一个基于MFC实现的聊天室程序,该程序包含服务器和客户端两部分,允许多客户端同时进行通信。 首先,我们要理解MFC中的主要组件及其作用。MFC的核心包括类库、框架和文档/视图结构。类库...

Global site tag (gtag.js) - Google Analytics