CSocket网络编程基础
发布日期:2021-06-29 04:15:28 浏览次数:2 分类:技术文章

本文共 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:CStocket简介
下一篇:Effective C++之条款3,条款4笔记整理

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月17日 09时30分34秒