画出如图界面,新建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的控制以便获取里面定义的变量
相关推荐
在本MFC教程Lesson 15中,我们将深入探讨多线程编程以及如何利用MFC(Microsoft Foundation Classes)框架创建一个简单的聊天室应用。多线程是现代软件开发中的一个重要概念,它允许程序同时执行多个任务,提高了...
总的来说,"网络程序设计--MFC网络聊天室"是一个涉及网络编程、多线程、用户界面设计等多方面技术的项目。通过实践,开发者不仅能深入理解MFC类库,还能提升在网络环境下的编程能力,特别是处理并发和通信问题的能力...
在Visual C++ MFC的Lesson...总之,通过学习Visual C++ MFC的Lesson15,开发者将掌握如何创建多线程聊天室程序,理解线程的创建、管理和同步,以及网络通信的基础知识。这将为构建复杂、高性能的应用程序打下坚实基础。
《CAsyncSocket构建TCP单线程聊天室详解》 在计算机网络编程中,TCP(Transmission Control Protocol)协议因其可靠的数据传输特性,常被用于构建聊天室等需要稳定通信的场景。CAsyncSocket是Microsoft MFC...
本项目“MFC SOCKET 聊天室客户端”显然是一个使用MFC库和SOCKET API开发的网络聊天室应用,它允许用户通过网络与其他客户端进行实时交流。 MFC是微软为开发者设计的一个面向对象的类库,它封装了许多Windows API...
【标题】"MFC多人聊天室"涉及到的核心技术是多用户实时通信,主要利用了Microsoft Foundation Class (MFC) 库来实现一个功能完善的聊天室系统。MFC是微软为Windows应用程序开发提供的一套C++类库,它封装了Windows ...
本篇文章将详细探讨一个基于MFC的多线程聊天室程序源代码,它利用了多线程技术和异步套接字来实现高效、稳定的网络通信。 首先,我们要理解“多线程”这一概念。在单线程程序中,所有操作都在同一执行流中进行,而...
在聊天室的实现中,每个客户端连接都会创建一个新的会话线程,这样可以避免单个线程因为处理网络通信而阻塞用户界面。MFC提供CWinThread类来创建和管理线程,这使得多用户同时交互成为可能。 为了实现消息的广播,...
《聊天室--网络编程MFC-WinSocket》 在计算机科学领域,网络编程是构建分布式系统的关键技术之一,它使得不同设备之间的数据交换成为可能。本文将深入探讨使用MFC(Microsoft Foundation Classes)库和WinSocket ...
综上所述,"mfc聊天室"项目涵盖了MFC编程、网络通信、多线程、数据库集成、用户界面设计、安全性等多个方面的知识点,是一个综合性的实践项目。通过学习和分析这个项目,开发者可以提升自己的MFC应用开发能力和网络...
综上所述,“基于MFC的简单聊天室程序”涉及到的知识点包括:MFC基础、服务端与客户端通信(Winsock)、多线程技术、事件驱动的编程模型以及文件操作和数据序列化。理解并掌握这些知识点,对于开发类似的应用程序是...
**MFC课程设计——构建...通过这个MFC聊天室的设计,你将学习到Windows编程的基本原理,MFC框架的使用,以及网络通信的实践。这不仅加深了对C++和Windows编程的理解,也为将来开发更复杂的分布式系统打下了坚实的基础。
CSocket多线程聊天室源码是一个基于MFC(Microsoft Foundation Classes)库中的CSocket类实现的网络通信项目。此源码提供了在一个多线程环境中创建一个简单的聊天室功能,让多个用户能够实时交流。MFC是微软为...
在本文中,我们将深入探讨如何使用Visual Studio 2015 (VS2015) 和MFC(Microsoft Foundation Classes)来构建一个基于多线程和异步套接字的网络聊天室。这个项目旨在提供一个实时、稳定且高效的通信平台,让多个...
【MFC聊天室客户端服务器端】是一个基于Microsoft Foundation Class (MFC)库开发的聊天室应用程序,它包含客户端和服务器端两部分。MFC是微软为Windows平台提供的一套C++类库,用于简化Windows应用程序的开发。在这...
总的来说,基于Socket的MFC聊天室程序是一个结合了网络编程和GUI编程的项目,它展示了如何利用MFC来构建用户友好的界面,同时通过Socket实现网络通信,满足多人实时交流的需求。通过学习和理解这个项目,开发者可以...
用VS 2017的MFC实现客户端和服务器的点对点聊天功能,所有代码在VS 2017中能直接运行,主要实现CAsyncSocket类的编程,包括创建CAsyncSocket对象、建立连接、发送和接收数据等,从CAsyncSocket类派生出自己的WinSock...
在本文中,我们将深入探讨如何使用Microsoft Foundation Class (MFC) 库在VC++环境中开发一个网络聊天室,特别关注实现私聊功能以及列表更新的关键技术。...希望这个概述能帮助你理解和构建自己的MFC聊天室项目。
在本项目中,我们探讨的是一个基于MFC实现的聊天室程序,该程序包含服务器和客户端两部分,允许多客户端同时进行通信。 首先,我们要理解MFC中的主要组件及其作用。MFC的核心包括类库、框架和文档/视图结构。类库...