Windows 套接字:使用类
本文介绍如何使用类 CAsyncSocket
。 此类将 Windows 套接字 API 封装在非常低的水平。
CAsyncSocket
供了解网络通信但希望回调方便通知网络事件的程序员使用。 根据此假设,本文仅提供基本说明。 如果你希望 Windows 套接字能够轻松地在 MFC 应用程序中处理多个网络协议,但不想牺牲灵活性,则应考虑使用 CAsyncSocket
。 你可能还觉得,通过更直接地编程通信,你可以比使用更常规的类 CSocket
替代模型更直接地编程来提高效率。
CAsyncSocket
记录在 MFC 参考中。 视觉C++还提供位于 Windows SDK 中的 Windows 套接字规范。 详细信息留给你。 视觉C++不提供示例 CAsyncSocket
应用程序。
如果你对网络通信并想要一个简单的解决方案不了解,请将类 CSocket
与对象一 CArchive
起使用。 有关详细信息 ,请参阅 Windows 套接字:将套接字与存档配合使用 。
本文介绍:
创建和使用
CAsyncSocket
对象。
创建和使用 CAsyncSocket
使用 CAsyncSocket
构造对象
CAsyncSocket
并使用该对象创建基础SOCKET
句柄。创建套接字遵循两阶段构造的 MFC 模式。
例如:
CAsyncSocket sock; sock.Create(); // Use the default parameters
-或-
CAsyncSocket *pSocket = new CAsyncSocket; int nPort = 27; pSocket->Create(nPort, SOCK_DGRAM);
上面的第一个构造函数在堆栈上创建对象
CAsyncSocket
。 第二个构造函数在堆上创建一个CAsyncSocket
。 上面的第一次Create
调用使用默认参数来创建流套接字。 第二Create
个调用创建具有指定端口和地址的数据报套接字。 (可以将任Create
一版本与任一构造方法一起使用。要
Create
使用以下参数:“port”:短整数。
对于服务器套接字,必须指定端口。 对于客户端套接字,通常接受此参数的默认值,以便 Windows 套接字选择端口。
套接字类型:
SOCK_STREAM
(默认值)或SOCK_DGRAM
。套接字“地址”,例如
"ftp.microsoft.com"
或"128.56.22.8"
。这是网络上的 Internet 协议 (IP) 地址。 可能始终依赖于此参数的默认值。
Windows 套接字中介绍了“端口”和“套接字地址”术语 :端口和套接字地址。
如果套接字是客户端,请使用
将套接字对象连接到服务器套接字 。 -或-
如果套接字是服务器,请将套接字设置为开始侦听(使用
CAsyncSocket::Listen
)从客户端进行连接尝试。 收到连接请求后,请接受该请求CAsyncSocket::Accept
。接受连接后,可以执行验证密码等任务。
注释
Accept
成员函数会引用一个新的空CSocket
对象作为其参数。 必须先构造此对象,然后才能调用Accept
。 如果此套接字对象超出范围,连接将关闭。 不要调用Create
此新的套接字对象。 有关示例,请参阅 Windows 套接字:作序列一文。通过调用
CAsyncSocket
封装 Windows 套接字 API 函数的对象的成员函数来与其他套接字进行通信。请参阅 MFC 参考中的 Windows 套接字规范和类
CAsyncSocket
。CAsyncSocket
销毁对象。如果在堆栈上创建了套接字对象,则在包含函数超出范围时调用其析构函数。 如果在堆上创建了套接字对象,则使用
new
运算符负责使用该delete
运算符销毁对象。析构函数在销毁对象之前调用对象的
Close
成员函数。
有关代码中此序列的示例(实际上适用于 CSocket
对象),请参阅 Windows 套接字:作序列。
你的职责 CAsyncSocket
创建类 CAsyncSocket
的对象时,该对象封装 Windows SOCKET
句柄并提供该句柄上的作。 使用 CAsyncSocket
时,必须处理直接使用 API 时可能遇到的所有问题。 例如:
“阻止”方案。
发送和接收计算机之间的字节顺序差异。
在 Unicode 和多字节字符集(MBCS)字符串之间进行转换。
有关这些术语的定义和其他信息,请参阅 Windows 套接字:阻止、 Windows 套接字:字节排序、 Windows 套接字:转换字符串。
尽管存在这些问题,但如果应用程序需要获得的所有灵活性和控制,则类 CAsyncSocket
可能是正确的选择。 如果没有,请考虑改用类 CSocket
。
CSocket
隐藏许多详细信息:它会在阻止调用期间泵送 Windows 消息,并为你提供访问权限 CArchive
,从而为你管理字节顺序差异和字符串转换。
有关详细信息,请参见: