本文共 1660 字,大约阅读时间需要 5 分钟。
CSocket类是CAsyncSocket类的派生类,它继承了Windows Socket API封装函数。它实现了比CAsyncSocket类对Windows Sockets更高层的抽象。它与CSocketFile类和CArchive类合作完成对数据的发送、接收的管理,并提供了对于同步操作CArchive对象非常重要的阻塞功能,使程序员在管理数据的发送和接收的工作变得简单。本篇只介绍如何使用CSocket类实现网络连接,更多内容请见后续更新。
简要步骤:
1服务器端:
(1)创建CSocket对象
(2)调用CSocket::Create()函数
(3)调用CSocket::Listen()进行监听
(4)如有客户端连接则调用CSocket::Accept()进行接收连接。(注:此函数无需人为调用,CSocket类会自动调用)
2客户端:
(1)创建CSocket对象
(2)调用CSocket::Create()函数
(3)调用CSocket::Connect()函数进行连接。
详细步骤:
1服务器端:
(1)首先从CSocket类继承一个新类CListeningSocket
(2)改写构造函数
CListeningSocket(Chorse_clientDlg* pDlg = NULL): m_pDlg(pDlg) { } //pDlg为欲在其中建立网络连接的类对象
(3)改写CListeningSocket类接收函数
void CListeningSocket::OnAccept(int nErrorCode) { // TODO: 在此添加专用代码和/或调用基类 m_pDlg->OnAccept(); CSocket::OnAccept(nErrorCode); } (4)为Chorse_clientDlg类添加函数
//此函数在客户端请求连接时,自动被调用
void Chorse_clientDlg::OnAccept(void) { CClientSocket* pSocket = new CClientSocket(this); if(m_pSocket->Accept(*pSocket)) {} else delete m_pSocket; }
在Chorse_clientDlg::OnInitDialog()中添加:
BOOL Chorse_clientDlg::OnInitDialog() { CDialog::OnInitDialog();
................//此处略去不相关代码
// TODO: 在此添加额外的初始化代码 m_pSocket = new CListeningSocket(this); if(!m_pSocket->Create(30512)) return FALSE; if(!m_pSocket->Listen()) { m_pSocket->Close(); return FALSE; } return TRUE; // 除非将焦点设置到控件,否则返回 TRUE }
2客户端:
(1)首先从CSocket类继承一个新类CChatSocket
(2)改写构造函数
CChatSocket::CChatSocket(CAddHostDlg* pDlg) : m_pDlg(pDlg) { } //pDlg为欲在其中建立网络连接的类对象
(3)建立连接请求
m_socket = new CChatSocket(this); if(!m_socket->Create()) { MessageBox(_T("无法建立套接字")); return; } else if(!m_socket->Connect(strHostAddress, 30512)) { MessageBox(_T("无法建立连接")); m_socket->Close(); return; } //至此,两端连接已建立,在此基础上可进行网络通信。
转载地址:https://blog.csdn.net/zh634455283/article/details/7986372 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!