本節是開始使用 Windows Sockets 程式設計的逐步指南。 其設計目的是要瞭解基本的 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 控制台應用程式中選取 函式,以支援多個用戶端要求:和用戶端 TCP/UDP 程式,simplec
,用於測試伺服器。 伺服器示範如何使用多個線程來處理多個用戶端要求。 此方法有延展性問題,因為會針對每個用戶端要求建立個別線程。接受
此資料夾包含基本範例伺服器和客戶端程式。 伺服器示範使用 select 函式來使用非封鎖接受,或使用 WSAAsyncSelect 函式進行異步接受。 此範例僅供說明,且不是高效能伺服器。