包含檔案
與 Windows Sockets 1.1 搭配使用的原始 Include 檔案是 Winsock.h 標頭檔。 為了簡化以 Berkeley UNIX 通訊端為基礎的現有原始程式碼移植到 Windows 通訊端,建議使用數個與標準 UNIX include 檔案相同的 Include 檔案來提供適用于 Winsock 1.1 的 Windows Sockets 開發工具組( 例如 sys/socket.h 和 arpa/inet.h 標頭檔)。 不過,這些類似名稱的 Winsock 標頭檔只包含指示詞來包含 Winsock2.h 標頭檔。
發行 Windows Sockets 2 時,與 Windows Sockets 搭配使用的主要 Include 檔案已重新命名為 Winsock2.h 。 Winsock 1.1 的較舊原始 Winsock.h 標頭檔也會保留,以便與繼承應用程式相容。 自 Windows 2000 發行以來,Winsock 1.1 相容應用程式的開發已過時。 所有應用程式現在都應該在 Winsock 應用程式來源檔案中使用 include Winsock2.h 指示詞。
Winsock2.h 標頭檔包含大部分的 Winsock 函式、結構和定義。 Ws2tcpip.h 標頭檔包含 WINSock 2 通訊協定特定附錄檔中所介紹的定義,其中包含用來擷取 IP 位址的較新函式和結構。 其中包括 getaddrinfo 和 getnameinfo 系列函式,可為 IPv4 或 IPv6 位址提供名稱解析。 只有在應用程式需要這些與 IP 無關的命名函式時,才需要 Ws2tcpip.h 標頭檔。
Mswsock.h 標頭檔包含 Windows Sockets 2 的 Microsoft 特定延伸模組定義( 例如 TransmitFile 、 AcceptEx 和 連線Ex )。 除非應用程式使用這些 Microsoft 特定延伸模組,否則通常不需要 Mswsock.h 標頭檔。
Winsock2.h 標頭檔在內部包含來自 Windows.h 標頭檔的核心元素 ,因此 Winsock 應用程式中的 Windows.h 標頭檔通常沒有 #include 行 。 如果 Windows.h 標頭檔需要 #include 行,則這應該前面加上 #define WIN32_LEAN_AND_MEAN 宏。 基於歷史原因, Windows.h 標頭預設為包含 Windows Sockets 1.1 的 Winsock.h 標頭檔。 Winsock.h 標頭檔中的 宣告將會與 Windows Sockets 2 所需的 Winsock2.h 標頭檔中的宣告 衝突。 WIN32_LEAN_AND_MEAN宏可防止 Windows.h 標頭包含 Winsock.h 。 說明這一點的範例如下所示。
#include <winsock2.h>
#include <ws2tcpip.h>
#include <stdio.h>
#pragma comment(lib, "Ws2_32.lib")
int main() {
return 0;
}
相關主題