首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++Builder Socket 元件完整應用指南

     編輯:關於C++

Socket 元件概述

Socket 元件封裝 TCP/IP 及相關協定 (XNS, DECnet, IPX/SPX),讓應用程式透過讀寫連接的機器進行通訊,無需處理網路軟體細節。C++Builder 提供伺服器/用戶端 Socket 撰寫網路服務 (HTTP, FTP 等) 或自定義服務。

核心概念

服務協定

撰寫網路應用前須明確服務協定。標準服務 (HTTP, FTP, finger, time) 需遵循既定協定;新服務需自行設計通訊協定 (訊息格式、編碼方式)。

應用程式通訊層

Socket 在網路軟體與應用程式間提供介面,應用程式仍需對外提供 API (可參考 ISAPI 或自行設計)。

服務與連接埠

標準服務有固定連接埠號。Windows Socket 物件提供方法查詢服務連接埠。新服務可在 Services 檔案指定關聯連接埠 (參閱 Microsoft Windows Sockets 文件)。

三種 Socket 連接類型

類型描述
用戶端連接本地用戶端 Socket 主動發起連接遠端伺服器 Socket,經查找、請求、接受、描述傳回完成。
傾聽連接伺服器 Socket 被動形成「半連接」狀態,維護請求佇列,接受請求時建立新 Socket 服務用戶端,傾聽 Socket 保持開放。
伺服器連接傾聽 Socket 接受請求後建立的完整連接,雙端能力對等,僅傾聽連接為單一端點。

Socket 位址描述

IP 位址與主機名稱

  • IP 位址:四位元組點分十進制字串 (如 123.197.1.2),一系統可有多 IP。
  • 主機名稱:IP 別名 (如 https://www.wsite.com),易記、可檢查拼寫、支援 IP 變更不影響用戶端。
  • 本機 HOSTS 檔可建立名稱對應 (Windows 95/NT)。

選擇建議:已知主機名用主機名 (易維護);未知則用 IP (連線較快,省去解析)。

連接埠號

  • 識別系統上獨立連接,支援多工。
  • 伺服器固定監聽知名連接埠,接受連接後建立專用連接埠持續服務。
  • 用戶端使用專用本地連接埠,指定遠端伺服器連接埠 (常透過服務名間接指定)。

使用 Socket 元件

用戶端 Socket (TClientSocket)

  • 指定服務:Host (主機名) 或 Address (IP),Port (連接埠號) 或 Service (服務名),若同時指定以 Service 為準。
  • 建立連接:呼叫 Open(),或設計時設 Active=true 自動連接。
  • 取得連接資訊:Socket 屬性存取 TClientWinSocket,取得雙端位址/連接埠、SocketHandle、Handle (Windows 訊息)、AsyncStyles。
  • 關閉連接:呼叫 Close(),或收到 OnDisconnect 事件通知對方關閉。

伺服器 Socket (TServerSocket)

  • 指定連接埠:Port 或 Service (建議用 Service 減少錯誤),同時指定以 Service 為準。
  • 監聽請求:Open() 或設計時 Active=true。
  • 接受連接:自動接受,觸發 OnClientConnect 事件。
  • 取得連接資訊:Socket 存取 TServerWinSocket 列舉活動用戶端 (TServerClientWinSocket),取得雙端位址/連接埠、Handle、SocketHandle、AsyncStyles。
  • 關閉連接:Close() 關閉所有用戶連接並停止監聽;用戶端關閉觸發 OnClientDisconnect。

Socket 事件回應

用戶端事件流程

  1. OnLookup:嘗試定位伺服器,可修改連接參數、呼叫 Windows API。
  2. Windows Socket 設定/初始化通知。
  3. OnConnecting:找到伺服器,可取得實際連接 IP/連接埠。
  4. 伺服器接受,連接完成。
  5. OnConnect:連接確立,若立即讀寫在此處理。

伺服器端事件

  • 監聽階段:OnListen (建立監聽前,可限制 IP)。
  • 接受用戶端:
    1. OnGetSocket:可提供自訂 TServerClientWinSocket 子類別。
    2. OnAccept:首次取得用戶端資訊。
    3. OnGetThread (stThreadBlocking):可提供自訂執行緒類別。
    4. OnThreadStart (stThreadBlocking):執行緒啟動初始化。
    5. OnClientConnect:連接完成,非阻塞模式可開始讀寫。

錯誤事件

OnError:連接發生錯誤觸發,處理函數可修改錯誤碼為 0 避免例外拋出。

讀寫操作

非阻塞 (Non-blocking) 連接

  • 設定 ClientType=ctNonBlocking、ServerType=stNonBlocking。
  • 讀寫事件:用戶端 OnRead/OnWrite,伺服器 OnClientRead/OnClientWrite。
  • 讀取:ReceiveBuf/ReceiveText (先用 ReceiveLength 取得位元組數)。
  • 寫入:SendBuf/SendStream/SendText;SendStreamThenDrop 發送完關閉連接 (僅關閉用戶連接,非監聽)。
  • 注意:使用 SendStream 系列勿自行釋放 Stream,Socket 會自動釋放。

阻塞連接

  • 設定 ClientType=ctBlocking,主動發起讀寫,執行緒阻塞直到完成。
  • 建議建立執行緒處理讀寫,避免阻塞主執行緒。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved