Visual C++網路程式設計經典案例詳解 第4章 FTP瀏覽器 登入FTP伺服器 連線FTP伺服器
在對FTP檔案進行相關處理之前 必須在成功連線 登入伺服器以後 才可以執行相關的操作
因為FTP連線是基於Windows套接字程式設計的 所以FTP的連線過程和Socket連線一樣 也就是客戶端建立連線套接字以後 呼叫函式Connect()向伺服器連線請求
使用者需要特別注意的是待伺服器同意連線並返回後, 客戶端必須先發送一個空字串到伺服器進行初始化 這樣才能進行資料的交換
1 例項化CSocket CSocket類是MFC對Windows套接字的一個封裝類 一般 它使用類的建構函式來例項化物件 但是在實際程式設計中 建構函式常使用關鍵字new呼叫 構造一個沒有初始化的套接字物件
CSocket m_clientsocket=new CSocket //構造一個套接字物件m_clientsocket
構造該物件後 必須呼叫成員函式Create 建立完整的套接字控制代碼
BOOL CSocket::Create(UINT nSocketPort,
int nSocketType=SOCK_STREAM,LPCTSTR lpszSocketAddress=NULL);
引數nSocketPort用來指定與套接字相關聯的本地埠號 預設值為0 設定FTP埠21 nSocketType指定套接字型別 SOCK+STREAM 預設為表示建立流式套接字
FTP客戶端均採用預設型別 lpszSocketAddress指定建立套接字的網路地址 預設為NULL 客戶端一般設定為NULL 該函式呼叫成功返回非零值,否則返回0,表示出錯。
2 實現連線功能 使用者建立套接字物件以後,就可以呼叫函式去實現真正的連線了。 實現連線功能的函式是Connect()
BOOL Connect(LPCSTR lpszHostAddress,UINT nHostPort)
lpszHostAddress指定要連線的伺服器地址 nHostPort指定將要連線伺服器上的埠號 一般程式設計中將此引數設定為21號埠 該函式連線伺服器成功 則返回true 否則返回false
CSocket *m_clientsocket=new CSocket() //構造連線套接字物件 m_clientsocket->Create(21,SOCKE_STREAM,FD_READ|FD_WRITE,NULL); //建立流式套接字 m_clientsocket->Connect("218.6.132.5",21);
這段程式碼的作用是建立套接字物件後 呼叫函式Connect進行連線伺服器操作
3 封裝連線過程 FTP的連線過程主要有自定義函式FTPConnect()實現 根據使用者輸入的伺服器地址和埠號 連線FTP伺服器 即返回值表示操作是否成功
//連線伺服器函式,引數severhost 表示伺服器的ip地址 port指定要連線的伺服器埠。
BOOL FTPConnect(CString serverhost,int port)
{
CSocket *m_clientsocket=new CSocket();//構造連線套接字物件
m_clientsocket->Create(21,SOCKE_STREAM, FD_READ|FD_WRITE,NULL);
if(!m_clientsocket)//判斷套接字物件是否建立成功
{
MessageBox("套接字建立失敗!");
return false;
}
if(!(m_clientsocket->Connect(serverhost,port)))return false;
//連線FTP伺服器
else {return true;}//連線成功將返回true
}
在函式中 引數serverhost和port分別指定要連線的伺服器的地址和埠 程式首先建立流式套接字m_clientsocket 呼叫CSocket類的函式Connect()連線FTP伺服器 當連線失敗時 函式返回false 否則返回true
自定義函式FTPConnect()封裝完成後便可以對其進行呼叫
Void Onconnect()
{
CString address="218.6.132.5" ;//對應ip地址字串變數並初始化
int port = 21; //定義埠變數並初始化
if(!(FTPConnect((LPCSTR)address,port)))//判斷FTPConnect呼叫是否成功
{
MessageBox("連線失敗!"); //提示失敗
}
else
{
MessageBox("連線伺服器成功!"); //否則提示成功
}
}
函式OnConnect()根據定義的ip地址和埠號 呼叫自定義函式連線伺服器 IP地址和埠號可以由使用者進行自定義