两年前,用过这个MFC网络异步通信类,稀里糊涂的。经过两年的积累,终于对程序结构方面有所了解,方才理解这些类的使用方法。
当然网络通信原理得了解一些,线程进程也得了解一些,加上MSDN的解释就可以了。
首先,建立MFC对话框,记得选中,windows socket,这样在应用程序初始化时,会执行socket初始化AfxSocketInit()。
接着新建类CMySocket:public CAsyncSocket,重写OnAccept(), OnReceive(), OnClose() 三个事件。
MySocket.h文件
class CMySocket : public CAsyncSocket
{
public:
CMySocket();
virtual ~CMySocket();
void OnAccept(int nErrorCode);
void OnReceive(int nErrorCode);
void OnClose(int nErrorCode);
};
MySocket.cpp文件,构造函数与析构函数没有做什么事情
// CMySocket member functions
void CMySocket::OnAccept(int nErrorCode)
{
CMySocket *pMySocket = new CMySocket();
// 将接受的客户端套接字,储存到新建的CMySocket类中
this->Accept((CAsyncSocket &)*pMySocket);
// 新的套接字注册接收与关闭事件
pMySocket->AsyncSelect(FD_READ | FD_CLOSE);
}
void CMySocket::OnReceive(int nErrorCode)
{
const int bufferSize = 1024;
char buff[bufferSize];
memset(buff, 0, sizeof(buff));
this->Receive(buff, bufferSize);
}
void CMySocket::OnClose(int nErrorCode)
{
this->Close();
delete(this);
}
在对话框类中,声明CMySocket m_sock;
在对话框的初始化函数中,执行
m_sock.Create(1234, SOCK_STREAM, FD_ACCEPT); // 绑定端口1234,流协议(TCP),注册Accept事件m_sock.Listen(); // 监听至此CAsyncSocket 可以正常运转,完成简单的被动接收,再发送功能