共用方式為


Windows Sockets:作業順序

本文詳細說明通訊端伺服器和用戶端通訊端之作業序列。 由於通訊端使用 CArchive 物件,它們必須是 資料流通訊端

資料流通訊端通訊的作業序列

直到建構 CSocketFile 物件為止,CAsyncSocketCSocket 的下列序列是正確的 (但有一些參數差異)。 從這時起,序列完全是為了 CSocket。 下表說明設定用戶端和伺服器之間的通訊之作業序列。

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

伺服器

用戶端

// 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 Sockets:通訊埠和通訊端位址

2. 伺服器一定要指定連接埠,如此用戶端才可以連接。 Create 呼叫有時也會指定位址。 在用戶端上,請使用預設參數,要求 MFC 使用任何可用的通訊埠。

3. 其中 nPort 是通訊埠編號, strAddr 是 MAC 位址或 Internet Protocol (IP) 位址。

4. MAC 位址可能採用數種形式:「ftp.microsoft.com」或「microsoft.com」。 IP 位址使用「點狀數目」格式,例如「127.54.67.32」。 Connect 函式驗證位址是否為點狀數字 (雖然它不會檢查數值是否為網路中有效的電腦)。 如果不是,Connect 假設使用電腦名稱是其他種類的格式。

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

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

序列的其他注意事項

在上表所列的呼叫序列是資料流通訊端所用。 資料包通訊端是無連接的,不需要 CAsyncSocket::ConnectListenAccept 呼叫 (雖然您可以選擇性地使用 Connect)。 相反地,如果您使用了類別 CAsyncSocket,資料包通訊端會使用 CAsyncSocket::SendToReceiveFrom 成員函式。(如果您使用資料包通訊端的 Connect ,請使用 SendReceive)。因為 CArchive 無法與資料包一起使用,如果通訊是資料包,請不要與封存的 CSocket 一起使用。

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

如需詳細資訊,請參閱:

請參閱

參考

CSocket 類別

CAsyncSocket::Create

CAsyncSocket::Close

概念

MFC 中的 Windows Sockets