通信網(wǎng)原理課程設(shè)計(jì)報(bào)告_第1頁(yè)
通信網(wǎng)原理課程設(shè)計(jì)報(bào)告_第2頁(yè)
通信網(wǎng)原理課程設(shè)計(jì)報(bào)告_第3頁(yè)
通信網(wǎng)原理課程設(shè)計(jì)報(bào)告_第4頁(yè)
通信網(wǎng)原理課程設(shè)計(jì)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩24頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、中 南 大 學(xué)通信網(wǎng)原理課程設(shè)計(jì)報(bào)告 專(zhuān)業(yè)班級(jí) 電子信息1002班 姓名學(xué)號(hào) 指導(dǎo)教師 陳科文、支國(guó)明、周揚(yáng) 設(shè)計(jì)時(shí)間 2013年7月 電子信息工程系 信息科學(xué)與工程學(xué)院 目錄 第一章 距離矢量路由算法實(shí)現(xiàn)11.1、課程設(shè)計(jì)目的與主要任務(wù)11.1.1、課程設(shè)計(jì)目的11.1.2、課程設(shè)計(jì)主要任務(wù)11.2、課程設(shè)計(jì)題目和設(shè)計(jì)21.3、設(shè)計(jì)思想31.4、編程實(shí)現(xiàn)過(guò)程的詳細(xì)說(shuō)明51.4.1、程序界面設(shè)計(jì)51.4.2、總體工作流程圖51.4.3、關(guān)鍵函數(shù)和語(yǔ)句的說(shuō)明61.4.4、設(shè)計(jì)結(jié)果的演示與分析等。101.5、設(shè)計(jì)總結(jié)111.6、參考文獻(xiàn)111.7、附錄:源程序代碼12第二章 文件傳輸192.1、課

2、程設(shè)計(jì)目的與主要任務(wù)192.1.1、課程設(shè)計(jì)目的192.1.2、課程設(shè)計(jì)主要任務(wù)192.2、課程設(shè)計(jì)題目和設(shè)計(jì)202.3、設(shè)計(jì)思想212.4、編程實(shí)現(xiàn)過(guò)程的詳細(xì)說(shuō)明232.4.1、程序界面設(shè)計(jì)232.4.2、總體工作流程圖232.4.3、設(shè)計(jì)結(jié)果的演示與分析242.5、設(shè)計(jì)總結(jié)272.6、參考文獻(xiàn)272.7、附錄:源程序代碼28第1章 距離矢量路由算法的實(shí)現(xiàn)1.1 課程設(shè)計(jì)目的及主要任務(wù) 本次課程設(shè)計(jì)的目的是通 過(guò)將理論與實(shí)踐相結(jié)合,使學(xué)生進(jìn)一步深入理解通信網(wǎng)的工作原理,掌握網(wǎng)絡(luò)應(yīng) 用開(kāi)發(fā)技術(shù),學(xué)會(huì)應(yīng)用所學(xué)理論知識(shí)來(lái)分析和解決實(shí)際問(wèn)題,培養(yǎng)網(wǎng)絡(luò)技術(shù)研究 與開(kāi)發(fā)的基本能力以及創(chuàng)新精神。本課程設(shè)計(jì)

3、的主要任務(wù)是在 掌握計(jì)算機(jī)網(wǎng)絡(luò)TCP/IP等典型協(xié)議原理的基礎(chǔ)上,通過(guò)編程設(shè)計(jì)對(duì)網(wǎng)絡(luò)協(xié)議或 算法進(jìn)行模擬實(shí)現(xiàn),并應(yīng)用相應(yīng)網(wǎng)絡(luò)協(xié)議來(lái)開(kāi)發(fā)一個(gè)網(wǎng)絡(luò)應(yīng)用系統(tǒng)。1.2 課程設(shè)計(jì)要求(1)系統(tǒng)功能要求:編寫(xiě)距離矢量路由選擇算法演示程序,能根據(jù)網(wǎng)絡(luò)拓?fù)浜途€路延遲的變化自動(dòng)更新路由表,并輸出結(jié)果。可從文件(格式自定)中讀取網(wǎng)絡(luò)拓?fù)浣Y(jié) 構(gòu),包括連通狀態(tài)和直連兩點(diǎn)間延遲,可輸出任一點(diǎn)的鄰接結(jié)點(diǎn)和對(duì)應(yīng)的延遲。按照?qǐng)D的最短路徑算法構(gòu)造網(wǎng)絡(luò)的初始路由表,能輸出任意兩點(diǎn)間的延遲 和最短路徑;可以改變?nèi)我稽c(diǎn)鄰接結(jié)點(diǎn)的路由表和之間的延遲,按照距離矢 量路由選擇算法計(jì)算出新的路由表。要求: 能正確的輸出路由信息。 (2)運(yùn)行

4、條件:基于C_free程序的平臺(tái)(3)用戶(hù)操作要求:能夠輸入相應(yīng)路由值,并能繼續(xù)或結(jié)束程序運(yùn)行1.3 設(shè)計(jì)思想 (1)實(shí)驗(yàn)原理:路由以矢量(距離、方向)的方式被通告出去的,其中距離是根據(jù)度量來(lái)定義的,方向是根據(jù)下一跳路由器定義的。被認(rèn)為是“依照傳聞進(jìn)行路由選擇”,RIP協(xié)議使用距離矢量算法,網(wǎng)絡(luò)工作時(shí)路由器之間利用此協(xié)議更新路由表項(xiàng),每隔2分鐘更新一次。路由表項(xiàng)格式:(direction,jump,next)分別表示目的網(wǎng)絡(luò)地址,跳數(shù)(距離),下一跳路由地址當(dāng)某路由器A收到相鄰路由器B發(fā)來(lái)的路由信息(D,J,N)后執(zhí)行以下分析:首先修改(D,J,N)(D,J1,B)1 如果A沒(méi)有到D的路由信息

5、,則生成路由表項(xiàng)(D,J1,B);否則22 A有到D的路由信息(D,?,B)?就是116任意值,則將其更新為(D,J1,B);否則33 A有到D的路由信息(D,K,X)其中KJ1,X!B,則將其更新為(D,J1,B);否則44 什么都不做。這是自己做本實(shí)驗(yàn)時(shí)總結(jié)的原理。 (2)關(guān)鍵問(wèn)題:要實(shí)現(xiàn)線路延遲的變化即時(shí)更新路由表;構(gòu)造最短路徑程序。1.4 程序設(shè)計(jì)(1)流程圖接受到數(shù)據(jù)包YES廣播幀廣播幀?NOYES將幀發(fā)送到其上層為本設(shè)備的幀?NO目的設(shè)備為本設(shè)備的子設(shè)備YES直接到目的設(shè)備路由NONO是否有路由能力NONONO是否選擇路由為該目的路由沿樹(shù)選擇路由YESYES開(kāi)始選擇最短路由到下一跳

6、路由(2) 關(guān)鍵函數(shù)說(shuō)明:第一個(gè)是INITDATA: void InitData(FILE *pfile)char num10;int i = 0;char c;int m, n;fseek(pfile, 0, 0); /文件指針從距0位置0距離開(kāi)始讀取for (m = 0; !feof(pfile) && m < 7; m+) /feof(pfile),文件尾返回1,不是返回0.即不是文件尾部且m<7循環(huán).for (n = 0; !feof(pfile) && n < 7; n+)while (!feof(pfile)c = fgetc(pf

7、ile); /讀取單個(gè)字節(jié)if (c = ',')/*讀完一個(gè)數(shù)字*/numi = '0' /賦值為空datamn.dis = atoi(num);/atoi將字符變成數(shù)字,將路由權(quán)值給data.disdatamn.from = -1; /直接相連下一跳全都賦值為-1i = 0;break; /*end of if*/else if (c >= '0' && c <= '9') | c = '-') /*如果讀到數(shù)字或符號(hào).本題路由權(quán)值只能0到9*/numi+ = c; /*end of

8、 else if*/ /*end of while*/ /*end of for (n = 0*/ /*end of for (m = 0*/第二個(gè)是Outputroutdata: void OutputRoutData()int i, j;printf(" ");for (i = 0; i < MAX_ROUTES; i+)printf(" %c ", i + 65);printf("n");for (i = 0; i < MAX_ROUTES; i+)printf("%c ", i + 65);fo

9、r (j = 0; j < MAX_ROUTES; j+)if (dataij.dis < 0)/如果無(wú)路徑printf(" -");elseif(dataij.dis>=10)printf(" %d", dataij.dis);elseprintf(" %d", dataij.dis);if (dataij.from < 0)/如果未經(jīng)過(guò)其它節(jié)點(diǎn) 所以直接相連的路由下一跳為-1printf(" - ");elseprintf(" %c ", dataij.from +

10、65); /輸出下一跳路由 printf("n"); void Communication(int recv, int send) /相連的兩路由recv和send交換數(shù)據(jù)計(jì)算一次得到暫時(shí)最短距離int i;for (i = 0; i < MAX_ROUTES; i+)if (datasendi.dis > 0)/如果send節(jié)點(diǎn)到i號(hào)節(jié)點(diǎn)有路線if (datarecvi.dis < 0)/如果recv到i號(hào)節(jié)點(diǎn)無(wú)路徑 datarecvi.dis = datasendi.dis + datarecvsend.dis; /第一種recv不與i相連,recv到

11、不與他相連的i的延遲datarecvi.from = send; /下一跳為sendelse if (datarecvi.dis > datasendi.dis + datarecvsend.dis)/第二種recv與i相連,且直接相連值大于間接到i的延遲 /如果現(xiàn)有路徑比新路徑遠(yuǎn)datarecvi.dis = datasendi.dis + datarecvsend.dis; /將recv到i的延遲改為間接延遲的值datarecvi.from = send; /下一跳改為send void Exchange() /實(shí)現(xiàn)所有相連的兩路由進(jìn)行數(shù)據(jù)交換并計(jì)算最短數(shù)值int i, j;for

12、(i = 0; i < MAX_ROUTES; i+)for (j = 0; j <MAX_ROUTES; j+)if (dataij.dis > 0)/如果兩個(gè)節(jié)點(diǎn)之間有路徑Communication(j, i);/將i號(hào)節(jié)點(diǎn)的路由表發(fā)送給j號(hào)節(jié)點(diǎn) 第三個(gè)是主函數(shù): main() int start, end, i, j;FILE *pfile;pfile = fopen("1.txt", "r");if (p NULL)printf("文件打開(kāi)錯(cuò)誤,按任意鍵退出.n");getch();return 0;else

13、printf("n路由表初始:n");InitData(pfile);fclose(pfile);for (i = 0; i<MAX_ROUTES; i+)printf("%c|", i + 65);for (j = 0; j < MAX_ROUTES; j+)if (dataij.dis > 0)printf("<%c %d> ", j + 65, dataij.dis);printf("n"); /顯示各路由的路由表 Exchange(); /更新路由表 printf("

14、n路由表交換:n");OutputRoutData();printf("輸入起始路由節(jié)點(diǎn)數(shù)字(%d-%d)0代表A,1代表B. : ", 0, MAX_ROUTES - 1);scanf("%d", &start);printf("輸入終點(diǎn)路由節(jié)點(diǎn)數(shù)字(%d-%d)0代表A,1代表B. : ", 0, MAX_ROUTES - 1);scanf("%d", &end);if (start = end | start < 0 | start > 6 | end < 0 |

15、end > 6)printf("n輸入錯(cuò)誤,請(qǐng)按任意鍵退出n");getch();return 0;elseint cur = start;int total = 0;if (datastartend.dis < 0)printf("沒(méi)有路由路徑發(fā)現(xiàn)!n");getch();return 0; printf("%c->", cur + 65);while (datacurend.from >= 0) /起始點(diǎn)與終點(diǎn)不相連。0是Atotal += datacurdatacurend.from.dis; /tota

16、l變成cur與下一跳的延遲printf("%c->", datacurend.from + 65);cur = datacurend.from; /起始路由變成下一跳 total += datacurend.dis;printf("%cn總的路由距離 = %d", end + 65, total);getch();return 0; (3) 設(shè)計(jì)結(jié)果演示:運(yùn)行程序后,顯示初始認(rèn)為設(shè)計(jì)的路由表的各項(xiàng)權(quán)值,設(shè)計(jì)思想是-1代表無(wú)窮。出現(xiàn)路由表的交換,路徑權(quán)值。如圖(1)所示:圖(1)輸入始末路由節(jié)點(diǎn)后,程序會(huì)計(jì)算出最短路徑,并顯示出來(lái),還會(huì)自動(dòng)計(jì)算最短路

17、徑的權(quán)值。如圖(2)所示:圖(2)A(4) 網(wǎng)絡(luò)拓?fù)鋱D5287GBE1543DC9F1.5 參考文獻(xiàn)1(美)Larry L.Peterson,Bruce S.Davie 著,薛靜鋒,等譯.計(jì)算機(jī)網(wǎng)絡(luò):系統(tǒng)方法 (第4 ).北京:機(jī)械工業(yè)出版社.2 吳英編著.計(jì)算機(jī)網(wǎng)絡(luò)應(yīng)用軟件編程技術(shù).北京:機(jī)械工業(yè)出版社,20103 譚浩強(qiáng)著C程序設(shè)計(jì)(第四版) 清華大學(xué)出版社第2章 文件傳輸程序2.1 課程設(shè)計(jì)目的及主要任務(wù) 本次課程設(shè)計(jì)的目的是通 過(guò)將理論與實(shí)踐相結(jié)合,使學(xué)生進(jìn)一步深入理解通信網(wǎng)的工作原理,掌握網(wǎng)絡(luò)應(yīng) 用開(kāi)發(fā)技術(shù),學(xué)會(huì)應(yīng)用所學(xué)理論知識(shí)來(lái)分析和解決實(shí)際問(wèn)題,培養(yǎng)網(wǎng)絡(luò)技術(shù)研究 與開(kāi)發(fā)的基本能力

18、以及創(chuàng)新精神。本課程設(shè)計(jì)的主要任務(wù)是在 掌握計(jì)算機(jī)網(wǎng)絡(luò)TCP/IP等典型協(xié)議原理的基礎(chǔ)上,通過(guò)編程設(shè)計(jì)對(duì)網(wǎng)絡(luò)協(xié)議或 算法進(jìn)行模擬實(shí)現(xiàn),并應(yīng)用相應(yīng)網(wǎng)絡(luò)協(xié)議來(lái)開(kāi)發(fā)一個(gè)網(wǎng)絡(luò)應(yīng)用系統(tǒng)。2.2 課程設(shè)計(jì)要求(1)系統(tǒng)功能要求:包括客戶(hù)端和服務(wù)器程序,應(yīng)實(shí)現(xiàn)以下功能:(1)客戶(hù)端既能上 傳文件到服務(wù)器,也能從服務(wù)器下載文件;(2)在客戶(hù)端上可顯示文件基本信息 和傳輸狀態(tài)信息,可瀏覽服務(wù)器上供下載的文件列表,選擇某文件下載到本地某 目錄下;(3)服務(wù)器端能接收客戶(hù)端上傳的文件,并保存在某一目錄下;也能響 應(yīng)客戶(hù)端的文件瀏覽與下載請(qǐng)求;(4)增加其它附加創(chuàng)新功能。程序應(yīng)具有圖形 化界面,美觀友好。 (2)運(yùn)行

19、條件:基于Microsoft Visual Basic 6.0軟件與WINSOCK控件。(3) 用戶(hù)操作要求:能顯示出文件傳輸設(shè)計(jì)界面,能運(yùn)行界面上的操作按鈕,并能即時(shí)開(kāi)啟和關(guān)閉程序。(4)2.3 設(shè)計(jì)思想 (1)實(shí)驗(yàn)原理:FTP的主要功能是在主機(jī)間高速可靠地傳輸文件。目前FTP仍然保持其可靠性,即使在今天,它還允許文件遠(yuǎn)程存取。這使得用戶(hù)可以在某個(gè)系統(tǒng)上工作,而將文件存貯在別的系統(tǒng)。例如,如果某用戶(hù)運(yùn)行Web服務(wù)器,需要從遠(yuǎn)程主機(jī)上取得HTML文件和CGI程序在本機(jī)上工作,他需要從遠(yuǎn)程存儲(chǔ)站點(diǎn)獲取文件(遠(yuǎn)程站點(diǎn)也需安裝Web服務(wù)器)。當(dāng)用戶(hù)完成工作后,可使用FTP將文件傳回到Web服務(wù)器。采

20、用這種方法,用戶(hù)無(wú)需使用Telnet登錄到遠(yuǎn)程主機(jī)進(jìn)行工作,這樣就使Web服務(wù)器的更新工作變得如此的輕松。 的一種具體應(yīng)用,它工作在OSI模型的第七層,TCP模型的第四層上,即應(yīng)用層,使用TCP傳輸而不是UDP,這樣FTP客戶(hù)在和服務(wù)器建立連接前就要經(jīng)過(guò)一個(gè)被廣為熟知的"三次握手"的過(guò)程,它帶來(lái)的意義在于客戶(hù)與服務(wù)器之間的連接是可靠的,而且是面向連接,為數(shù)據(jù)的傳輸提供了可靠的保證。而設(shè)計(jì)本實(shí)驗(yàn)的時(shí)候,利用VB程序設(shè)計(jì),是運(yùn)用Winsock控件來(lái)進(jìn)行兩臺(tái)計(jì)算間的文件傳輸。隨著計(jì)算機(jī)網(wǎng)絡(luò)的迅速發(fā)展,人們的生活越來(lái)越離不開(kāi)網(wǎng)絡(luò),如今網(wǎng)絡(luò)編程已成為計(jì)算機(jī)發(fā)展的熱點(diǎn),而在眾多的網(wǎng)絡(luò)通

21、信中,又以TCP/IP協(xié)議最為流行。本文討論的Winsock控件,提供了訪問(wèn)TCP/IP網(wǎng)絡(luò)的捷徑,使用它可以不必了解TCP/IP的細(xì)節(jié)和調(diào)用Winsock API,只要設(shè)置好相應(yīng)的屬性和觸發(fā)事件后的處理,就可以實(shí)現(xiàn)計(jì)算機(jī)之間的數(shù)據(jù)通信.Winsock即Windows Sockets規(guī)范的簡(jiǎn)稱(chēng),是目前最流行的網(wǎng)絡(luò)通信應(yīng)用程序接口之一。所謂Socket,通常也稱(chēng)作"套接字",用于描述IP地址和端口,是一個(gè)通信鏈的句柄。應(yīng)用程序通常通過(guò)“套接字”向網(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)求,利用它可以較為方

22、便的編寫(xiě)網(wǎng)絡(luò)上數(shù)據(jù)的傳遞。Winsock控件工作在傳輸層上,在這一層上,目前主要流行的協(xié)議包括TCP和UDP兩種:TCP協(xié)議適用于那些對(duì)于數(shù)據(jù)的可靠性要求比較高的情況,目前大多數(shù)的網(wǎng)絡(luò)應(yīng)用層協(xié)議都是基于TCP協(xié)議的(例如常用的HTTP、POP3等協(xié)議);UDP協(xié)議適用于對(duì)數(shù)據(jù)可靠性要求不高而對(duì)速度要求較高的情況,這里主要包括一些需要大流量的.Winsock控件是基于Socket規(guī)范創(chuàng)建的,所以其通信的實(shí)質(zhì)是對(duì)Socket接口進(jìn)行數(shù)據(jù)的讀寫(xiě)操作。如果兩個(gè)應(yīng)用程序需要通信,它們可以通過(guò)使用Socket類(lèi)來(lái)建立套接字連接,可以將這個(gè)過(guò)程想象為一次電話(huà)呼叫過(guò)程:呼叫者通過(guò)撥號(hào)與被呼叫者連接,當(dāng)電話(huà)接通

23、時(shí),雙方都可以自由通話(huà)了,只不過(guò)這里的呼叫者被稱(chēng)為“客戶(hù)”,被呼叫者則稱(chēng)為“服務(wù)器”,而號(hào)碼則為“IP地址+端口”,但在建立連接之前,必須由“客戶(hù)”發(fā)出呼叫,且此時(shí)的“服務(wù)器”正在監(jiān)聽(tīng)。因此,基于TCP/IP協(xié)議的通信,需要分別建立客戶(hù)端應(yīng)用程序和服務(wù)器端應(yīng)用程序。2.4 程序設(shè)計(jì)(1) 流程圖 主程序流程圖 發(fā)送數(shù)據(jù)流程圖 接受處理流程圖開(kāi)始開(kāi)始開(kāi)始建立連接操作系統(tǒng)初始化查詢(xún)TCP SOCKET是否連接創(chuàng)建任務(wù)查看連接狀態(tài)與服務(wù)器IP地址或端口號(hào)進(jìn)行TCP連接開(kāi)始任務(wù)在TCP通道上收到數(shù)據(jù)?接受數(shù)據(jù)任務(wù)發(fā)送數(shù)據(jù)信息NN解碼收到的數(shù)據(jù)發(fā)送延遲?發(fā)送完畢YY進(jìn)行相應(yīng)的操作休眠或關(guān)閉連接發(fā)送數(shù)據(jù)任

24、務(wù) (2) 關(guān)鍵函數(shù)說(shuō)明:Option ExplicitDim As String, As BooleanDim As String, As LongConst Text = "文件名: 未選擇文件" & vbCrLf & vbCrLf & "文件長(zhǎng)度: 未選擇文件"Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As LongPrivate Declare Function WindowFromPoint Lib

25、 "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As LongPrivate Type POINTAPI X As Long Y As LongEnd TypeDim MousePos As POINTAPIDim () As BytePrivate Sub Com_OK_Click()On Error GoTo ErrIf Coption = "偵聽(tīng)" Then Winsock1.Close Winsock1.RemotePort = 0 Winsock1.LocalPort = Val(T

26、_Prot) Winsock1.Listen CenterPrint Pic_Connect, "正在偵聽(tīng)"Else Winsock1.Close Winsock1.RemoteHost = T_PCIP Winsock1.LocalPort = 0 Winsock1.RemotePort = Val(T_Prot) Winsock1.ConnectCenterPrint Pic_Connect, "正在連接"End IfExit SubErr:MsgBox Err.Description, 16, Err.NumberEnd SubPrivate Su

27、b Com_Close_Click()Dim Temp As ByteIf = True Then Temp = MsgBox("當(dāng)前正在傳輸文件,確定要中斷連接?", 289, "提示")Else Temp = 1End IfIf Temp = 1 Then Winsock1_CloseEnd SubPrivate Sub Com_Send_Click()If Coption = "發(fā)送文件" Then If Winsock1.State = 7 Then If > 0 And <> "" Th

28、en Winsock1.SendData UTF8_Encode("101") Winsock1.SendData UTF8_Encode() Coption = "取消發(fā)送" Send = "正在等待對(duì)方響應(yīng)" = True Else MsgBox "尚未選擇文件或文件長(zhǎng)度為零", 64, "提示" End If Else MsgBox "請(qǐng)先建立連接!", 64, "提示" End IfElse Winsock1.SendData UTF8_Encod

29、e("255") = False Coption = "發(fā)送文件" Label4 = "工作狀態(tài):空閑"End IfEnd SubPrivate Sub command4_click()EndEnd SubPublic As String '定義變量,存放文件名Public As Integer '定義變量,設(shè)置文件號(hào)Private Sub command1_click() = FreeFile() '求空閑的文件號(hào)Open For Input As '以文件號(hào)打開(kāi)文件MsgBox "文件&q

30、uot; & & "已打開(kāi)"End SubPrivate Sub command2_click()While Not EOF() '取文件內(nèi)容Input #, str1T_ = T_ & Chr(10) & Chr(13) & str1 & Chr(10) & Chr(13)Wend '顯示到文本框中Close '關(guān)閉文件End SubPrivate Sub dir1_change() = Dir1.Path '改變目錄列表框時(shí),文件列表框的副目錄也改變End SubPrivate Su

31、b drive1_change() Dir1.Path = Drive1.Drive '改變磁盤(pán)時(shí),目錄列表框的根發(fā)生變化 End Sub Private Sub () = & "" & '取得文件名 End SubPrivate Sub Form_Load()SetWindowIcon Me, 101Form_ResizeCenterPrint Pic_IP, "PCIP:"CenterPrint Pic_Prot, "Prot:"CenterPrint Pic_Connect, "已準(zhǔn)備就

32、緒"Option_Click (0)T_Prot.SelStart = Len(T_Prot)T_File = TextEnd SubPrivate Sub Form_Resize()If Me.WindowState <> 1 Then 'Me.Height = Frame1.Height + Frame2.Height + 120 + 615 'Me.Width = Frame2.Width + 330End IfEnd SubPrivate Sub Form_Unload(Cancel As Integer)If Winsock1.State = 7

33、 Then MsgBox "檢測(cè)到尚有未關(guān)閉的連接,請(qǐng)先關(guān)閉連接。", 64, "提示" Cancel = 2Else Close #1End IfEnd SubPrivate Sub Option_Click(Index As Integer)On Error Resume NextIf Index = 0 Then T_PCIP = Winsock1.LocalIP T_PCIP.Enabled = False Coption = "偵聽(tīng)" T_Prot.SelStart = Len(T_Prot) T_Prot.SetFocus

34、Else T_PCIP = "" T_PCIP.Enabled = True Coption = "連接" T_PCIP.SetFocusEnd IfWinsock1.CloseCenterPrint Pic_Connect, "已準(zhǔn)備就緒"End SubPrivate Sub Picture2_Click()End SubPrivate Sub T_(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As S

35、ingle)On Error GoTo Err = Data.Files(1) = Mid(, InStrRev(, "") + 1)Close #1Open For Binary As #1 = LOF(1)T_File = "文件名:" & & vbCrLf & vbCrLf & "文件長(zhǎng)度:" & Exit SubErr:If Err.Number = 75 Then MsgBox "文件打開(kāi)錯(cuò)誤,無(wú)法發(fā)送!", 4096 + 16, "提示"Els

36、e MsgBox Err.Description, 4096 + 16, Err.NumberEnd IfEnd SubPrivate Sub Timer1_Timer()GetCursorPos MousePosIf Picture2.hwnd <> WindowFromPoint(MousePos.X, MousePos.Y) Then Picture2.Visible = False Timer1.Enabled = False Frame1.Enabled = True Frame2.Enabled = True Frame3.Enabled = TrueEnd IfEnd

37、 SubPrivate Sub Winsock1_Close()Winsock1.CloseCenterPrint Pic_Connect, "連接已被中斷"Frame1.Enabled = TrueLabel3 = "建立連接:尚未連接"Label4 = "工作狀態(tài):尚未連接"Coption = "發(fā)送文件"Com_Send.Enabled = True = FalseSend = 0Send = "文件傳輸進(jìn)度"End SubPrivate Sub Winsock1_Connect()Cen

38、terPrint Pic_Connect, "已建立連接"Frame1.Enabled = FalseT_PCIP = Winsock1.RemoteHostIPLabel3 = "建立連接:" & TimeLabel4 = "工作狀態(tài):空閑"End SubPrivate Sub Winsock1_ConnectionRequest(ByVal requestID As Long)Winsock1.CloseWinsock1.Accept requestIDCenterPrint Pic_Connect, "已建立連

39、接"Frame1.Enabled = FalseLabel3 = "建立連接:" & TimeLabel4 = "工作狀態(tài):空閑"End SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long)Dim ComByte As Long, Temp As Long, J As LongStatic DataByt() As ByteStatic () As ByteStatic Received As LongConst PACKSIZE = 8192 '65536R

40、eDim DataByt(bytesTotal)Winsock1.GetData DataByt, vbArray + vbByte'-獲取指令ComByte = Val(Left(UTF8_Decode(DataByt), 3) Select Case ComByte'-文件請(qǐng)求發(fā)送接收或拒絕 Case Is = 101 = Mid(UTF8_Decode(DataByt), 4) If MsgBox("對(duì)方請(qǐng)求發(fā)送文件" & & "是否接收?", vbYesNo + 32 + 4096, "提示")

41、 = 6 Then Label4 = "工作狀態(tài):正在接收數(shù)據(jù)." Winsock1.SendData UTF8_Encode("201") '同意請(qǐng)求 = True Else Winsock1.SendData UTF8_Encode("202") '拒絕請(qǐng)求 End If'-文件長(zhǎng)度發(fā)送斷點(diǎn)位置 Case Is = 102 On Error GoTo OpenErr: Dim N As Long Dim LName As String, RName As String = Val(Mid(UTF8_Deco

42、de(DataByt), 4) LName = Left(, InStrRev(, ".") - 1) RName = Mid(, InStrRev(, ".") Do While Dir() <> "" N = N + 1 = LName & "(" & N & ")" & RName Loop Close #2 Open & ".XFRJ" For Binary Lock Read Write As #2 Winsock

43、1.SendData UTF8_Encode("203") Winsock1.SendData UTF8_Encode(CStr(LOF(2) Received = LOF(2) T_File = "文件名:" & & vbCrLf & vbCrLf & "文件長(zhǎng)度:" & Coption = "取消接收" Send = "正在接收文件"'-對(duì)方接受請(qǐng)求發(fā)送文件長(zhǎng)度 Case Is = 201 If Then Send = "正在發(fā)送文件

44、" Label4 = "工作狀態(tài):正在發(fā)送數(shù)據(jù)." Winsock1.SendData UTF8_Encode("102") Winsock1.SendData UTF8_Encode() End If'-對(duì)方拒絕請(qǐng)求初始化 Case Is = 202 MsgBox "對(duì)方拒絕接收文件" & & "!", 4096 + 64, "提示" Coption = "發(fā)送文件" = False Send = "文件傳輸進(jìn)度"

45、9;-對(duì)方斷點(diǎn)位置發(fā)送文件 Case Is = 203 If Then On Error GoTo SendErr: Received = Val(Mid(UTF8_Decode(DataByt), 4) Temp = IIf(PACKSIZE + Received > LOF(1), LOF(1) - Received - 1, PACKSIZE - 1) If Temp < 0 Then Temp = 0 ReDim DataByt(Temp) For J = 0 To Temp Get #1, Received + J + 1, DataByt(J) Next Winsock

46、1.SendData DataByt Received = Received + PACKSIZE Send = Int(Received / ) * 100) DoEvents If Received >= LOF(1) Then = False Send = "文件傳輸進(jìn)度" Label4 = "工作狀態(tài):空閑" Coption = "發(fā)送文件" MsgBox "發(fā)送完成!", 4096 + 64, "提示" End If On Error GoTo 0 End If'-接收錯(cuò)

47、誤終止初始化 Case Is = 253 MsgBox "文件接收端錯(cuò)誤,接收!", 4096 + 16, "錯(cuò)誤" = False Send = "文件傳輸進(jìn)度" Label4 = "工作狀態(tài):空閑" Coption = "發(fā)送文件"'-發(fā)送錯(cuò)誤終止初始化 Case Is = 254 MsgBox "文件發(fā)送端發(fā)生錯(cuò)誤,發(fā)送終止!", 4096 + 16, "錯(cuò)誤" = False Send = "文件傳輸進(jìn)度" Label4

48、 = "工作狀態(tài):空閑" Coption = "發(fā)送文件"'-對(duì)方取消傳輸初始化 Case Is = 255 = False MsgBox "文件" & & "的傳輸已被對(duì)方取消!", 4096 + 64, "提示" Coption = "發(fā)送文件" Label4 = "工作狀態(tài):空閑" = False'-正在傳輸文件寫(xiě)入文件 Case Else On Error GoTo SaveErr: If Then Temp = L

49、OF(2) '保存寫(xiě)入前文件長(zhǎng)度 ReDim (bytesTotal) For J = 1 To UBound() (J) = DataByt(J - 1) Next For J = Received + 1 To Received + UBound() Put #2, J, (J - Received) DoEvents Next Temp = LOF(2) '保存寫(xiě)入后文件長(zhǎng)度 If Err.Number <> 0 Then Err.Clear: Caption = "數(shù)據(jù)錯(cuò)誤,重新請(qǐng)求" Winsock1.SendData UTF8_Encode("203") Winsock1.SendData UTF8_Encode(CStr(Temp) Received = Received + bytesTotal Send = Int(Received / ) * 100) DoEvents If Received >= Then = False Close #2 Send = "文件傳輸進(jìn)度" Label4 = "工作狀態(tài):空閑" C

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論