OnReceive
这里重点介绍如何标准的组织一个OnReceive函数的调用,以避免未来出现不知名问题时不知道哪些正确:
1.建立一个最简单的CSocket新类:
class CMySocket : public CSocket
{
public:
virtual void OnReceive(int nErrorCode);
};
2.在MFC做最起码的定义:
// CMFCOnReceiveDlg 对话框
class CMFCOnReceiveDlg : public CDialogEx
{
// 构造
public:
CMFCOnReceiveDlg(CWnd* pParent = nullptr); // 标准构造函数
// 对话框数据
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_MFC_ONRECEIVE_DIALOG };
#endif
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
// 实现
protected:
HICON m_hIcon;
// 生成的消息映射函数
virtual BOOL OnInitDialog();
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
public:
CMySocket m_socket;
CButton CONNECT_B;
afx_msg void OnBnClickedconnect();
};
在对话框类中添加一个自建CSocket类,并添加一个按钮用来做连接(使用类向导默认消息映射映射按钮):
void CMFCOnReceiveDlg::OnBnClickedconnect()
{
// TODO: 在此添加控件通知处理程序代码
AfxMessageBox(_T("begin!"));
m_socket.Create(1234, SOCK_DGRAM, _T("192.168.1.102"));
}
点击按钮进行连接,由于CSocket的create函数本身就已经调用了bind,所以无需再bind一次。
void CMySocket::OnReceive(int nErrorCode)
{
AfxMessageBox(_T("receive message"));
CSocket::OnReceive(nErrorCode);
}
这样便写出了一个最简单的消息回调函数。
按照如下方式使用网络调试助手:
确保你再网络调试助手中的远程主机与create出来的地址、端口一致后,点击发送。
成功获取数据。