Windows 套接字:背景

本文介绍 Windows 套接字的性质和目的。 本文还介绍了以下内容:

Windows 套接字规范为 Microsoft Windows 定义了二进制兼容的网络编程接口。 Windows套接字基于 Berkeley 软件分发中的 UNIX 套接字实现 (BSD,版本 4.3) 来自加利福尼亚大学的 Berkeley。 该规范包含 BSD 格式的套接字例程和特定于 Windows 的扩展。 使用 Windows 套接字可允许应用程序在符合 Windows 套接字 API 的任何网络之间进行通信。 在 Win32 上,Windows 套接字提供线程安全。

许多网络软件供应商支持网络协议下的 Windows 套接字,包括传输控制协议/Internet 协议 (tcp/ip) 、Xerox 网络系统 (XNS) 、数字设备公司的 DECNet 协议、Novell 公司的 Internet 数据包 Exchange/Sequenced 打包 Exchange (IPX/SPX) 等。 尽管现有 Windows 套接字规范定义了 tcp/ip 的套接字抽象,但任何网络协议都可以通过提供其自己的动态链接库版本 (DLL) 实现 Windows 套接字,从而符合 Windows 套接字。 用 Windows 套接字编写的商业应用程序的示例包括 X Windows 服务器、终端模拟器和电子邮件系统。

备注

Windows 套接字的目的是抽象掉底层网络,这样您就不必熟悉该网络,因此您的应用程序可以在支持套接字的任何网络上运行。 因此,本文档不讨论网络协议的详细信息。

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

Windows 套接字规范(Windows 套接字): Microsoft Windows 下的网络计算的开放接口现在版本1.1,是 tcp/ip 社区中大量个人和公司的开放网络标准,可自由使用。 套接字编程模型目前支持使用 Internet 协议套件的一个 "通信域"。 Windows SDK 中提供了该规范。

提示

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

套接字的定义

套接字是通信终结点,Windows 套接字应用程序通过它在网络中发送或接收数据包的对象。 套接字具有类型并且与正在运行的进程相关联,并且它可能具有一个名称。 目前,套接字通常仅与使用 Internet 协议套件的同一 "通信域" 中的其他套接字交换数据。

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

有两种套接字类型可用:

  • 流套接字

    流套接字提供没有记录边界的数据流:字节流。 保证流的传递和顺序正确,并无重复。

  • 数据报套接字

    数据报套接字支持面向记录的数据流,该数据流不保证被传递,也不能被序列化为已发送或无重复。

"有序" 表示按发送的顺序传送数据包。 "无重复" 表示只获取一次特定数据包。

备注

在某些网络协议(如 XNS)下,流可以面向记录,而不是以字节流的形式进行记录。 但在更常见的 TCP/IP 协议下,流是字节流。 Windows套接字提供独立于基础协议的抽象级别。

有关这些类型以及在哪些情况下使用哪种类型的套接字的信息,请参阅Windows 套接字:流套接字Windows 套接字:数据报套接字

套接字数据类型

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

套接字 数据类型在 Windows SDK 中有详细描述。 请参阅 Windows 套接字下的 "套接字数据类型和错误值"。

用于套接字

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

  • 客户端/服务器模型。

  • 对等方案,如消息传递应用程序。

  • 通过使接收应用程序将消息解释为函数调用,使远程过程调用 (RPC) 。

提示

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

有关详细信息,请参阅 Windows 套接字规范: ntohsntohlhtonshtonl。 另请参阅以下主题:

请参阅

MFC 中的 Windows 套接字