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