Windows套接字:块

本文和准则手册在 Windows 套接字编程说明若干问题。本文包含块。在其他文章中的问题包括: Windows 套接字:字节顺序Windows 套接字:将字符串

如果从类 CAsyncSocket使用或派生,将需要管理这些问题。如果从类 CSocket使用或派生, MFC 为您管理它们。

套接字可以在 “块模式”或 “非阻塞模式”。套接字的功能块 (或同步) 模式的不返回直到它们可以完成它们的事件。这称为块,因为函数调用的套接字无法执行任何 —阻止 —直到调用返回。为 接收 成员函数的调用,例如,可能需要随机很长时间才能完成,它在等待发送的应用程序发送 (这是,如果使用 CSocket,或者使用块的 CAsyncSocket )。如果 CAsyncSocket 对象在直接非阻塞操作异步模式 (),调用返回和当前错误代码下,可检索与 获得最后一个错误 成员函数,是 WSAEWOULDBLOCK,指示调用将阻止使其不立即返回由于该模式。(CSocket 从不返回 WSAEWOULDBLOCK。类管理块您的。)

套接字行为不同。 32 位和 64 位操作系统下 (例如 Windows 95 或 Windows 98) 比在 16 位操作系统下 (例如 Windows 3.1)。不同于 16 位操作系统, 32 位和 64 位操作系统上使用抢先多任务并提供多线程。在 32 位和 64 位操作系统下,可以在单独的辅助线程可以将您的套接字。在线程的一个套接字会阻塞,而不会干扰其他事件在应用程序和,而无需花费计算阻塞时间。有关多线程编程的信息,请参见中的文章 多线程处理

说明说明

在多线程应用程序,则可以使用 CSocket 块的谓词简化您的编程,而不影响用户界面的响应能力。通过处理在处理在替换线程的主线程和 CSocket 的用户交互,可以分隔这些逻辑运算。在不支持的多线程应用程序,则必须合并和处理这两个事件为单个线程,在长同步事件过程中,通常意味着使用 CAsyncSocket ,因此可以处理通信请求按需或重写的 CSocket::OnMessagePending 以处理用户操作。

其余部分此讨论用于针对 16 位操作系统的程序员:

通常,因此,如果您使用 CAsyncSocket,应避免使用停滞操作和异步操作。,例如,在异步操作,从的点在调用 接收后接收 WSAEWOULDBLOCK 错误代码可以等待,直到您的 OnReceive 成员函数调用通知您可以重新读取。异步调用通过调用您的套接字的相应回调来通知函数执行,如 OnReceive

在 windows 下,块调用视为错误约定。默认情况下, CAsyncSocket 支持异步调用,使用回调来通知,因此,您必须管理块。类 CSocket,另一方面,是同步的。它发送 windows 消息和管理块您的。

有关阻塞的更多信息,请参见 Windows 套接字规范。有关 " on " 功能的更多信息,请参见 Windows 套接字:存储通知Windows 套接字:从派生的存储类

有关更多信息,请参见:

请参见

参考

CAsyncSocket::OnSend

概念

在MFC的Windows套接字