接受 Windows 通訊端 2 (連線)

通訊端接聽連線之後,程式必須處理該通訊端上的連線要求。

接受通訊端上的連線

  1. 建立稱為 ClientSocket 的暫存 SOCKET 物件,以接受來自用戶端的連線。

    
    SOCKET ClientSocket;
    
    
    
  2. 一般而言,伺服器應用程式的設計目的是要接聽來自多個用戶端的連線。 針對高效能伺服器,通常會使用多個執行緒來處理多個用戶端連線。

    有數種不同的程式設計技術使用 Winsock,可用來接聽多個用戶端連線。 一種程式設計技巧是建立連續迴圈,以使用 接聽 函式檢查連線要求, (請參閱在 通訊端) 上接聽 。 如果發生連線要求,應用程式會呼叫 acceptAcceptExWSAAccept 函式,並將工作傳遞給另一個執行緒來處理要求。 有數種其他程式設計技術。

    請注意,這個基本範例非常簡單,而且不會使用多個執行緒。 此範例也會只接聽並只接受單一連線。

    
    ClientSocket = INVALID_SOCKET;
    
    // Accept a client socket
    ClientSocket = accept(ListenSocket, NULL, NULL);
    if (ClientSocket == INVALID_SOCKET) {
        printf("accept failed: %d\n", WSAGetLastError());
        closesocket(ListenSocket);
        WSACleanup();
        return 1;
    }
    
    
    
  3. 接受用戶端連線時,伺服器應用程式通常會將上述範例程式) 代碼中的 ClientSocket 變數 (接受的用戶端通訊端傳遞至背景工作執行緒或 I/O 完成埠,並繼續接受其他連線。 在此基本範例中,伺服器會繼續下一個步驟。

    有一些其他程式設計技術可用來接聽和接受多個連線。 其中包括使用 selectWSAPoll 函式 。 Microsoft Windows 軟體發展工具組隨附的 進階 Winsock 範例 會說明其中一些各種程式設計技術的範例, (SDK) 。

    注意

    在 Unix 系統上,伺服器的常見程式設計技術是讓應用程式接聽連線。 接受連接時,父進程會呼叫 分支 函式,以建立新的子進程來處理用戶端連線,從父代繼承通訊端。 Windows 不支援此程式設計技術,因為不支援 分支 函式。 這項技術通常不適合高效能伺服器,因為建立新進程所需的資源遠大於執行緒所需的資源。

     

下一個步驟: 在伺服器上接收和傳送資料

使用 Winsock 消費者入門

Winsock 伺服器應用程式

接聽通訊端