作業的順序的 Windows 通訊端:
這份文件並排顯示,說明伺服程式通訊端和用戶端通訊端作業的順序。 因為通訊端使用CArchive物件,它們一定是資料流通訊端。
資料流通訊端通訊的作業順序
到建構的CSocketFile物件時,下列的順序是正確的 (有一些參數不同) 作為兩個CAsyncSocket和CSocket。 此後,順序是嚴格的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 通訊端: 連接埠和通訊端位址如需詳細資訊,有關連接埠。
2. 讓用戶端可以連線,伺服器永遠必須指定一個連接埠。 建立呼叫有時也會指定一個地址。 在用戶端,使用預設參數,這會要求 MFC 使用任何可用的連接埠。
3. 其中nPort連接埠號碼和 strAddr 為機器位址或網際網路通訊協定 (IP) 位址。
4. 機器位址可以採用數種格式:"ftp.microsoft.com"、"microsoft.com"。 IP 位址使用 「 點分隔數字 」 格式 「 127.54.67.32 」。 連線函式會檢查位址是否為點分隔的數字 (雖然它不會檢查數字是否是正確的電腦在網路上)。 如果不是, 連線假設的其中一個其他形式的電腦名稱。
5. 當您呼叫接受在伺服器端,您可以將新的通訊端物件的參考。 您必須首先,建構這個物件,但不是會呼叫建立它。 請注意,如果這個通訊端物件超出範圍,連接會關閉。 MFC 會連接至新的物件通訊端處理。 您可以建構在堆疊上,如所示,或在堆積上的通訊端。
6. 封存和通訊端檔就會關閉時,它們會執行而超出範圍。 通訊端物件的解構函式也會呼叫關閉成員函式的通訊端物件,當物件超出範圍,或被刪除。
順序的相關的其他注意事項
上述表格中所顯示的呼叫順序是針對資料流通訊端。 資料包通訊端,也就是沒有連線,不需要 CAsyncSocket::Connect, 接聽,以及 接受 的呼叫 (雖然您可以選擇性地使用 連線)。 相反地,如果您使用的類別CAsyncSocket,資料包通訊端使用CAsyncSocket::SendTo和ReceiveFrom成員函式。 (如果您使用連線 資料包通訊端,您使用 傳送 和 接收。)因為CArchive無法運作的資料包,請勿使用CSocket與封存資料包通訊端是否一起。
CSocketFile 不支援的所有CFile的功能。 CFile成員,例如Seek,其意義通訊端的通訊,都無法使用。 因此,有些預設 MFC Serialize函式是不相容於CSocketFile。 尤其是CEditView類別。 您不應該嘗試序列化CEditView透過資料CArchive物件附加至CSocketFile物件使用CEditView::SerializeRaw。 使用 CEditView::Serialize 而 (並未記錄)。 SerializeRaw 函式所預期的檔案物件,將函式,例如Seek、 該CSocketFile不支援。
如需詳細資訊,請參閱: