共用方式為


Windows Sockets:作業順序

本文說明伺服器通訊端和用戶端通訊端的作業順序並存。 因為通訊端使用 CArchive 物件,所以它們一 定是串流通訊端

串流通訊端通訊的作業順序

在建構 CSocketFile 物件時,下列序列對 和 CSocket 都有一些參數差異 CAsyncSocket 是正確的。 從那一點開始,序列會嚴格為 CSocket 。 下表說明設定用戶端與伺服器之間通訊的作業順序。

設定伺服器與用戶端之間的通訊

伺服器 Client
// construct a socket

CSocket sockSrvr;
// construct a socket

CSocket sockClient;
// create the SOCKET

sockSrvr.Create(nPort);1,2
// create the SOCKET

sockClient.Create( );2
// start listening

sockSrvr.Listen( );
// seek a connection

sockClient.Connect(strAddr, nPort);3,4
// construct a new, empty socket

CSocket sockRecv;

// accept connection

sockSrvr.Accept( sockRecv ); 5
// construct file object

CSocketFile file(&sockRecv);
// construct file object

CSocketFile file(&sockClient);
// construct an archive

CArchive arIn(&file, CArchive::load);

-或-

CArchive arOut(&file, CArchive::store);

- 或兩者 -
// construct an archive

CArchive arIn(&file, CArchive::load);

-或-

CArchive arOut(&file, CArchive::store);

- 或兩者 -
// use the archive to pass data:

arIn >> dwValue;

-或-

arOut << dwValue;6
// use the archive to pass data:

arIn >> dwValue;

-或-

arOut << dwValue;6
  1. 其中 nPort 是埠號碼。 如需埠的詳細資訊,請參閱 Windows 通訊端:埠和通訊端位址

  2. 伺服器必須一律指定埠,用戶端才能連線。 呼叫 Create 有時也會指定位址。 在用戶端上,使用預設參數,要求 MFC 使用任何可用的埠。

  3. 其中 nPort 是埠號碼, strAddr 是電腦位址或網際網路通訊協定 (IP) 位址。

  4. 電腦位址可以採用數種形式:「ftp.microsoft.com」、「microsoft.com」。 IP 位址使用 「dotted number」 格式 「127.54.67.32」。 函 Connect 式會檢查位址是否為點數(雖然不會檢查數位以確保數位是網路上的有效電腦)。 如果沒有, Connect 則假設電腦名稱稱為其中一種其他表單。

  5. 當您在伺服器端呼叫 Accept 時,會將參考傳遞至新的通訊端物件。 您必須先建構這個物件,但不要為其呼叫 Create 。 請記住,如果這個通訊端物件超出範圍,連線就會關閉。 MFC 會將新的 物件連接到 SOCKET 控制碼。 您可以在堆疊上建構通訊端,如所示,或在堆積上建構通訊端。

  6. 封存和通訊端檔案在超出範圍時會關閉。 當物件超出範圍或刪除時,通訊端物件的解構函式也會呼叫 socket 物件的 Close 成員函式。

序列的其他注意事項

上表所示的呼叫順序適用于資料流程通訊端。 沒有連線的 Datagram 通訊端不需要 CAsyncSocket::連線 接聽 接受 呼叫(雖然您可以選擇使用 Connect )。 相反地,如果您使用 類別 CAsyncSocket ,資料包通訊端會使用 CAsyncSocket::SendToReceiveFrom 成員函式。 (如果您使用 Connect 資料包通訊端,請使用 SendReceive 。因為 CArchive 不適用於資料包,因此如果通訊端是資料包,請勿搭配封存使用 CSocket

CSocketFile 不支援所有的 CFile 功能; CFile 例如 Seek ,對於通訊端通訊而言沒有意義的成員無法使用。 因此,某些預設 MFC Serialize 函式與 不相容 CSocketFile 。 這特別適用于 CEditView 類別。 您不應該嘗試透過附加至 CSocketFile 物件的物件來序列化 CEditView 資料;請改用 CEditView::SerializeRawCEditView::Serialize 未記載)。 CArchive SerializeRaw 函式預期檔案物件具有不支援的函式,例如 Seek CSocketFile

如需詳細資訊,請參閱

另請參閱

MFC 中的 Windows Sockets
CSocket 類別
CAsyncSocket::Create
CAsyncSocket::Close