Socket 如何運作
Socket 通常用於用戶端和伺服器互動。 一般系統配置會將伺服器放在一部機器上,而用戶端則放在其他機器上。 用戶端會連接至伺服器,交換資訊,然後中斷連線。
Socket 具有一般事件流程。 在連線導向用戶端至伺服器模型中,伺服器處理程序上的 Socket 會等待來自用戶端的要求。 若要這樣做,伺服器會先建立 (連結) 用戶端可用來尋找伺服器的位址。 當建立位址時,伺服器會等待用戶端要求服務。 當用戶端透過 Socket 連接至伺服器時,會進行用戶端至伺服器資料交換。 伺服器會執行用戶端的要求,並將回覆傳回用戶端。
附註: 目前 IBM 支援兩個版本的大部分 Socket API。 預設 IBM® i Socket 使用 Berkeley Socket Distribution (BSD) 4.3 結構和語法。 其他版本的 Socket 使用與 BSD 4.4 及 UNIX 98 程式設計介面規格相容的語法及結構。 程式設計師可以指定 _XOPEN_SOURCE 巨集來使用 UNIX 98 相容介面。
下圖顯示連線導向 Socket 階段作業的一般事件流程 (以及發出的 API 順序)。 下圖後面是每一個事件的說明。

這是連線導向 Socket 的一般事件流程:
- socket() API 會建立用於通訊的端點,並傳回代表該端點的 Socket 描述子。
- 當應用程式具有 Socket 描述子時,它可以將唯一名稱連結至 Socket。 伺服器必須連結名稱,才能從網路存取。
- listen() API 指出願意接受用戶端連線要求。 針對 Socket 發出 listen() API 時,該 Socket 無法主動起始連線要求。 在使用 socket() API 配置 Socket 且 bind() API 將名稱連結至 Socket 之後,即會發出 listen() API。 在發出 accept() API 之前,必須先發出 listen() API。
- 用戶端應用程式在串流 Socket 上使用 connect() API 來建立與伺服器的連線。
- 伺服器應用程式使用 accept() API 來接受用戶端連線要求。 伺服器必須先順利發出 bind() 和 listen() API ,然後才能發出 accept() API。
- 在串流 Socket 之間 (在用戶端與伺服器之間) 建立連線時,您可以使用任何 Socket API 資料傳送 API。 用戶端及伺服器有許多可供選擇的資料傳送 API ,例如 send()、 recv()、 read()、 write()及其他。
- 當伺服器或用戶端想要停止作業時,它會發出 close() API ,以釋放 Socket 所獲得的任何系統資源。
附註: Socket API 位於應用程式層與傳輸層之間的通訊模型中。 Socket API 不是通訊模型中的層。 Socket API 可讓應用程式與一般通訊模型的傳輸或網路層互動。 下圖中的箭頭顯示 Socket 的位置,以及 Socket 提供的通訊層。

通常,網路配置不容許安全內部網路與較不安全外部網路之間的連線。 不過,您可以讓 Socket 與在防火牆之外的系統上執行的伺服器程式 (非常安全的主機) 進行通訊。