MFC中CAsyncSocket网络编程学习总结

本文详细介绍了在MFC中使用CAsyncSocket进行网络编程的学习过程,包括客户端和服务器端的代码实现。通过创建CAsyncSocket派生类并重载相关函数,实现了客户端与服务器端的连接、接收和发送数据。文章旨在帮助初学者快速掌握这一技术。
摘要由CSDN通过智能技术生成

MFC中CAsyncSocket网络编程学习总结

因为项目需要,最近学习了解了有关网络编程方面的知识,且重点学习了CAsyncSocket网络编程。和很多初学者一样,刚开始学习时通过在网上或书本上查阅资料,并通过模仿编写他们的代码进行尝试,但是尝试多次都以失败告终。一次偶然机会,在网上发现一篇文章(https://www.taodocs.com/p-108338347.html ),模仿其代码后最终实现了客户端和服务器端相互通信的功能,为了能让其他新手们能够少走弯路,决定写这篇文章,与大家分享自己的学习成果!
首先看看最后的效果,利用Visual Studio 2012编程软件,基于MFC对话框模式编写了客户端程序ChatClientDlg(界面如图1所示)和服务器端ChatServerDlg(界面如图2所示)程序。
图1 客户端界面
图2 服务器端界面
注意在创建程序过程中,需在应用程序向导中勾选“Windows套接字”选项(如图3所示)。
图3 勾选“Windows套接字”
若是忘记勾选此选项,可在相关文件中手动添加代码:
首先在“stdafx.h”中添加如下代码,
#include <afxsock.h> // MFC 套接字扩展
其次在“ChatClient.cpp”和“ChatServer.cpp”的InitInstance()函数中添加如下代码,
if (!AfxSocketInit())
{
AfxMessageBox(_T(“初始化错误!”));
return FALSE;
}

1、客户端代码

首先基于CAsyncSocket派生一个类CMySocket,并重载相关函数。
…“MySocket.h”…

class CMySocket : public CAsyncSocket
{
public:
CMySocket();
virtual ~CMySocket();
virtual void OnClose(int nErrorCode);
//virtual void OnSend(int nErrorCode);
virtual void OnReceive(int nErrorCode);
virtual void OnConnect(int nErrorCode);
};

…“MySocket.cpp”…
#include “stdafx.h”
#include “ChatClient.h”
#include “MySocket.h”
#include “ChatClientDlg.h”

CMySocket::CMySocket()
{
}

CMySocket::~CMySocket()
{
}

void CMySocket::OnClose(int nErrorCode)
{
// TODO: 在此添加专用代码和/或调用基类
CAsyncSocket::OnClose(nErrorCode);
if(nErrorCode==0)
{
CChatClientDlg p_Dlg;
p_Dlg=(CChatClientDlg
)::AfxGetMainWnd();
p_Dlg->close1();
}
}

// void CMySocket::OnSend(int nErrorCode)
// {
// // TODO: 在此添加专用代码和/或调用基类
// /if(nErrorCode==0)
// {
// CChatClientDlg p_Dlg;
// p_Dlg=(CChatClientDlg
)::AfxGetMainWnd();
// p_Dlg->send1();
// }
/
// CAsyncSocket::OnSend(nErrorCode);
// }

void CMySocket::OnReceive(int nErrorCode)
{
// TODO: 在此添加专用代码和/或调用基类
if(nErrorCode==0)
{
CChatClientDlg p_Dlg;
p_Dlg=(CChatClientDlg
)::AfxGetMainWnd();
p_Dlg->recv1();
}
CAsyncSocket::OnReceive(nErrorCode);
}

void CMySocket::OnConnect(int nErrorCode)
{
// TODO: 在此添加专用代码和/或调用基类
if(nErrorCode==0)
{
CChatClientDlg p_Dlg;
p_Dlg=(CChatClientDlg
)::AfxGetMainWnd();
p_Dlg->connect1();
}
CAsyncSocket::OnConnect(nErrorCode);
}

其次编写对话框程序:
…“ChatClientDlg.h”…
#pragma once
//#include “afxwin.h”
#include “MySocket.h”

// CChatClientDlg 对话框
class CChatClientDlg : public CDialogEx
{
// 构造
public:
CChatClientDlg(CWnd* pParent = NULL); // 标准构造函数
// 对话框数据
enum { IDD = IDD_CHATCLIENT_DIALOG };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
// 实现
protected:
HICON m_

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值