數(shù)據(jù)傳輸進(jìn)程子面板
Tcp傳輸文件夾的任務(wù)也完成了,想要把程序做的完美一點(diǎn),于是想起了win8中在copy文件或文件夾時(shí)的傳輸進(jìn)程面板,顯示了要從何位置傳輸多少文件到何位置,已傳輸多少的進(jìn)度條還有顯示實(shí)時(shí)速度和平均速度的圖標(biāo),于是我借鑒了win8的做法,想要實(shí)現(xiàn)這樣一個(gè)功能,使得數(shù)據(jù)傳輸過(guò)程更加清晰。下圖為win8系統(tǒng)傳輸文件的面板
本文引用地址:http://2s4d.com/article/201701/336636.htm二.
做一個(gè)一樣的子面板并不難,然而子面板和主程序的通信與控制將成為重點(diǎn)。類似于上面的面板,子面板需要以下的數(shù)據(jù)信息:被傳輸?shù)奈募ɑ蛭募A)名稱,數(shù)量,絕對(duì)路徑,接受的它的IP地址,當(dāng)前已傳輸?shù)谋壤?,?shí)時(shí)傳輸速度,平均速度。以上信息都要通過(guò)主程序傳輸給子面板,傳輸方式就是我上一篇文章中講到的隊(duì)列。
三.
程序的程序設(shè)計(jì)思路框圖沒(méi)什么可說(shuō)的,就是在tcp的傳輸子循環(huán)中把生成的上面所需要的信息組成一個(gè)簇以隊(duì)列的方式發(fā)送給子面板,子面板經(jīng)過(guò)相關(guān)計(jì)算后顯示在子面板的前面板,主程序接收后同時(shí)關(guān)閉子面板即可,下面分別說(shuō)以下每一部分的具體程序框圖。
1.
首先主程序中通過(guò)一系列的數(shù)據(jù)組合,還有類似已傳輸量,總運(yùn)行時(shí)間,這些數(shù)據(jù)都需要通過(guò)移位寄存器進(jìn)行累計(jì),最后組成一個(gè)簇,然后發(fā)給隊(duì)列,這個(gè)簇包含以下信息(按順序敘述):已傳輸文件個(gè)數(shù),初始時(shí)間(開(kāi)始傳輸?shù)挠?jì)時(shí)時(shí)間),文件路徑,客戶IP地址,文件個(gè)數(shù),文件總量(B),已傳輸總量(B),每次傳輸量形成的數(shù)組,實(shí)時(shí)速度(發(fā)送每一小段的速度)構(gòu)成的數(shù)組,當(dāng)前時(shí)間(計(jì)時(shí)器計(jì)時(shí)的當(dāng)前時(shí)間);
接下來(lái)用隊(duì)列發(fā)送數(shù)據(jù)給子Vi,隊(duì)列的數(shù)據(jù)格式為簇的格式,同時(shí)我們需要設(shè)定該循環(huán)停止的條件就是n個(gè)文件中的n-1個(gè)文件已經(jīng)傳輸完畢,并且第n個(gè)結(jié)束傳輸信號(hào)為真,這樣就關(guān)閉子Vi,然后關(guān)閉該循環(huán)。
2.
經(jīng)過(guò)設(shè)計(jì),子面板的主界面如下圖所示
上圖中進(jìn)度條和圖標(biāo)顯示的很明白,其中兩個(gè)藍(lán)色按鈕本來(lái)是模仿win8中的兩個(gè)按鈕分別用來(lái)暫停傳輸和取消傳輸?shù)模怯捎诔绦蚰壳斑€木有做這一部分,所以這個(gè)問(wèn)題以后再說(shuō),兩個(gè)按鈕左邊的空白就是顯示從何處傳輸何數(shù)據(jù)給何地址的空白,下面對(duì)后面板程序做一簡(jiǎn)單說(shuō)明。
其他的數(shù)據(jù)大多是直接傳輸顯示的,還有幾個(gè)例如平均速度,文件路徑等是經(jīng)過(guò)了一定的處理后在界面上顯示的,而圖表相對(duì)麻煩一點(diǎn)
圖表的x軸是已經(jīng)傳輸?shù)陌俜直?,總長(zhǎng)為100%,這需要把每一小塊傳輸結(jié)束后所傳輸?shù)目偭坑脭?shù)組保存,然后通過(guò)一個(gè)for循環(huán)讓數(shù)組的每一個(gè)值除以總的需要傳輸?shù)牧烤褪莤軸的數(shù)據(jù);而y軸顯示的是x軸所對(duì)應(yīng)的每一小塊傳輸?shù)臅r(shí)候的實(shí)時(shí)速度,然后也將它們累計(jì)起來(lái)成一個(gè)數(shù)組作為xy圖的y輸入數(shù)組即可,這一部分實(shí)現(xiàn)以以后程序就基本結(jié)束了。
評(píng)論