跳轉到內容

通訊網路/伯克利套接字 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 程式設計

華夏公益教科書