中文国产日韩欧美视频,午夜精品999,色综合天天综合网国产成人网,色综合视频一区二区观看,国产高清在线精品,伊人色播,色综合久久天天综合观看

淺談基于多線程的網(wǎng)絡(luò)文件傳輸工具的改造論文

時(shí)間:2024-06-27 13:27:40 論文范文 我要投稿
  • 相關(guān)推薦

淺談基于多線程的網(wǎng)絡(luò)文件傳輸工具的改造論文

  1 引言

淺談基于多線程的網(wǎng)絡(luò)文件傳輸工具的改造論文

  如今,隨著計(jì)算機(jī)應(yīng)用的普及,許多人也已經(jīng)將進(jìn)入Internet作為下一個(gè)計(jì)算機(jī)升級(jí)的目標(biāo),而用Internet進(jìn)行文件傳輸,則是計(jì)算機(jī)聯(lián)入Internet的一個(gè)重要功能之一。因此各種文件傳輸系統(tǒng)便應(yīng)運(yùn)而生,如郵件,聊天工具等。這些軟件在使用上各有所長,但與此同時(shí),其自身仍存在缺點(diǎn)和局限性,這些都給文件傳輸帶來了很多不便。首先,對(duì)遠(yuǎn)程服務(wù)器的依賴導(dǎo)致有些文件傳輸工具不能完全實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)的文件傳輸,甚至對(duì)文件的安全造成了威脅。其次,這些傳輸工具只適宜傳輸體積較小的文件,如果傳輸?shù)奈募w積過大,則會(huì)耗費(fèi)很長時(shí)間,進(jìn)而導(dǎo)致資源的浪費(fèi),倘若網(wǎng)絡(luò)速度不理想,更有可能會(huì)導(dǎo)致傳輸中斷。因此,開發(fā)一個(gè)功能簡單,易于操作,傳輸效率高的文件傳輸工具勢(shì)在必行。

  2 環(huán)境與相關(guān)開發(fā)技術(shù)

  2.1 Sock網(wǎng)絡(luò)編程原理套接字(socket)是一種網(wǎng)絡(luò)編程接口,實(shí)際上就是一個(gè)通信端點(diǎn),提供了發(fā)送和接收數(shù)據(jù)的機(jī)制。而Winsock是基于Windows操作系統(tǒng)下的網(wǎng)絡(luò)編程接口,也就是基于Socket模型的API。而最簡單的一對(duì)一的CS結(jié)構(gòu)的通信程序,就只有兩個(gè)端點(diǎn),即兩個(gè)套接字(Socket),一個(gè)在Server端,另一個(gè)在Client端,這兩個(gè)套接字就在CS間建立了雙向數(shù)據(jù)傳送的連接。每個(gè)套接字都有一個(gè)套接字地址,通常是IP和端口的組合。Socket分為阻塞模式和非阻塞模式:阻塞模式是指在指定套接字上調(diào)用函數(shù)執(zhí)行操作時(shí),在沒有完成操作之前,函數(shù)不會(huì)立即返回。例如,服務(wù)器程序在阻塞模式下調(diào)用accept()函數(shù)時(shí)將會(huì)阻塞服務(wù)器線程,直至接收到一個(gè)來自客戶端的連接請(qǐng)求。默認(rèn)創(chuàng)建的套接字為阻塞模式。非阻塞模式是指在指定套接字上調(diào)用函數(shù)執(zhí)行操作時(shí),無論操作是否完成,函數(shù)都會(huì)立即返回。例如,在非阻塞模式下調(diào)用recv()函數(shù)時(shí),程序會(huì)直接讀取網(wǎng)絡(luò)緩沖區(qū)中的數(shù)據(jù),無論是否讀到數(shù)據(jù),函數(shù)都會(huì)立即返回,而不會(huì)一直掛在此函數(shù)的調(diào)用上。在并發(fā)線程模型中,服務(wù)器程序中使用了一個(gè)線程來等待客戶端的連接請(qǐng)求,然后創(chuàng)建新線程與客戶端進(jìn)行通信。因?yàn)槊總(gè)客戶端都擁有一個(gè)專門的通信服務(wù)線程,所以能夠很及時(shí)地與服務(wù)器程序進(jìn)行通信,不需要等待其他客戶端通信結(jié)束。因此本設(shè)計(jì)采用了socket的非阻塞模式。2.2 c/s結(jié)構(gòu)C/S (Client/Server)結(jié)構(gòu),它是一種軟件系統(tǒng)體系結(jié)構(gòu),也就是客戶機(jī)/服務(wù)器結(jié)構(gòu)。它可以充分利用兩端硬件環(huán)境的優(yōu)勢(shì),將任務(wù)合理分配到Client端和Server端來實(shí)現(xiàn)。C/S結(jié)構(gòu)的基本原則是“功能分布”原則,也就是將計(jì)算機(jī)應(yīng)用任務(wù)分解成多個(gè)子任務(wù),由多臺(tái)計(jì)算機(jī)分工完成?蛻舳送瓿蓴(shù)據(jù)處理,數(shù)據(jù)表示以及用戶接口功能;服務(wù)器端完成DBMS的核心功能。這種客戶請(qǐng)求服務(wù)、服務(wù)器提供服務(wù)的處理方式是一種新型的計(jì)算機(jī)應(yīng)用模式,F(xiàn)在已經(jīng)普遍采用3層C/S結(jié)構(gòu),與傳統(tǒng)的二層結(jié)構(gòu)相比,三層C/S結(jié)構(gòu)具有以下優(yōu)點(diǎn):首先,合理地劃分三層結(jié)構(gòu)的功能,從而使整個(gè)系統(tǒng)的邏輯結(jié)構(gòu)更為清晰,提高系統(tǒng)和軟件的可維護(hù)性和可擴(kuò)展性;其次,可以更靈活地選用相應(yīng)的平臺(tái)和硬件系統(tǒng),應(yīng)用的各層可以并行開發(fā)或者各自選擇最適合的開發(fā)語言。

  3 文件傳輸工具的設(shè)計(jì)流程

  3.1 文件傳輸工具的總體流程3.1.1 接收端的啟動(dòng)創(chuàng)建監(jiān)聽線程:(1)創(chuàng)建Socket,采用非阻塞模式。(2)通過bind()函數(shù)綁定IP地址和端口號(hào)。(3)通過listen()函數(shù)使其處于監(jiān)聽狀態(tài)。3.1.2 發(fā)送端的連接(1)創(chuàng)建Socket。(2)通過connect()函數(shù)向接收端發(fā)送連接請(qǐng)求。3.2 文件傳輸工具的具體設(shè)計(jì)3.2.1 發(fā)送端(1)創(chuàng)建一個(gè)連接線程:1)創(chuàng)建socket()。2)根據(jù)用戶界面輸入的IP地址,調(diào)用connect()向接收端發(fā)出連接請(qǐng)求。3)連接建立后彈出對(duì)話框提示連接已建立。(2)選定文件后,創(chuàng)建一個(gè)對(duì)文件進(jìn)行分包的線程:1)自定義一個(gè)合適的分包大小f_size。2)根據(jù)file.length得到文件的總大小,通過file.length/f_size求出該文件的分包數(shù)f_number。3)通過file.length%f_size求出該文件最后一包的大小flast_size。4)通過socket將文件基本信息(文件名f_name,文件大小f_size)和文件分包信息(分包大小f_size,分包數(shù)f_number,最后一包大小flast_size)發(fā)送給接收端。(3)創(chuàng)建一個(gè)發(fā)送文件數(shù)據(jù)的線程: sendThread() {WaitForMultipleEvents(); recv(); //接收分包信息 fseek(); //通過該函數(shù)將指針定位包信息所指的位置 send(); //發(fā)送分包數(shù)據(jù) }3.2.2 接收端在第一個(gè)階段,接收端作為服務(wù)器,負(fù)責(zé)監(jiān)聽客戶端提出的連接請(qǐng)求,并且用socket的非阻塞模式。(1)創(chuàng)建一個(gè)監(jiān)聽線程:1)創(chuàng)建socket()。2)通過WSAEventselect()設(shè)置socket為非阻塞模式。3)通過bing()綁定主機(jī)IP地址和端口號(hào)。4)通過listen()使其處于監(jiān)聽模式。5)通過循環(huán)while(1){SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);}使得發(fā)送端提出的連接請(qǐng)求能夠被馬上響應(yīng),并且新創(chuàng)建一個(gè)socket與發(fā)送端進(jìn)行通信。注:監(jiān)聽線程始終開啟,知道程序結(jié)束時(shí)才退出,全程監(jiān)聽發(fā)送端的連接請(qǐng)求。(2)創(chuàng)建一個(gè)接收文件信息的線程:以步驟1中新創(chuàng)建的socket為該線程參數(shù),通過調(diào)用recv()接收發(fā)送端發(fā)送的文件基本信息,并將文件名,文件大小顯示在界面上。(3)當(dāng)接收端接收到該文件的基本信息后,創(chuàng)建一個(gè)函數(shù),用來做接收文件的準(zhǔn)備工作。(4)創(chuàng)建一個(gè)接收文件數(shù)據(jù)線程。(5)創(chuàng)建一個(gè)函數(shù)判斷文件是否接收完全。

  4 主要實(shí)現(xiàn)技術(shù)

  4.1 文件的分塊網(wǎng)絡(luò)應(yīng)用程序是一種在不同系統(tǒng)的進(jìn)程間通過網(wǎng)絡(luò)通信協(xié)議進(jìn)行的進(jìn)程間的通信問題。在Windows編程中是通過套接字socket來編程的,socket分為阻塞模式和非阻塞模式,本設(shè)計(jì)為了提高數(shù)據(jù)的傳輸效率采用了socket的非阻塞模式。當(dāng)文件數(shù)據(jù)很大時(shí),使用套接字socket進(jìn)行傳輸往往需要花費(fèi)較長的時(shí)間,容易出錯(cuò),因此我們將把文件分為N塊,進(jìn)行數(shù)據(jù)的分塊傳輸。

  4.2 文件的分塊傳輸在傳統(tǒng)算法中,sender將主動(dòng)把分包后的數(shù)據(jù)塊依次傳送至receiver,而receiver只負(fù)責(zé)接收,但是由于sender并不能保證發(fā)送的數(shù)據(jù)塊receiver都已正確接收,所以需receiver發(fā)送確認(rèn)信號(hào),從而影響傳輸效率。因此在本設(shè)計(jì)中receiver將主動(dòng)向sender索要分包數(shù)據(jù),而sender只需按接收到的分包信息發(fā)送相應(yīng)的分包數(shù)據(jù)即可,直至receiver發(fā)送接收完畢信息為止。因此,此次設(shè)計(jì)將分為兩大部分。第一部分:receiver作為服務(wù)器,sender作為客戶端。receiver創(chuàng)建socket后則處于監(jiān)聽狀態(tài),當(dāng)sender發(fā)現(xiàn)有文件需要傳輸時(shí)則首先向receiver提出連接請(qǐng)求,receiver監(jiān)聽到sender提出的連接請(qǐng)求后,馬上響應(yīng)并創(chuàng)建新的socket與sender進(jìn)行通信。連接成功建立后,sender向receiver發(fā)送文件的基本信息(包括分包信息),而receiver繼續(xù)循環(huán)監(jiān)聽。第二部分:sender在發(fā)出文件信息后,充當(dāng)服務(wù)器,監(jiān)聽receiver。receiver接收到文件信息后,創(chuàng)建socket主動(dòng)向sender發(fā)送分包信息索要分包數(shù)據(jù),而sender接收到分包信息后將其解析并發(fā)送相應(yīng)的分包數(shù)據(jù)。直至receiver檢測(cè)到所有分包數(shù)據(jù)都已接收,向sender發(fā)送結(jié)束信息。

  4.3 確認(rèn)所有分包都已接收為解決這個(gè)問題,將自定義一個(gè)分包信息結(jié)構(gòu)體,其中包括分包ID,分包大小,以及分包的接收狀態(tài)(0:未接收,1:正在接收,2:已接受)。在sender進(jìn)行文件分包時(shí),會(huì)初始化文件信息,其中包括記錄文件的分包數(shù),分包的固定大小,及最后一個(gè)分包的大小。同時(shí)也會(huì)初始化每個(gè)分包信息。receiver在接收到文件信息之后,根據(jù)文件信息中提供的分包數(shù)申請(qǐng)等大的分包信息緩存區(qū)。并初始化每個(gè)分包的接收狀態(tài)為0,表示尚未接收。當(dāng)receiver取得分包ID并向sender發(fā)送時(shí),修改此分包的接收狀態(tài)為1,表示正在接收。當(dāng)receiver正確接收此分包后,修改分包接收狀態(tài)為2,表示已接收。當(dāng)receiver判斷所有分包的接收狀態(tài)都為2時(shí),即表示所有分包都已接收。4.4 多線程文件傳輸一個(gè)采用了多線程技術(shù)的應(yīng)用程序可以更好地利用系統(tǒng)資源。其主要優(yōu)勢(shì)在于充分利用了CPU的空閑時(shí)間片,可以用盡可能少的時(shí)間來對(duì)用戶的要求做出響應(yīng),使得進(jìn)程的整體運(yùn)行效率得到較大提高,同時(shí)增強(qiáng)了應(yīng)用程序的靈活性。由于本設(shè)計(jì)采用的是Socket的非阻塞模式,采用多線程,可提高cpu利用率。于是,在文件的傳輸過程中,創(chuàng)建了3個(gè)線程,同時(shí)接收文件分包數(shù)據(jù),創(chuàng)建線程后,一個(gè)應(yīng)用程序可以同時(shí)有多個(gè)線程一起訪問,因此在設(shè)計(jì)中用了大量的信號(hào)量和事件機(jī)制,以避免訪存沖突。

  5 具體實(shí)現(xiàn)過程

  源程序的組成:在本設(shè)計(jì)中有兩個(gè)程序,分別為sender和receiver。sender主要有三個(gè)部分,一個(gè)是senderDlg,用于和用戶實(shí)現(xiàn)交互。負(fù)責(zé)在程序運(yùn)行時(shí)創(chuàng)建MonitorImage線程,監(jiān)聽文件緩沖區(qū)中的文件狀況,另外負(fù)責(zé)將選中的文件加入文件緩沖區(qū)中。同時(shí)還會(huì)在界面上顯示出文件的基本信息以及發(fā)送狀態(tài)。第二個(gè)是TransImageBuffer,主要用于初始化文件緩沖區(qū),實(shí)現(xiàn)文件分包信息的添加和提取。第三個(gè)是ImageSender,用于實(shí)現(xiàn)文件的分包以及發(fā)送等。receiver中也包括三個(gè)部分:一個(gè)是receiverDlg,主要負(fù)責(zé)在程序開始運(yùn)行時(shí)創(chuàng)建MonitorSender線程,監(jiān)聽sender端的連接請(qǐng)求,一旦監(jiān)聽到連接請(qǐng)求,則立即響應(yīng),之后循環(huán)監(jiān)聽。另外會(huì)實(shí)時(shí)顯示文件的基本信息以及接收狀態(tài)。第二個(gè)是TransImageBuffer,同樣是用于初始化文件緩沖區(qū),實(shí)現(xiàn)文件分包的添加和提取等。第三個(gè)是ImageReceiver,用于實(shí)現(xiàn)文件的分塊接收以及文件存儲(chǔ)等

  6 總結(jié)

  在編程之前,首先要對(duì)整個(gè)系統(tǒng)有一個(gè)很好的理解,對(duì)于系統(tǒng)的功能和需求分析透徹之后,利用軟件工程的思想,合理的進(jìn)行開發(fā)設(shè)計(jì)。

【淺談基于多線程的網(wǎng)絡(luò)文件傳輸工具的改造論文】相關(guān)文章:

淺談網(wǎng)絡(luò)教育論文10-30

淺談通信網(wǎng)絡(luò)的論文05-05

淺談電網(wǎng)改造項(xiàng)目管理論文04-30

UNIX TCP/IP網(wǎng)絡(luò)文件傳輸?shù)膶?shí)現(xiàn)05-01

淺談基于生態(tài)倫理視角的生態(tài)休閑論文04-30

基于安全的通信網(wǎng)絡(luò)研究論文05-03

淺談網(wǎng)絡(luò)門派虛與實(shí)論文05-03

淺談基于翻轉(zhuǎn)課堂模式的語文教學(xué)論文04-27

淺談機(jī)床數(shù)控改造08-28

淺談公路改造設(shè)計(jì)05-02