跳转到内容

通信网络/伯克利套接字 API

来自维基教科书,开放的书籍,开放的世界

这里会提到,而且可能还会在本章节的每个子章节中提到,这些章节的意图,更不用说整本书的意图,就是不是为了教授网络编程。这些章节的目的是提供一个快速而简陋的可用函数列表,并展示它们是如何与我们之前关于网络的讨论相吻合的。如需了解更多信息,建议读者查看编程书架上的网络概念。

本页面并非旨在深入讨论 C 套接字编程。相反,本页面希望成为 C 的快速而简陋的概述,以巩固我们之前讨论的一些网络概念。

C 和 Unix

[编辑 | 编辑源代码]

本节将(简要)讨论如何在 UNIX 环境中使用 C 编程语言编写套接字应用程序。下一节将讨论 Windows 下套接字编程的不同之处,并将解释如何将套接字代码从 UNIX 移植到 Windows 平台。

C 和 Windows (Winsock)

[编辑 | 编辑源代码]

在 Windows 中编程套接字几乎与在 UNIX 中编程套接字相同,只是 Windows 需要一些不同的添加

  1. 使用 <Winsock.h>
  2. 链接到 ws2_32.dll
  3. 使用 WSAStartup( ) 初始化 Winsock

前两点不言而喻,实际上取决于你的编译器,这里不再赘述。但是,第三点需要解释一下。在我们使用任何套接字函数之前,我们需要初始化 Winsock(否则它们都会返回错误)。要初始化,我们必须创建一个新的数据对象,并将其传递给初始化例程

WSADATA wd;

我们必须将指向该结构体的指针,以及 Winsock 所需的版本号,传递给该函数

WSAStartup(MAKEWORD(2, 0), &wd);

MAKEWORD 宏接受两个数字,一个主版本号(上面的 2),和一个次版本号(上面的 0)。例如,要使用 Winsock2.0,我们使用 MAKEWORD(2, 0)。要使用 Winsock1.1,我们使用 MAKEWORD(1, 1)。

此外,值得注意的是,Windows 不允许使用通用的 unix read( )write( ) 函数来读取和写入套接字。在 Windows 中,你应该使用 recv( )send( ) 函数。此外,熟悉 Windows 的人应该知道,Windows 将套接字视为 I/O 句柄,因此它们也可以使用 Windows 通用的读写函数 ReadFile( )WriteFile( ) 访问。

Winsock,以及 Windows 一般来说,也拥有许多其他可在 winsock.dll 中,以及其他 dll(如 wininet.dll)中使用的函数,这些函数将促进更高层次的互联网操作。

其他套接字实现

[编辑 | 编辑源代码]

进一步阅读

[编辑 | 编辑源代码]

如需全面了解 C 中的 Berkeley 套接字 API,请参阅 UNIX 网络章节,该章节出自 C 编程

华夏公益教科书