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

Windows Sockets:流式套接字的操作順序詳解

     編輯:關於C語言

本文透過對照表的方式,詳細闡述建立伺服器與客戶端通信所需的流式套接字操作順序。由於範例使用 CArchive 物件,因此必須採用流式套接字進行通信。

建立通信的標準流程

在建構 CSocketFile 物件之前,下列操作順序對 CAsyncSocket 和 CSocket 均適用(僅少數參數不同)。自 CSocketFile 建構起,後續步驟則專用於 CSocket。下表說明客戶端與伺服器之間建立通信的完整步驟:

伺服器與客戶端的對應操作

伺服器端客戶端
// 建構套接字物件
CSocket sockSrvr;
// 建立 SOCKET,指定連接埠
sockSrvr.Create(nPort); 1,2
// 開始監聽連線請求
sockSrvr.Listen();
// 建構新的空套接字物件
CSocket sockRecv;
// 接受連線,將連接的 SOCKET 附加到 sockRecv
sockSrvr.Accept(sockRecv); 5
// 建構檔案物件,關聯已連接的套接字
CSocketFile file(&sockRecv);
// 建構存檔物件(讀取/寫入)
CArchive arIn(&file, CArchive::load);
// 或
CArchive arOut(&file, CArchive::store);
// 或兩者皆建構
// 透過存檔傳遞資料
arIn >> dwValue;
// 或
arOut << dwValue; 6
// 建構套接字物件
CSocket sockClient;
// 建立 SOCKET,使用預設參數
sockClient.Create(); 2
// 尋求連線至伺服器
sockClient.Connect(strAddr, nPort); 3,4
// 建構檔案物件,關聯客戶端套接字
CSocketFile file(&sockClient);
// 建構存檔物件(讀取/寫入)
CArchive arIn(&file, CArchive::load);
// 或
CArchive arOut(&file, CArchive::store);
// 或兩者皆建構
// 透過存檔傳遞資料
arIn >> dwValue;
// 或
arOut << dwValue; 6

關鍵步驟說明

  1. 連接埠指定:nPort 為連接埠號碼。伺服器必須指定固定連接埠,以便客戶端連線;客戶端通常使用預設值,由系統自動分配可用連接埠。詳細資訊請參閱 Windows Sockets:連接埠與套接字地址。
  2. 地址格式:strAddr 可以是電腦名稱(如 "ftp.microsoft.com")或 IP 位址(如 "127.54.67.32")。Connect 函式會自動判斷格式並解析。
  3. Accept 關鍵點:呼叫 Accept 時必須傳遞一個已建構但未呼叫 Create 的新 CSocket 物件參考。該物件若超出作用域,連線即關閉。可建構於堆疊或堆積上。
  4. 資源清理:存檔與套接字檔案物件在超出作用域時自動關閉;套接字物件銷毀時,解構函式會呼叫 Close 成員函式。

資料報套接字的差異

資料報套接字屬無連線模式,不需 Connect、Listen、Accept 呼叫(但可選擇性使用 Connect)。若使用 CAsyncSocket,資料報通信改用 SendTo 和 ReceiveFrom;若已呼叫 Connect,則改用 Send 和 Receive。因 CArchive 不適用於資料報,切勿將帶存檔的 CSocket 用於資料報套接字。

CSocketFile 的限制

CSocketFile 並不支援 CFile 的所有功能。定位功能(Seek、GetLength、SetLength、GetPosition)、鎖定功能(LockRange、UnlockRange)在套接字通信中無意義,因此被標記為不可用。嘗試使用 CEditView::SerializeRaw 透過附加於 CSocketFile 的 CArchive 序列化 CEditView 資料會失敗,因 SerializeRaw 預期檔案物件具備 Seek 等 CSocketFile 不支援的函式。正確做法是使用 CEditView::Serialize。

延伸閱讀

  • Windows Sockets:使用帶存檔的套接字
  • Windows Sockets:使用 CAsyncSocket 類別
  • Windows Sockets:連接埠與套接字地址
  • Windows Sockets:流式套接字
  • Windows Sockets:資料報套接字

本文透過對照表詳細說明流式套接字在伺服器與客戶端之間建立通信的完整操作順序,涵蓋 CSocket/CSocketFile/CArchive 的建構、連線建立、資料傳輸及資源釋放流程,並釐清資料報套接字的差異與 CSocketFile 的功能限制。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved