Windows 套接字:背景

本文介绍 Windows 套接字的性质及用途。 本文还介绍:

Windows 套接字规范定义用于 Microsoft Windows 的二进制兼容网络编程接口。 Windows 套接字基于加利福尼亚大学伯克利分校的 Berkeley Software Distribution(BSD,4.3 版)中的 UNIX 套接字实现。 规范包含 BSD 样式套接字例程和特定于 Windows 的扩展。 使用 Windows 套接字,你的应用程序可以跨符合 Windows 套接字 API 的任何网络进行通信。 在 Win32 上,Windows 套接字提供线程安全性。

许多网络软件供应商都支持网络协议下的 Windows 套接字,包括传输控制协议/Internet 协议 (TCP/IP)、Xerox 网络系统 (XNS)、数字设备公司的 DECNet 协议、Novell 公司的 Internet 数据包交换/顺序包交换 (IPX/SPX) 等。 尽管现在的 Windows 套接字规范定义了 TCP/IP 的套接字抽象,不过任何网络协议都可通过提供其实现 Windows 套接字的自身版本的动态链接库 (DLL) 来遵循 Windows 套接字。 使用 Windows 套接字编写的商业应用程序示例包括 X Windows 服务器、终端仿真器和电子邮件系统。

注意

Windows 套接字的目的是抽象出基础网络,这样就不必了解该网络,从而使你的应用程序可在支持套接字的任何网络上运行。 因此,本文档不讨论网络协议的细节。

Microsoft 基础类库 (MFC) 提供两个类来支持使用 Windows 套接字 API 进行编程。 其中一个类是 CSocket,它提供高级别抽象来简化网络通信编程。

Windows 套接字规范“Windows 套接字:Microsoft Windows 下用于网络计算的开放接口(现在是版本 1.1)”是由 TCP/IP 社区中的一大群个人和公司指定的一项开放网络标准,可免费使用。 套接字编程模型使用 Internet 协议套件,目前支持一个“通信域”。 该规范在 Windows SDK 中可用。

提示

由于套接字使用 Internet 协议套件,因此它们是支持“信息高速公路”上 Internet 通信的应用程序的首选路由。

套接字定义

套接字是通信终结点,即 Windows 套接字应用程序经由它通过网络发送或接收数据包的对象。 套接字具有一种类型并关联正在运行的进程,而且它可能有名称。 目前,套接字通常只与处于同一“通信域”的其他套接字交换数据,该通信域使用 Internet 协议套件。

这两种套接字都是双向的;它们都是可以同时在两个方向上通信的数据流(全双工)。

有两种类型的套接字可用:

  • 流套接字

    流套接字提供没有记录边界的数据流:字节流。 保证交付流,并保证正确排序流且不重复流。

  • 数据报套接字

    数据报套接字支持面向记录的数据流,该数据流不能保证交付,也不能作为已发送或未重复进行排序。

“排序”是指数据包按照发送的顺序交付。 “未重复”是指一次只能获取一个特定数据包。

注意

在某些网络协议下(如 XNS),流可以面向记录(作为记录流而不是字节流)。 但是,在更多常见的 TCP/IP 协议下,流是字节流。 Windows 套接字提供与基础协议无关的抽象级别。

若要了解这些类型,并了解在哪些情况下使用哪种套接字,请参阅 Windows 套接字:流套接字Windows 套接字:数据报套接字

SOCKET 数据类型

每个 MFC 套接字对象都封装 Windows 套接字对象的句柄。 此句柄的数据类型是 SOCKET。 SOCKET 句柄类似于窗口的 HWND。 MFC 套接字类提供封装句柄上的操作。

Windows SDK 中详细描述了 SOCKET 数据类型。 请参阅 Windows 套接字下的“套接字数据类型及错误值”。

套接字使用

套接字在至少三个通信上下文中特别有用:

  • 客户端/服务器模型。

  • 对等方案(例如消息传递应用程序)。

  • 通过让接收应用程序将消息解释为函数调用来进行远程过程调用 (RPC)。

提示

使用 MFC 套接字的理想案例是在编写通信的两端时:在两端使用 MFC。 有关此主题的详细信息,包括在与非 MFC 应用程序通信时如何管理案例,请参阅 Windows 套接字:字节顺序

有关详细信息,请参阅 Windows 套接字规范:ntohs、ntohl、htons、htonl。 此外,请参阅以下主题:

另请参阅

MFC 中的 Windows 套接字