用户可以看到程序调用函数WSAAsyncSelect()将监听套接字设置为异步模式
当有相关的套接字事件发生时
程序发送自定义消息WM_SOCKT
在工程头文件中定义
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#define WM_SOCKT WM_USER+1 //定义自定义消息
class CMyDlg : public CDialog
{
... //省略部分代码
}
用户在头文件中
除了定义自定义消息以外
还需要定义消息响应函数
class CMy2Dlg : public CDialog
{
public:
CMy2Dlg(CWnd* pParent = NULL);
CString ip;
SOCKET s; //服务器监听套接字
SOCKET s1; //服务器数据收发套接字
int port;
HFILE hfile;
char buff[100];
CString str;
char str12[100];
HWND h;
protected:
virtual void DoDataExchange(CDataExchange* pDX);
public:
HICON m_hIcon;
sockaddr_in addr;
WSADATA data;
int i;
int n;
afx_msg void Onsockt1(WPARAM wParam,LPARAM lParam);
//套接字消息响应函数
afx_msg void OnTimer(UINT nIDEvent);
afx_msg void OnClose();
... //省略部分代码
}
然后 用户还需要在消息映射宏中添加套接字消息的消息映射项
... //省略部分代码
BEGIN_MESSAGE_MAP(CMy2Dlg, CDialog)
//{{AFX_MSG_MAP(CMy2Dlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON2,OnButton2)
ON_BN_CLICKED(IDC_BUTTON3,OnButton3)
ON_BN_CLICKED(IDC_BUTTON1,OnButton1)
ON_MESSAGE(WM_SOCKT,Onsockt1) //添加消息映射项
ON_WM_TIMER()
ON_WM_CLOSE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
... //省略部分代码