Winsock 入门

本部分是 Windows 套接字编程入门的分步指南。 它旨在提供对基本 Winsock 函数和数据结构及其协同工作方式的理解。

本主题中用于演示的客户端和服务器应用程序是一个非常基本的客户端和服务器。 Microsoft Windows 软件开发工具包 (SDK) 随附的示例中包含了更多高级代码示例。

对于客户端和服务器应用程序,前几个步骤是相同的。

以下文章介绍了创建 Winsock 客户端应用程序的剩余步骤。

以下文章介绍了创建 Winsock 服务器应用程序的剩余步骤。

这些基本示例的完整源代码。

高级 Winsock 示例应用

GitHub 上提供了多个更高级的 Winsock 客户端和服务器示例应用 。 它们按性能从高到低的顺序在此处列出,并位于以下目录中:

  • Iocp

    该文件夹包含三个使用 I/O 完成端口的示例程序。 程序包括:使用 WSAAccept 函数的 Winsock 服务器iocpserver;使用 AcceptEx 函数的 Winsock 服务器iocpserverex;以及用于测试这些服务器之一的简单多线程 Winsock 客户端iocpclient

    服务器程序支持多个客户端使用 TCP/IP 进行连接,并发送服务器随后回显到客户端的任意大小的数据缓冲区。 为方便起见,开发了一个简单的客户端程序 iocpclient,用于连接并持续将数据发送到服务器,以使用多个线程来施加压力。 使用 I/O 完成端口的 Winsock 服务器提供最高性能。

  • 重叠

    此文件夹包含使用重叠 I/O 的示例服务器程序。 示例程序使用 AcceptEx 函数和重叠 I/O 有效地处理来自客户端的多个异步连接请求。 服务器使用 AcceptEx 函数对单线程 Win32 应用程序中的不同客户端连接进行多路复用。 使用重叠 I/O 可实现更大的可伸缩性。

  • WSAPoll

    此文件夹包含演示如何使用 WSAPoll 函数的基本示例程序。 组合的客户端和服务器程序是非阻塞的,并使用 WSAPoll 函数确定何时可以在不阻止的情况下发送或接收。 此示例用于说明,不是高性能服务器。

  • 简单

    此文件夹包含三个演示服务器使用多个线程的基本示例程序。 这些程序包括:一个简单的 TCP/UDP 服务器; simples一个仅限 TCP 的服务器, simples_ioctl它使用 Win32 控制台应用程序中的 select 函数来支持多个客户端请求;以及用于测试服务器的客户端 TCP/UDP 程序 simplec。 服务器演示了如何使用多个线程来处理多个客户端请求。 此方法存在可伸缩性问题,因为会为每个客户端请求创建单独的线程。

  • accept

    此文件夹包含基本示例服务器和客户端程序。 服务器演示如何使用 select 函数使用非阻止接受,或使用 WSAAsyncSelect 函数使用异步接受。 此示例用于说明,不是高性能服务器。