MFC CAsyncSocket类基本使用 - 1

win7, VC6;新建一个对话框工程;菜单选择:插入 - 类;先来做 CAsyncSocket类 作为客户端;

MFC CAsyncSocket类基本使用 - 1

新建类;类的类型为MFC类,基类为CAsyncSocket;如果使用mfc实现套接字,一般要从mfc提供的套接字类继承出自己的类,否则不好使;

MFC CAsyncSocket类基本使用 - 1

生成相应类文件;

MFC CAsyncSocket类基本使用 - 1

类向导里为CMysyncsock类添加OnConnect消息处理函数;

MFC CAsyncSocket类基本使用 - 1

MFC CAsyncSocket类基本使用 - 1

添加OnSend消息处理函数;

MFC CAsyncSocket类基本使用 - 1

详细的MS参考和示例代码;

    https://docs.microsoft.com/zh-cn/cpp/mfc/reference/casyncsocket-class?view=msvc-160#casyncsocketcreate

一个讲的详细些的mfc套接字教程;

    https://wenku.baidu.com/view/1eda781c6bd97f192279e9de.html

使用CAsyncSocket类的基本步骤;

MFC CAsyncSocket类基本使用 - 1

 

CMysyncsock类的头文件需要包含,
    #include <afxSock.h>

为CMysyncsock类添加三个公共成员;

class CMysyncsock : public CAsyncSocket
{
// Attributes
public:
    CString  m_sendBuffer;   //for async send
    int      m_nBytesSent;
    int      m_nBytesBufferSize;

OnConnect如下; CAsyncSocket类作为客户端,去连接服务端,进行了连接动作以后,mfc框架会自动调用下面的OnConnect函数,把错误码传进来;如果连接成功,错误码为0;

void CMysyncsock::OnConnect(int nErrorCode) 
{
	// TODO: Add your specialized code here and/or call the base class
	if(nErrorCode==0)
	{
		AfxMessageBox("客户端连接服务端成功!!!");
	}
	else
	{
		AfxMessageBox("客户端连接服务端失败!!!");
	}

	CAsyncSocket::OnConnect(nErrorCode);
}

对话框类cpp文件包含:#include "Mysyncsock.h"

对话框类cpp文件的初始化对话框函数中,初始化套接字;

// TODO: Add extra initialization here
	if (!AfxSocketInit())
	 {
	  AfxMessageBox("套接字初始化失败!");
	  return FALSE;
	 }

按钮1的处理代码;    工程的名称是sock3;

void CSock3Dlg::OnButton1() 
{
	// TODO: Add your control notification handler code here
	try{
		CMysyncsock *pSocket = new CMysyncsock();
		//pSocket->Create();
		pSocket->Create(0, SOCK_STREAM, FD_READ | FD_WRITE | FD_CONNECT | FD_CLOSE, NULL);
		CString strret;
		BOOL ret;

		if (pSocket == NULL)
		{
			//WriteLog("SOCKET没有初始化");
			AfxMessageBox("SOCKET没有初始化");
			return;
		}
		ret=pSocket->Connect("127.0.0.1", 9003);
	}
	catch(CException e)
	{
		TCHAR   szError[1024];   
		e.GetErrorMessage(szError,1024);
		AfxMessageBox(szError); 
	}
}

启动 nc,作为服务端监听9003端口;

MFC CAsyncSocket类基本使用 - 1

nc的使用见,

    https://blog.csdn.net/bcbobo21cn/article/details/106632720

然后启动程序;点击按钮之后如下;

MFC CAsyncSocket类基本使用 - 1

    这样客户端程序就连接上了服务端;

    点击按钮时,ret=pSocket->Connect("127.0.0.1", 9003) 这句被执行;连接执行了以后,mfc框架自己调用 void CMysyncsock::OnConnect(int nErrorCode) {...} 函数;

既然连上了,先简单发送一下看,客户端发;

在 ret=pSocket->Connect("127.0.0.1", 9003) 后添加2句发送代码;

        char sendstr[50] = "ABCDEF";
        pSocket->Send((unsigned char*)sendstr,6);

nc端不会收到,还只是连接上;

如果使用 CAsyncSocket类 ,能提供一定的方便和方便编写增强功能代码;但有一定量的东西要熟悉;

上一篇:MFC是什么


下一篇:C++ 二维数组示例 - 控制台和MFC版