经过半个月对 FreeEIM 飞鸽传书的学习实践,对于网络SOCKET连接、文件传输的实现原理与具体实现的重点难点已经有了一定的了解。 飞鸽传书唯一官网

文件传输需要建立一个文件发送端,一个文件接收端,并通过自己指定的传输协议,对文件数据进行传输。在文件传输过程中,我们由于许多原因,要对数据进行处理,这样,就需要文件发送与接收双方进行通信,对传输文件的一些特性进行互相通告,以方便对传输数据的处理。文件传输的要求在于文件数据的传输速度,CPU的占用率,以及网络资源的使用率。下面对这三方面进行分析:

1.文件数据的传输速率

纯正意义上的文件传输速度是指文件的实际内容开始发送到文件内容全部传输完毕所用的时间来除文件的大小得出的值。这个值由发送数据包的大小决定,这个大小值要保证一次传输数据要尽可能的多的同时发送数据包的速度也要快,也就是说网络占用率与传输速度相互关联。但在程序实际传输文件中,发送方读文件内容到内存、接收方从内存向文件写数据、发送文件前的通信以及传输数据的压缩与解压缩都会消耗时间,所以我们算速率的时候通常把这些时间也算进去了,因为要评估程序的性能,就要把实际消耗的时间都算上。那么影响传输速率的其他因素还有:

发送端读文件时间;

接收端写文件的时间;

数据的压缩、解压缩时间;

传输通讯时间。

我们需要解决的是,一次发送接收多少数据,如何发送,数据一次压缩或解压缩多少,还有就是通信的方式,如何发送接收发送前的通信,才能使其耗时最短。

2.CPU的占用率

CPU的占用率就是指程序运行后,文件传输时CPU的使用情况。CPU主要工作在文件数据的读写,文件数据的压缩与解压缩。文件数据连续的进行写入内存,或者从内存写入文件都会占用很多的CPU使用,压缩解压缩数据时,对于很大的数据进行压缩或解压缩也会占用很大的CPU使用。

想要降低CPU占用率,就要使文件发送与接收有层次,将大的数据分开成若干的较大的数据包,然后再将这些数据包分别按小包发送。如何控制分割的大数据包的大小,和每次发送数据包的大小,与接收端接收了多少数据再写入文件都是关键,;如果要对传输的数据进行压缩,何时进行压缩和解压缩,一次压缩和解压多少数据,压缩次数是关键,由于逻辑结构的因素,何时进行压缩就制约了数据压缩大小,在文件分割前压缩,压缩的数据就会很大,如果把文件分割成大的数据包后进行压缩,这个数据包的大小就决定压缩的效率,如果在每次SOCKET发送数据包的时候进行压缩,就会使压缩的次数巨增,也制约了压缩效率。

3.网络资源的使用率

网络资源的利用率是指在文件传输过程中,对网络资源的利用情况,SOCKET在传输数据包的时候有一个最大传输字节,可以用SND_BUF、RCV_BUF分别取出发送端与接收端的最大值。每次发送数据包时候最大利用了SND_BUF、RCV_BUF的大小,就可以使传输效率大大提高,网络利用率也就很高。网络资源的使用率也影响文件数据的传输速率。为了保证每次发包与收包的数据大小的一致性,我们就要保证SND_BUF、RCV_BUF的一致,所以接收端的RCV_BUF要与发送端的SND_BUF相等,这就要求我们在发送文件之前的通信中要把发送端的SND_BUF告诉接收端,接收端对自己的RCV_BUF进行处理。

文件传输过程中还有一些问题:

1.文件传输结束标志,文件什么时候传输完毕,我们退出SOCKET,不再进行数据的收发,我们可以在传输前通信前的通信中把文件大小告诉接收方,当接收方写入文件数据到了该大小后传输结束。

2.文件传输过程中出现发送方与接收方单方中断传输时候,要通知对方结束程序,并对没有写完的文件进行删除,着块要根据传输方式跟逻辑结构的不同采取不同的方法实现。

3.文件内容的压缩与不压缩一定程度上影响了文件传输的逻辑结构,采取不同的压缩方式,在不同的阶段进行压缩,文件传输的逻辑结构应该不同,这样才能保证传输数据的正确性和传输的高效性。

4.在文件传输过程中是否会有丢包的现象呢?采取TCP方式,由于它是可靠的连接,三次握手机制保证了传输数据的正确性。而采取UDP方式就不行了。另外接收端在采用sysread从SOCKET中读数据时候,如果是外网文件传输,sysread会出现读到的数据小于我们指定的长度,这样就要采取逻辑上的补救,限制读够了该长度后才读下一数据。

5.文件接收端在往缓存变量写数据时候,如果一次写入的数据比较大,那么,第一次写数据时候将消耗大量的时间,这里要采用先把缓存扩大到数据长度的空间大小,然后清空缓存变量,再进行数据的写入。

6.数据压缩后发送给接收端,接收端如何知道何时解压缩得到的数据是原始正确的数据呢,压缩后的数据分开后或者取出部分后解压缩后得到的值肯定不等于原始数据,接收端依次读取SOCKET数据包,累加写入变量,当变量的值等于发送端发送的压缩数据时,对其解压缩得到的值才是原始数据。判断这个变量等于压缩的数据就要用到压缩数据的大小,发送端压缩后先与接收端进行通信,将压缩数据大小告诉接收端,接收端反馈一个收到的信息后,发送端开始发送压缩数据,接收端根据收到的压缩数据的大小来判断接收数据是否到达了压缩数据包的大小,如果大小一样了,就说明压缩包全部接收到了,现在就可以进行解压缩处理了。

总结,一个基本的文件传输结构已经出来了,再加上简单的处理,比如,对发送文件的选择,接收文件的重命名,传输方的IP选择等等,文件传输程序就基本实现了,程序还有很多不太合理的地方,CPU,网络,跟传输速率还有提升的空间,希望大家批评指正。

PERL模拟飞鸽传书文件传输总结相关推荐

  1. 飞鸽传书文件传输实现原理

    飞鸽传书文件传输实现原理,企业即时通讯软件飞鸽传书,是一款基于TCP/IP协议.基于局域网广播消息模式的通讯软件,适合企业或政府部门局域网内部使用.飞鸽传书用户可在企业内部或外部通过该软件进行工作上的 ...

  2. 飞鸽传书软件测试工资,现在你可以体验飞鸽传书的传输速度了

    大家都知道,飞鸽传书在局域网中的作用是非常巨大的,合理的配置飞鸽传书,可以让局域网内传输速度与网卡标称传输速度一致,这个功能够吸引人吧,平时想要在局域网中传一部几个G的电影,需要很时间,甚至半个小时以 ...

  3. 解散等内容的飞鸽传书

    FreeEIM 企业即时通讯软件源代码2010年8月份最新版 作者: mynote - 日期:2010-10-12 浏览 83 次 FreeEIM 不同于传统的C/S 模式(Client/Server ...

  4. 飞鸽传书原理以及相关代码详解

    最近公司事情不是很多,就想起回顾一件做得小项目,跟大家一起学习共享一下. 模拟飞鸽传书来实现相关的功能.首先看下: 飞鸽传书的实现原理: (1)最关键的是局域网用户列表的建立:飞鸽启动时使用UDP协议 ...

  5. 还有那个bspider不知道哪里的飞鸽传书

    还有那个bspider不知道哪里的飞鸽传书,不知道来路,暂且留着吧.反正没耗多少流量,爱爬就爬吧.嘻嘻~~但是如果那种未知的蜘蛛耗费流量大了,就要想办法干掉.再说说msnbot,难怪bing收录的少呢 ...

  6. 飞鸽传书内网传输好伙伴

    想必大家对飞鸽传书也都不陌生啦,飞鸽传书是一款局域网通信,文件传输于一身的局域网软件,不过最新版本的飞鸽传书2010增加了更多的功能. 飞鸽传书可以群发信息(文件),局域网内的传输速度非常快,能达到1 ...

  7. 飞鸽传书官方网站方式hook一些常见的枚举文件

    样本通过全局钩子的 飞鸽传书官方网站 方式hook一些常见的枚举文件,注册表,服务,进程的api,使得ring3层完全不可见,达到有效的隐藏自己的目的.命令接收端支持的命令非常齐全,通过远程控制几乎可 ...

  8. 飞鸽传书不能传送文件

    苹果是喜光性果树.据测定,多数品种的光补偿点为600-940勒克斯,饱和点为24000-75000勒克斯.光照不足,直接降低光合作用和树体营养水平,并影响果实着色和糖分转化:强烈的直射光过多和照射的时 ...

  9. 凝思Linux系统 文件互传 sftp方式 或使用 飞鸽传书

    凝思系统支持sftp传文件 win上下载一个支持sftp的软件,比如xmanager 两个凝思系统直接互传文件:scp命令可以传 scp 源文件 用户名@目标ip:目标地址 xbchang:~# sc ...

最新文章

  1. Gene co-expression analysis for functional classification and gene–disease predictions 基因共表达分析的功能分类
  2. 开源神经网络框架Caffe2全介绍
  3. php 打印测试技巧
  4. JDK各版本内容和新特性
  5. 46.一个例子了解C++中异常处理
  6. Oracle 的基本特点,并完整描述安装过程
  7. 驱动程序和应用程序之间的体系结构不匹配_修复Win10上的黑屏问题全攻略,并不高深,一看就会...
  8. 黑白极简设计行业企业官网模板
  9. linux提取声卡的codec教程,发个菜鸟提取声卡codec文件图文教程,老手就别看了,小心被骂!...
  10. SQLi LABS Less 27 联合注入+报错注入+布尔盲注+时间盲注
  11. percona-toolkit工具包的安装和使用
  12. json接口文档模板_在.Net Core WebAPI下给Swagger增加导出离线文档功能
  13. java基础5 (一维)数组和二维数组
  14. python not in range1002无标题_新手常见Python运行时错误
  15. JMS-activeMq点对点模式
  16. 手把手教你在Linux环境下安装Python3
  17. K均值聚类算法以及模糊K均值算法研究,matlab
  18. V4L2驱动的移植与应用(三)
  19. 关于汉庭连锁酒店加盟的4个优势
  20. 微信无法连接服务器1-500,GIF表情超过500kb无法添加到微信的解决方法

热门文章

  1. python 参数个数 同名函数_Python——函数的参数
  2. cad小插件文字刷_文字狗最佳排版神器 小恐龙公文排版助手Office WPS插件
  3. JAVA 基础之容器集合(Collection和Map)
  4. 链表删除功能实现演示
  5. 为何@Autowired注解无法实现第三方类的注入?
  6. 指标体系|四个模型教会你指标体系构建的方法
  7. 原型到底应该画到什么程度?被骂N次后我得出了答案
  8. oracle取日期最大的一条数据_Tableau可视化分析【2】如何连SQL数据查询
  9. 安徽省智慧政务新模式及典型应用
  10. 《全数据时代的炼金师》全书语言生动、易懂