程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> Windows Sockets:操作順序

Windows Sockets:操作順序

編輯:關於C語言

本文以對照方式闡釋了服務器套接字和客戶端套接字的操作順序。因為這些套接字使用 CArchive 對象,所以它們必然是流式套接字。流式套接字通信的操作順序

在構造 CSocketFile 對象之前,下面的順序對 CAsyncSocket CSocket 都是准確的(只有少數幾個參數不同)。從構造 CSocketFile 對象開始,順序只適用於 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 是計算機地址或網際協議 (IP) 地址。

4. 計算機地址可以采用幾種形式:“ftp.microsoft.com”、“microsoft.com”。IP 地址采用“以點分隔的數字”形式,如“127.54.67.32”。 Connect 函數查看地址是否為以點分隔的數字(但它不確保該數字是網絡上的有效計算機)。如果不是,則 Connect 使用其他某種形式的計算機名稱。

5. 當在服務器端調用 Accept 時,傳遞對新套接字對象的引用。必須首先構造該對象,但不對它調用 Create 。注意,如果此套接字對象超出范圍,則連接關閉。MFC 將新對象連接到 SOCKET 句柄。可以在堆棧上構造此套接字(如表中所示)或在堆上構造。

6. 存檔和套接字文件在超出范圍時將被關閉。套接字對象超出范圍或被刪除時,對象的析構函數也對此套接字對象調用 Close 成員函數。有關順序的其他說明

上表中顯示的調用順序適用於流式套接字。數據文報套接字是無連接的,不需要 CAsyncSocket::Connect、Listen 和 Accept 調用(但可有選擇地使用 Connect )。相反,如果正在使用 CAsyncSocket 類,則數據文報套接字使用 CAsyncSocket::SendTo ReceiveFrom 成員函數。(如果對數據文報套接字使用 Connect ,則使用 Send Receive 。)因為 CArchive 不適用於數據文報,如果套接字是數據文報,則不要使用帶存檔的 CSocket

CSocketFile 並不支持 CFile 的所有功能, CFile 成員(如 Seek )對套接字通信沒有意義,是不可用的。因此,某些默認 MFC Serialize 函數與 CSocketFile 不兼容。這對於 CEditView 類更是如此。不要試圖使用 CEditView::SerializeRaw 通過附加到 CSocketFile 對象的 CArchive 對象來序列化 CEditView 數據,而應使用 CEditView::Serialize (無出處)。SerializeRaw 函數預期文件對象具有 CSocketFile 不支持的函數,如 Seek

有關更多信息,請參見: Windows Sockets:使用帶存檔的套接字 Windows Sockets:使用 CAsyncSocket 類 Windows Sockets:端口和套接字地址 Windows Sockets:流式套接字 Windows Sockets:數據文報套接字

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved