Tcp传输文件夹的任务也完成了,想要把程序做的完美一点,于是想起了win8中在copy文件或文件夹时的传输进程面板,显示了要从何位置传输多少文件到何位置,已传输多少的进度条还有显示实时速度和平均速度的图标,于是我借鉴了win8的做法,想要实现这样一个功能,使得数据传输过程更加清晰。下图为win8系统传输文件的面板
二.
做一个一样的子面板并不难,然而子面板和主程序的通信与控制将成为重点。类似于上面的面板,子面板需要以下的数据信息:被传输的文件(或文件夹)名称,数量,绝对路径,接受的它的IP地址,当前已传输的比例,实时传输速度,平均速度。以上信息都要通过主程序传输给子面板,传输方式就是我上一篇文章中讲到的队列。
三.
程序的程序设计思路框图没什么可说的,就是在tcp的传输子循环中把生成的上面所需要的信息组成一个簇以队列的方式发送给子面板,子面板经过相关计算后显示在子面板的前面板,主程序接收后同时关闭子面板即可,下面分别说以下每一部分的具体程序框图。
1.
首先主程序中通过一系列的数据组合,还有类似已传输量,总运行时间,这些数据都需要通过移位寄存器进行累计,最后组成一个簇,然后发给队列,这个簇包含以下信息(按顺序叙述):已传输文件个数,初始时间(开始传输的计时时间),文件路径,客户IP地址,文件个数,文件总量(B),已传输总量(B),每次传输量形成的数组,实时速度(发送每一小段的速度)构成的数组,当前时间(计时器计时的当前时间);
接下来用队列发送数据给子Vi,队列的数据格式为簇的格式,同时我们需要设定该循环停止的条件就是n个文件中的n-1个文件已经传输完毕,并且第n个结束传输信号为真,这样就关闭子Vi,然后关闭该循环。
2.
经过设计,子面板的主界面如下图所示
上图中进度条和图标显示的很明白,其中两个蓝色按钮本来是模仿win8中的两个按钮分别用来暂停传输和取消传输的,但是由于程序目前还木有做这一部分,所以这个问题以后再说,两个按钮左边的空白就是显示从何处传输何数据给何地址的空白,下面对后面板程序做一简单说明。
其他的数据大多是直接传输显示的,还有几个例如平均速度,文件路径等是经过了一定的处理后在界面上显示的,而图表相对麻烦一点
图表的x轴是已经传输的百分比,总长为100%,这需要把每一小块传输结束后所传输的总量用数组保存,然后通过一个for循环让数组的每一个值除以总的需要传输的量就是x轴的数据;而y轴显示的是x轴所对应的每一小块传输的时候的实时速度,然后也将它们累计起来成一个数组作为xy图的y输入数组即可,这一部分实现以以后程序就基本结束了。