基于UDP的文件傳輸_第1頁
基于UDP的文件傳輸_第2頁
基于UDP的文件傳輸_第3頁
基于UDP的文件傳輸_第4頁
基于UDP的文件傳輸_第5頁
已閱讀5頁,還剩15頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、 計(jì)算機(jī)網(wǎng)絡(luò)綜合課程設(shè)計(jì)報(bào)告 基于UDP協(xié)議的文件傳輸系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn) 學(xué)生姓名: 指導(dǎo)教師: 所 在 系: 電 子 信 息 系 所學(xué)專業(yè): 電子信息工程 年 級(jí): 2013 年 6 月目錄基于UDP的文件傳輸?shù)南到y(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)3一、實(shí)驗(yàn)的相關(guān)知識(shí)41.1通信的模式41.2 UDP協(xié)議41.3 Winsock控件41.4 Winsock控件重要屬性、方法和事件41.6 commomdialog控件61.7 timer控件7三、實(shí)驗(yàn)步驟83.1總體規(guī)劃83.2模塊設(shè)計(jì)83.3創(chuàng)建窗體83.4程序設(shè)計(jì)103.5系統(tǒng)運(yùn)行14四、實(shí)驗(yàn)結(jié)論15五、參考文獻(xiàn)15基于UDP的文件傳輸?shù)南到y(tǒng)的設(shè)計(jì)與實(shí)現(xiàn) 摘要

2、:該實(shí)驗(yàn)的任務(wù)是實(shí)現(xiàn)文件的傳輸,并且是基于UDP協(xié)議的。所有文件在該協(xié)議下可以實(shí)現(xiàn)發(fā)送并正確接收。此時(shí)需要了解的是UDP的數(shù)據(jù)包一次最多只能發(fā)送8K,所以我們想到通過拆包和創(chuàng)建窗體的方法來實(shí)現(xiàn)文件的傳輸。拆包主要是規(guī)定每個(gè)數(shù)據(jù)包的大小,然后計(jì)算具體的文件所需要的包數(shù),創(chuàng)建窗體的目的是編寫程序來進(jìn)行分包發(fā)送和接收。通過系統(tǒng)運(yùn)行窗體我們可以知道UDP不僅可以傳送和接收小文件,還可以傳輸和接收較大的文件。通過實(shí)驗(yàn)可知UDP是不可靠的無連接傳輸,所以在傳輸過程中會(huì)發(fā)生丟包的情況,但大部分情況下傳輸還是比較好的。 關(guān)鍵詞:UDP協(xié)議;發(fā)送文件;接收文件;拆包;Winsock控件 一、實(shí)驗(yàn)的相關(guān)知識(shí)1.1

3、通信的模式由于是實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)的文件傳輸,因此在程序中我們使用的是C/S的模式來實(shí)現(xiàn)通信。對(duì)于C/S的模式,即分為客戶端和服務(wù)端。服務(wù)端用來接收客戶端的連接,實(shí)現(xiàn)兩端之間互相傳輸文件。采用C/S的模式可以更好的體現(xiàn)程序的功能設(shè)計(jì)思想,充分調(diào)用在LAN中的server和client兩方面的處理能力,極大的減少網(wǎng)絡(luò)上的信息流通量。C/S體系結(jié)構(gòu)有可能提供一種開放式的、易伸縮擴(kuò)展的分布式計(jì)算機(jī)環(huán)境,并保護(hù)硬件等投資。1.2 UDP協(xié)議該實(shí)驗(yàn)文件傳輸是在UDP協(xié)議下進(jìn)行的,UDP提供無連接不可靠的用戶數(shù)據(jù)包傳輸。其中每一個(gè)數(shù)據(jù)段只有8Byte相對(duì)于TCP傳輸開銷較少,且無須對(duì)發(fā)送速率進(jìn)行管理。UDP發(fā)送數(shù)

4、據(jù)的速率僅僅受限于程序產(chǎn)生數(shù)據(jù)的速率,信源主機(jī)的性能及internet上可以利用的寬帶。并且與TCP不同的是UDP不需要連接,可直接發(fā)送,傳輸數(shù)據(jù)較快,但同時(shí)其穩(wěn)定性不好,易丟包。1.3 Winsock控件Winsock即Windows Sockets規(guī)范的簡稱,是目前最流行的網(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ù)的傳遞。Win

5、sock控件工作在傳輸層上,在這一層上,目前主要流行的協(xié)議包括TCP和UDP兩種:TCP協(xié)議適用于那些對(duì)于數(shù)據(jù)的可靠性要求比較高的情況,目前大多數(shù)的網(wǎng)絡(luò)應(yīng)用層協(xié)議都是基于TCP協(xié)議的(例如常用的HTTP、FTP、SMTP、POP3等協(xié)議);UDP協(xié)議適用于對(duì)數(shù)據(jù)可靠性要求不高而對(duì)速度要求較高的情況,這里主要包括一些需要大流量的(例如Real公司的RTSP協(xié)議,騰訊公司的QQ協(xié)議等)。1.4 Winsock控件重要屬性、方法和事件(1) 屬性Protocol:通過Protocol屬性可以設(shè)置WinSock控件連接遠(yuǎn)程計(jì)算機(jī)使用的協(xié)議。可選的協(xié)議是TCP和UDP,對(duì)應(yīng)的VB中常量分別是sckTCP

6、Protocol和sckUDPProtocol,Winsock控件默認(rèn)協(xié)議是UDP。RemoteHostIP:返回遠(yuǎn)程計(jì)算機(jī)的IP地址。本實(shí)驗(yàn)使用的是UDP協(xié)議,那么當(dāng)DataArrival事件后,發(fā)送UDP報(bào)文的計(jì)算機(jī)的IP才賦給了這個(gè)屬性。如果是TCP協(xié)議,在客戶端,當(dāng)使用了控件的Connect方法后,遠(yuǎn)程計(jì)算機(jī)的IP地址就賦給了RemoteHostIP屬性,而在服務(wù)器端,當(dāng)ConnectRequest事件后,遠(yuǎn)程計(jì)算機(jī)(客戶端)的IP地址就賦給了這個(gè)屬性。ByteReceived:返回當(dāng)前接收緩沖區(qū)中的字節(jié)數(shù)。State:用于返回當(dāng)前WinSock控件的狀態(tài)。 常數(shù)值描述sckClose

7、d0缺省值,關(guān)閉SckOpen1打開SckListening2偵聽(TCP)sckConnectionPending3連接掛起(TCP)sckResolvingHost4識(shí)別主機(jī)sckHostResolved5已識(shí)別主機(jī)sckConnecting6正在連接(TCP)sckConnected7已連接(TCP)sckClosing8同級(jí)人員正在關(guān)閉連接(TCP)sckError9錯(cuò)誤表1-1(2) 方法Bind:用Bind方法可以把一個(gè)端口號(hào)固定為本控件使用,使得別的應(yīng)用程序能再使用這個(gè)端口。Listen:只在使用TCP協(xié)議時(shí)有用。它將應(yīng)用程序置于監(jiān)聽檢測(cè)狀態(tài)。Connect:當(dāng)本地計(jì)算機(jī)希望和遠(yuǎn)

8、程計(jì)算機(jī)建立連接時(shí),就可以調(diào)用Connect方法。Accept:當(dāng)服務(wù)器接收到客戶端的連接請(qǐng)求后,服務(wù)器有權(quán)決定是否接受客戶端的請(qǐng)求。SendData:當(dāng)連接建立后,要發(fā)送數(shù)據(jù)就可以調(diào)用SendData方法,該方法只有一個(gè)參數(shù),就是要發(fā)送的數(shù)據(jù)。GetData:當(dāng)本地計(jì)算機(jī)接收到遠(yuǎn)程計(jì)算機(jī)的數(shù)據(jù)時(shí),數(shù)據(jù)存放在緩沖區(qū)中,要從緩沖區(qū)中取出數(shù)據(jù),可以使用GetData方法。PeekData:和GetData方法類似,但PeekData在取得數(shù)據(jù)后并不把緩沖區(qū)清空。(3) 事件ConnectRequest:(TCP)當(dāng)本地計(jì)算機(jī)接收到遠(yuǎn)程計(jì)算機(jī)發(fā)送的連接請(qǐng)求時(shí),控件的ConnectRequest事件將

9、會(huì)被觸發(fā)。SendProgress:當(dāng)一端的計(jì)算機(jī)正在向另一端的計(jì)算機(jī)發(fā)送數(shù)據(jù)時(shí),SendProgress事件將被觸發(fā)。SendProgress事件記錄了當(dāng)前狀態(tài)下已發(fā)送的字節(jié)數(shù)和剩余字節(jié)數(shù)。SendComplete:當(dāng)所有數(shù)據(jù)發(fā)送完成時(shí),被觸發(fā)。DataArrival:當(dāng)建立連接后,接受到了新數(shù)據(jù)就會(huì)觸發(fā)這個(gè)事件。注意:如果在接受到新數(shù)據(jù)前,緩沖區(qū)中非空,就不會(huì)觸發(fā)這個(gè)事件。Error:當(dāng)在工作中發(fā)生任何錯(cuò)誤都會(huì)觸發(fā)這個(gè)事件。1.5 Winsock控件通信的工作原理    Winsock控件是基于Socket規(guī)范創(chuàng)建的,所以其通信的實(shí)質(zhì)是對(duì)Socket接口進(jìn)行數(shù)

10、據(jù)的讀寫操作。如果兩個(gè)應(yīng)用程序需要通信,它們可以通過使用Socket類來建立套接字連接,可以將這個(gè)過程想象為一次電話呼叫過程:呼叫者通過撥號(hào)與被呼叫者連接,當(dāng)電話接通時(shí),雙方都可以自由通話了,只不過這里的呼叫者被稱為“客戶”,被呼叫者則稱為“服務(wù)器”,而號(hào)碼則為“IP地址+端口”,但在建立連接之前,必須由“客戶”發(fā)出呼叫,且此時(shí)的“服務(wù)器”正在監(jiān)聽。注意端口號(hào)被規(guī)定在065535范圍內(nèi)的某一個(gè)整數(shù),其中01023被預(yù)先定義的服務(wù)器通信所占用(如telnet占用23,http占用端口80),所以最好使用102465535這些端口中的某一個(gè),以免發(fā)生端口沖突。1.6 commomdialog控件C

11、ommonDialog控件提供一組標(biāo)準(zhǔn)的操作對(duì)話框,進(jìn)行諸如打開和保存文件,設(shè)置打印選項(xiàng),以及選擇顏色和字體等操作。通過運(yùn)行 Windows 幫助引擎控件還能顯示幫助。語法   CommonDialog控件在Visual Basic和Microsoft Windows動(dòng)態(tài)鏈接庫ommdlg.dll. 的例程之間提供了一個(gè)接口。為了用這個(gè)控件創(chuàng)建一個(gè)對(duì)話框,ommdlg.dll. 必須在 Microsoft Windows 的SYSTEM目錄下。在應(yīng)用程序中要使用CommonDialog控件,可將其添加到窗體中并設(shè)置其屬性??丶@示的對(duì)話框由控件的方法確定。在運(yùn)行

12、時(shí),當(dāng)相應(yīng)的方法被調(diào)用時(shí),將顯示一個(gè)對(duì)話框或是執(zhí)行幫助引擎;在設(shè)計(jì)時(shí),CommonDialog 控件是以圖標(biāo)的形式顯示在窗體中。該圖標(biāo)的大小不能改變。如果該控件不在“工具箱”中,請(qǐng)按 CTRL+T 鍵或使用菜單:工程-部件,顯示“部件”對(duì)話框。在這個(gè)“部件”對(duì)話框中,選擇"Microsoft Common Dialog Control“ 。使用指定的方法,CommonDialog控件能夠顯示下列對(duì)話。方法 所顯示的對(duì)話框ShowOpen 顯示“打開”對(duì)話框ShowSave 顯示“另存為”對(duì)話框ShowColor 顯示“顏色”對(duì)話框ShowFont 顯示“字體”對(duì)話框ShowPrint

13、er 顯示“打印”或“打印選項(xiàng)”對(duì)話框ShowHelp 調(diào)用 Windows 幫助引擎在對(duì)話框接口上單擊,CommonDialog控件將自動(dòng)提供與上下文有關(guān)的幫助: 單擊標(biāo)題欄中的“這是什么?”幫助按鈕,然后單擊想詳細(xì)信息的項(xiàng)目。將鼠標(biāo)放在想進(jìn)一步詳細(xì)信息的項(xiàng)目上,單擊右鍵,然后在所顯示的上下文菜單中選擇這是什么命令。 操作系統(tǒng)提供在Windows 95幫助彈出中顯示的文本。也可以通過設(shè)置Flags屬性,在帶有CommonDialog控件的對(duì)話框中顯示一個(gè)幫助按鈕,但是,必須在這個(gè)位置提供幫助主題。1.7 timer控件Timer 控件(最主要的就是enabled屬性,和Interval屬性,

14、下面有詳細(xì)介紹)通過引發(fā) Timer 事件,Timer 控件可以有規(guī)律地隔一段時(shí)間執(zhí)行一次代碼。Enabled 屬性返回或設(shè)置一個(gè)值,該值用來確定一個(gè)窗體或控件是否能夠?qū)τ脩舢a(chǎn)生的事件作出反應(yīng)。Interval 屬性返回或設(shè)置對(duì) Timer 控件的計(jì)時(shí)事件各調(diào)用間的毫秒數(shù)。說明:可以在設(shè)計(jì)時(shí)或在運(yùn)行時(shí)設(shè)置 Timer 控件的 Interval 屬性。使用 Interval 屬性時(shí),請(qǐng)記住:Timer 控件的 Enabled 屬性決定該控件是否對(duì)時(shí)間的推移做響應(yīng)。將Enabled 設(shè)置為 False 會(huì)關(guān)閉 Timer 控件,設(shè)置為 True 則打開它。當(dāng) Timer 控件置為有效時(shí),倒計(jì)時(shí)總是

15、從其 Interval 屬性的設(shè)置值開始。創(chuàng)建 Timer 事件程序用以告訴 Visual Basic 在每次 Interval 到時(shí)該做什么。二、實(shí)驗(yàn)原理實(shí)驗(yàn)設(shè)計(jì)過程中主要是通過Winsock控件進(jìn)行UDP文件傳輸。分別在發(fā)送端和接收端建立控件Winsock,經(jīng)過對(duì)Winsock控件程序的寫入,然后通過端口號(hào)和IP地址的綁定來建立聯(lián)系,而無需像TCP一樣建立連接,直接可以傳送文件,而且能較準(zhǔn)確的發(fā)送和接收。下圖是UDP數(shù)據(jù)報(bào)的封裝:三、實(shí)驗(yàn)步驟3.1總體規(guī)劃根據(jù)該實(shí)驗(yàn)的要求在UDP協(xié)議下實(shí)現(xiàn)文件的傳輸。本程序的文件傳輸系統(tǒng)的實(shí)現(xiàn)應(yīng)包含udp聊天,上傳文件,接收文件等幾個(gè)部分,整個(gè)程序采用VB

16、完成。程序使用流式套接字。在設(shè)計(jì)時(shí)設(shè)計(jì)選中文件界面中,傳輸并接收完成界面一個(gè)客戶端即可用于用于發(fā)送文件,也可用于接收文件。在通信的時(shí)候主要可以分為兩個(gè)部分,一個(gè)部分是控制信息的傳輸部分,而另一個(gè)部分就是文件的傳輸部分。傳送的控制信息可以包含發(fā)送文件的請(qǐng)求,文件的名稱、大小等,由于這方面的數(shù)據(jù)量比較小,因此采用了VB所提供的WINSocket類的串行化技術(shù)來實(shí)現(xiàn)。對(duì)于文件的傳輸,由于數(shù)據(jù)量相對(duì)來說比較大,所以用兩個(gè)線程來實(shí)現(xiàn)文件的傳輸,一個(gè)線程用于發(fā)送,一個(gè)線程用于接收。3.2模塊設(shè)計(jì)(1)服務(wù)端模塊服務(wù)端要與客戶端進(jìn)行通信,首先,必須知道客戶端的域名或IP地址(RemoteHost屬性),就像

17、要和某人打電話前,必須知道對(duì)方的電話號(hào)碼;其次,還必須和客戶端進(jìn)行端口綁定,也就是端口號(hào)要匹配,這樣傳送的文件才能到達(dá)客戶端。而且每個(gè)文件都有自己文件的長度和大小等。且能傳送任意磁盤中任意文件夾中的文件。(2)客戶端模塊同樣地,客戶端也需要有服務(wù)端的端口號(hào)和IP地址,而且還能把接收到的文件放到自己想要的磁盤中。3.3創(chuàng)建窗體1)Udp聊天窗口Udp聊天窗口要有發(fā)送和接收窗口能要有遠(yuǎn)程IP端口地址、發(fā)送端口號(hào)、接收端口號(hào)、發(fā)送和接收文件所處位置、發(fā)送按鍵、Winsock等圖3.12)發(fā)送窗體窗體要有選擇文件的控件commomdialog,要有返回聊天的功能圖3.23)接收過程要有傳送過程的可視化

18、界面 圖3.3 3.4程序設(shè)計(jì)在窗口建好的情況下相應(yīng)的編寫程序,在程序中關(guān)鍵是發(fā)送和接收,而數(shù)據(jù)傳輸過程關(guān)鍵方法是拆包,用VB可以寫出拆包發(fā)送和接收程序段。1)udp聊天程序段如下: Private Sub Command1_Click()Me.Winsock1.Protocol = sckUDPProtocolMe.Winsock1.LocalPort = Me.txtlocalportMe.Winsock1.BindMe.Command1.Enabled = FalseEnd SubPrivate Sub Command2_Click()Dim data, a, b As Stringda

19、ta = Me.Text1.Texta = Me.TxtIP.Textb = Me.txtremoteport.TextMe.Winsock1.RemoteHost = aMe.Winsock1.RemotePort = bOn Error Resume NextMe.Winsock1.SendData dataEnd SubPrivate Sub Command3_Click()Form2.ShowEnd SubPrivate Sub Command4_Click()EndEnd SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As

20、Long)Dim data As StringDim ip As String, port As LongOn Error Resume NextMe.Winsock1.GetData dataip = Me.Winsock1.RemoteHostIPport = Me.Winsock1.RemotePortMe.Text2.Text = Me.Text2.Text + ip + ":" + CStr(port) + ":" + data + vbCrLfIf Len(Me.Text2) > 1000 ThenMe.Text2 = "&q

21、uot;End IfEnd Sub2)文件選擇上傳界面程序如下:Option ExplicitPrivate Type byte_file index As Long arr_byte() As ByteEnd TypePrivate Declare Function GetTickCount Lib "kernel32" () As LongPrivate arr_bytefile() As byte_filePrivate lfilesize As LongPrivate Sub cmdback_Click()Form1.ShowEnd SubPrivate Sub C

22、ommand2_Click() cdg.Filter = "應(yīng)用程序|*.exe" cdg.ShowOpen If cdg.FileName <> "" Then: Command3.Enabled = TrueEnd SubPrivate Sub Command3_Click() Command2.Enabled = False Command3.Enabled = False Call FileToArray(cdg.FileName) Form3.Show Winsock1.SendData "#File# " &a

23、mp; Str(lfilesize) & "|10" Call SendFileEnd SubPrivate Sub Form_Load() Winsock1.RemoteHost = Form1.TxtIP.Text Winsock1.RemotePort = 10086 Winsock1.LocalPort = 10085 Winsock1.Bind Winsock2.RemoteHost = Form1.TxtIP.Text Winsock2.RemotePort = 1000 Winsock2.Bind 1001 Command3.Enabled = Fal

24、seEnd SubPrivate Sub FileToArray(ByVal FileName As String) Dim lChunck As Long Dim lRest As Long Dim index As Long lfilesize = CLng(FileLen(FileName) lChunck = FileLen(FileName) 1024 lRest = FileLen(FileName) Mod 1024 Open FileName For Binary As #1 For index = 1 To lChunck ReDim Preserve arr_bytefil

25、e(index) arr_bytefile(index).index = index ReDim arr_bytefile(index).arr_byte(1 To 1024) Get #1, , arr_bytefile(index).arr_byte Next If lRest > 0 Then ReDim Preserve arr_bytefile(index) arr_bytefile(index).index = index ReDim arr_bytefile(index).arr_byte(1 To lRest) Get #1, , arr_bytefile(index).

26、arr_byte End If CloseEnd SubPrivate Sub Wait(ByVal Sec As Integer) Dim ltick As Long ltick = GetTickCount Do DoEvents Loop Until GetTickCount - ltick >= SecEnd SubPrivate Sub SendFile() Dim l As Long Dim i As Integer For l = 1 To UBound(arr_bytefile) Winsock2.SendData arr_bytefile(l).arr_byte Wai

27、t (1) Text1.SelText = "index: " & Str(l) & " chunk size: " & _ UBound(arr_bytefile(l).arr_byte) & "byte" & vbCrLf Next Command2.Enabled = TrueEnd Sub3) 文件接收程序如下Option ExplicitPrivate Type byte_file index As Long arr_byte() As ByteEnd TypePrivate n As

28、 LongPrivate lReceived As LongPrivate lTotal As LongPrivate arr_bytefile() As byte_filePrivate Sub Form_Load() Winsock1.RemoteHost = Form1.TxtIP.Text Winsock2.RemoteHost = Form1.TxtIP.Text Winsock1.RemotePort = 10085 Winsock1.LocalPort = 10086 Winsock1.Bind Winsock2.RemotePort = 1001 Winsock2.LocalP

29、ort = 1000 Winsock2.Bind lblProg.Caption = "0.0%" lblSpeed.Caption = "速度: " & "0KB/S" lblTime.Caption = "剩余時(shí)間: 計(jì)算中." lReceived = 0 lTotal = 0 Timer2.Enabled = False n = 0 Me.Enabled = FalseEnd SubPrivate Sub lblProg_Change() lblProg.Left = (picProg.ScaleWi

30、dth - lblProg.Width) / 2End SubPrivate Sub WriteFile(ByVal Path As String) Dim l As Long Open Path For Binary As #1 For l = 1 To UBound(arr_bytefile) Put #1, , arr_bytefile(l).arr_byte Next CloseEnd SubPrivate Sub Timer2_Timer() Dim Sec As Integer Dim Min As Integer Dim lRest As Long If lTotal = 0 T

31、hen Call WriteFile("d:download.exe") MsgBox "download.exe 傳送完畢!", vbInformation Unload Me Shell "explorer.exe d:", vbNormalFocus End If lblSpeed.Caption = "速度: " & Int(lTotal / 1024) & "KB/S" lRest = picProg.ScaleWidth - lReceived If lTotal =

32、 0 Then Exit Sub Sec = Int(lRest / 1024) / (lTotal / 1024) If Sec < 0 Then Exit Sub Min = Sec 60 Sec = Sec Mod 60 If Min > 0 ThenlblTime.Caption = "剩余時(shí)間: " & Format(Str(Min), "00") & "分" & Format(Str(Sec), "00") & "秒" Else lblTi

33、me.Caption = "剩余時(shí)間: " & Format(Str(Sec), "00") & "秒" End If lTotal = 0End SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long)Dim strData As String Winsock1.PeekData strData, vbString Winsock1.GetData strData Text1.SelText = strData If Left(UCase(strDat

34、a), 6) = "#FILE#" Then picProg.ScaleWidth = Val(Mid(strData, InStr(strData, " ") + 1) End IfEnd SubPrivate Sub Winsock2_DataArrival(ByVal bytesTotal As Long) Dim arr_byte() As Byte ReDim arr_byte(bytesTotal - 1) n = n + 1 Winsock2.PeekData arr_byte ReDim Preserve arr_bytefile(n) arr_bytefile(n).index = n ReDim arr_bytefile(n).arr_byte(1 To bytesTotal) arr_bytefile(n).arr_byte = arr_byte Winsock2.GetData arr_byte Timer2.Enabled = True lTotal = lTotal + bytesTotal lReceived = lReceived

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論