欢迎来到天天文库
浏览记录
ID:41037300
大小:65.92 KB
页数:19页
时间:2019-08-14
《MFC socket编程》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、socket编程用法----随着计算机网络化的深入,计算机网络编程在程序设计的过程中变得日益重要。由于C++语言对底层操作的优越性,许多文章都曾经介绍过用VC++进行Socket编程的方法。但由于都是直接利用动态连接库wsock32.dll进行操作,实现比较繁琐。其实,VC++的MFC类库中提供了CAsyncSocket这样一个套接字类,用他来实现Socket编程,是非常方便的。----本文将用一个Echo例程来介绍CAsyncSocket类的用法。----一.客户端----1.创建一个DialogBased项目:CSockClient。----2.设计对话框-
2、---去掉Ok和Cancle两个按钮,增加ID_Connect(连接)、ID_Send(发送)、ID_Exit(关闭)按钮,增加ListBox控件IDC_LISTMSG和Edit控件IDC_EDITMSG,并按下表在ClassWizard中为CCSockClientDlg类添加变量。ControlIDTypeMember IDC_EDITMSGCEditm_MSGIDC_LISTMSGClistBoxm_MSGS----3.CAsyncSocket类用DoCallBack函数处理MFC消息,当一个网络事件发生时,DoCallBack函数按网络事件类型:FD
3、_READ、FD_WRITE、FD_ACCEPT、FD_CONNECT分别调用OnReceive、OnSend、OnAccept、OnConnect函数。由于MFC把这些事件处理函数定义为虚函数,所以要生成一个新的C++类,以重载这些函数,做法如下:----以Public方式继承CAsyncSocket类,生成新类MySock;----为MySock类添加虚函数OnReceive、OnConnect、OnSend----4.在MySock.ccp中添加以下代码#include"CSockClient.h"#include"CSockClientDlg.h"---
4、-5.在MySock.h中添加以下代码public: BOOLm_bConnected; //是否连接 UINTm_nLength; //消息长度 charm_szBuffer[4096]; //消息缓冲区----6.在MySock.ccp中重载各函数MySock::MySock(){m_nLength=0;memset(m_szBuffer,0,sizeof(m_szBuffer));m_bConnected=FALSE;}MySock::~MySock(){//关闭套接字if(m_hSocket!=INVALID_
5、SOCKET) Close();}voidMySock::OnReceive(intnErrorCode){m_nLength=Receive(m_szBuffer,sizeof(m_szBuffer),0);//下面两行代码用来获取对话框指针CCSockClientApp*pApp=(CCSockClientApp*)AfxGetApp();CCSockClientDlg*pDlg=(CCSockClientDlg*)pApp->m_pMainWnd;pDlg->m_MSGS.InsertString(0,m_szBuffer);memset(m_sz
6、Buffer,0,sizeof(m_szBuffer));CAsyncSocket::OnReceive(nErrorCode);}voidMySock::OnSend(intnErrorCode){Send(m_szBuffer,m_nLength,0);m_nLength=0;memset(m_szBuffer,0,sizeof(m_szBuffer));//继续提请一个“读”的网络事件,接收Server消息AsyncSelect(FD_READ);CAsyncSocket::OnSend(nErrorCode);}voidMySock::OnConnect
7、(intnErrorCode){if(nErrorCode==0){ m_bConnected=TRUE; CCSockClientApp*pApp=(CCSockClientApp*)AfxGetApp(); CCSockClientDlg*pDlg=(CCSockClientDlg*)pApp->m_pMainWnd; memcpy(m_szBuffer,"Connectedto",13); strncat(m_szBuffer,pDlg->m_szServerAdr, sizeof(pDlg->m_s
8、zServerAdr))
此文档下载收益归作者所有