win7, VC6;新建一个对话框工程;菜单选择:插入 - 类;先来做 CAsyncSocket类 作为客户端;
新建类;类的类型为MFC类,基类为CAsyncSocket;如果使用mfc实现套接字,一般要从mfc提供的套接字类继承出自己的类,否则不好使;
生成相应类文件;
类向导里为CMysyncsock类添加OnConnect消息处理函数;
添加OnSend消息处理函数;
详细的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类的基本步骤;
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端口;
nc的使用见,
https://blog.csdn.net/bcbobo21cn/article/details/106632720
然后启动程序;点击按钮之后如下;
这样客户端程序就连接上了服务端;
点击按钮时,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类 ,能提供一定的方便和方便编写增强功能代码;但有一定量的东西要熟悉;