與 Windows Sockets 1.1 搭配使用的原始 include 檔案是 Winsock.h 頭檔。 為了簡化以 Berkeley UNIX 套接字為基礎的現有原始程式碼移植到 Windows 套接字,建議為 Winsock 1.1 提供數個與標準 UNIX include 檔案相同的內含檔案(例如,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 Protocol-Specific 附錄檔中所介紹的定義,其中包含用來擷取 IP 位址的較新函式和結構。 其中包括 getaddrinfo 和 getnameinfo 系列函式,這些函式同時提供 IPv4 或 IPv6 位址的名稱解析。 只有在應用程式需要這些與IP無關的命名函式時,才需要 Ws2tcpip.h 頭檔。
Mswsock.h 頭檔包含 Windows Sockets 2 Microsoft特定擴展名的定義(例如,TransmitFile、AcceptEx和 ConnectEx)。 除非應用程式使用這些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;
}
相關主題