資源描述:
《VB中基于TCPIP協(xié)議的點(diǎn)對(duì)點(diǎn)文件傳輸》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。
1、VB中基于TCP/IP協(xié)議的點(diǎn)對(duì)點(diǎn)文件傳輸?葛斌???摘要?隨著網(wǎng)絡(luò)的普及,網(wǎng)絡(luò)編程顯得尤其重要。本文使用Winsock控件實(shí)現(xiàn)兩臺(tái)計(jì)算機(jī)間的文件傳輸,描述了Winsock控件的使用方法及有關(guān)文件傳輸?shù)乃惴ā???關(guān)鍵詞TCP/IP協(xié)議,Winsock控件,網(wǎng)絡(luò)編程,文件傳輸,斷點(diǎn)續(xù)傳。???隨著計(jì)算機(jī)網(wǎng)絡(luò)的迅速發(fā)展,人們的生活越來越離不開網(wǎng)絡(luò),如今網(wǎng)絡(luò)編程已成為計(jì)算機(jī)發(fā)展的熱點(diǎn),而在眾多的網(wǎng)絡(luò)通信中,又以TCP/IP協(xié)議最為流行。本文討論的Winsock控件,提供了訪問TCP/IP網(wǎng)絡(luò)的捷徑,使用它可以不必了解TCP/IP的細(xì)節(jié)和調(diào)用WinsockAPI,只要設(shè)置好相應(yīng)的屬性和觸發(fā)事件后
2、的處理,就可以實(shí)現(xiàn)計(jì)算機(jī)之間的數(shù)據(jù)通信。一、Winsock控件???Winsock即WindowsSockets規(guī)范的簡(jiǎn)稱,是目前最流行的網(wǎng)絡(luò)通信應(yīng)用程序接口之一。所謂Socket,通常也稱作"套接字",用于描述IP地址和端口,是一個(gè)通信鏈的句柄。應(yīng)用程序通常通過“套接字”向網(wǎng)絡(luò)發(fā)出請(qǐng)求或者應(yīng)答網(wǎng)絡(luò)請(qǐng)求。Socket是網(wǎng)絡(luò)上運(yùn)行的兩個(gè)程序間雙向通訊的一端,它既可以接受請(qǐng)求,也可以發(fā)送請(qǐng)求,利用它可以較為方便的編寫網(wǎng)絡(luò)上數(shù)據(jù)的傳遞。Winsock控件工作在傳輸層上,在這一層上,目前主要流行的協(xié)議包括TCP和UDP兩種:TCP協(xié)議適用于那些對(duì)于數(shù)據(jù)的可靠性要求比較高的情況,目前大多數(shù)的網(wǎng)絡(luò)應(yīng)用
3、層協(xié)議都是基于TCP協(xié)議的(例如常用的HTTP、FTP、SMTP、POP3等協(xié)議);UDP協(xié)議適用于對(duì)數(shù)據(jù)可靠性要求不高而對(duì)速度要求較高的情況,這里主要包括一些需要大流量的(例如Real公司的RTSP協(xié)議,騰訊公司的QQ協(xié)議等)。二、Winsock控件通信的工作原理???Winsock控件是基于Socket規(guī)范創(chuàng)建的,所以其通信的實(shí)質(zhì)是對(duì)Socket接口進(jìn)行數(shù)據(jù)的讀寫操作。如果兩個(gè)應(yīng)用程序需要通信,它們可以通過使用Socket類來建立套接字連接,可以將這個(gè)過程想象為一次電話呼叫過程:呼叫者通過撥號(hào)與被呼叫者連接,當(dāng)電話接通時(shí),雙方都可以自由通話了,只不過這里的呼叫者被稱為“客戶”,被呼叫者
4、則稱為“服務(wù)器”,而號(hào)碼則為“IP地址+端口”,但在建立連接之前,必須由“客戶”發(fā)出呼叫,且此時(shí)的“服務(wù)器”正在監(jiān)聽。因此,基于TCP/IP協(xié)議的通信,需要分別建立客戶端應(yīng)用程序和服務(wù)器端應(yīng)用程序。其大致流程如圖1所示:??????????????????????????????????圖1Winsock工作原理???端口號(hào)被規(guī)定在0~65535范圍內(nèi)的某一個(gè)整數(shù),其中0~1023被預(yù)先定義的服務(wù)器通信所占用(如telnet占用23,http占用端口80),所以最好使用1024~65535這些端口中的某一個(gè),以免發(fā)生端口沖突。三、基本方法???客戶端要與服務(wù)器端進(jìn)行通信,首先,必須知道服務(wù)
5、器端的域名或IP地址(RemoteHost屬性),就像要和某人打電話前,必須知道對(duì)方的電話號(hào)碼;其次,還必須和服務(wù)器端約定相同的端口(RemotePort屬性),用于數(shù)據(jù)的輸入和輸出;最后,調(diào)用Connect方法與服務(wù)器端建立連接。???服務(wù)器端應(yīng)設(shè)置一個(gè)監(jiān)聽端口(LocalPort屬性),端口應(yīng)與客戶端的端口相同,同時(shí)調(diào)用Listen方法時(shí)刻監(jiān)聽客戶端的連接請(qǐng)求(ConnectionRequest事件);當(dāng)接收到客戶端的連接請(qǐng)求時(shí),可調(diào)用ConnectionRequest事件的Accept方法,這樣與客戶端的連接就建立了。???客戶端和服務(wù)器端成功建立連接后,任何一方都可以自由的發(fā)送數(shù)據(jù)
6、(SendData方法)和接收數(shù)據(jù)(GetData方法),這些方法都在DataArrival事件中。四、案例實(shí)現(xiàn)???這里筆者通過一個(gè)實(shí)際應(yīng)用,來說明如何使用Winsock控件進(jìn)行網(wǎng)絡(luò)通信。實(shí)例中有兩臺(tái)計(jì)算機(jī),一臺(tái)作為服務(wù)器端,一臺(tái)作為客戶端,實(shí)現(xiàn)的功能是將服務(wù)器端的某一文件傳送到客戶端,服務(wù)器端和客戶端進(jìn)行點(diǎn)對(duì)點(diǎn)的文件傳輸。???1.實(shí)現(xiàn)原理???本文將實(shí)現(xiàn)的文件傳輸只有一個(gè)發(fā)送方和一個(gè)接收方,這是最基本的文件傳輸方式,運(yùn)用的原理也比較簡(jiǎn)單:發(fā)送方先獲取待傳輸文件的基本信息,主要是文件名及文件長(zhǎng)度(用于創(chuàng)建數(shù)據(jù)緩沖區(qū));然后,將其發(fā)送給接收方;接著,建立和文件一樣大小的數(shù)據(jù)緩沖區(qū),并將文
7、件讀入;最后,將數(shù)據(jù)緩沖區(qū)中的數(shù)據(jù)發(fā)送給接收方。與此同時(shí),當(dāng)接收方接收到文件名和文件長(zhǎng)度之后,就為其創(chuàng)建新的文件和數(shù)據(jù)緩沖區(qū);然后,接收傳輸?shù)奈募?shù)據(jù),并將其放在數(shù)據(jù)緩沖區(qū)中;最后,依次將數(shù)據(jù)緩沖區(qū)的數(shù)據(jù)寫入新創(chuàng)建的文件中。這樣便完成了不同計(jì)算機(jī)之間的文件傳輸。???2.服務(wù)器端主程序代碼???“通用”中聲明如下:OptionBase1Dimdata()AsByte,sendAsLong?'聲明數(shù)據(jù)緩沖區(qū)和已傳輸?shù)臄?shù)據(jù)D