MFC socket编程.docx
上传人:qw****27 上传时间:2024-09-12 格式:DOCX 页数:19 大小:65KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

MFC socket编程.docx

MFCsocket编程.docx

预览

免费试读已结束,剩余 9 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

socket编程用法----随着计算机网络化的深入,计算机网络编程在程序设计的过程中变得日益重要。由于C++语言对底层操作的优越性,许多文章都曾经介绍过用VC++进行Socket编程的方法。但由于都是直接利用动态连接库wsock32.dll进行操作,实现比较繁琐。其实,VC++的MFC类库中提供了CAsyncSocket这样一个套接字类,用他来实现Socket编程,是非常方便的。----本文将用一个Echo例程来介绍CAsyncSocket类的用法。----一.客户端----1.创建一个DialogBased项目:CSockClient。----2.设计对话框----去掉Ok和Cancle两个按钮,增加ID_Connect(连接)、ID_Send(发送)、ID_Exit(关闭)按钮,增加ListBox控件IDC_LISTMSG和Edit控件IDC_EDITMSG,并按下表在ClassWizard中为CCSockClientDlg类添加变量。ControlIDTypeMemberIDC_EDITMSGCEditm_MSGIDC_LISTMSGClistBoxm_MSGS----3.CAsyncSocket类用DoCallBack函数处理MFC消息,当一个网络事件发生时,DoCallBack函数按网络事件类型:FD_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"----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_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_szBuffer,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(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_szServerAdr));pDlg->m_MSGS.InsertString(0,m_szBuffer);AsyncSelect(FD_READ);////提请一个“