[总结]文件传输模型之文件中转

写在前面

最近一个多月一直在弄文件传输的组件。最近也有个基本的样子了,这里算是一个简单总结吧。

中转模型

文件传输底层使用开源的c++通信组件hp-socket(Pullserver,pullClient)。感兴趣的可以搜一下。

废话不多说,进入正题

首先,所有的客户端必须首先登陆服务器,在服务器进行注册,在服务器端维护一个客户端标识与客户端信息的映射关系,比如客户端信息类ClientInfo。

//代码片段
ClientInfo
{
      IntPtr connID;
      string ip;
      ushort port;
}

则服务端,就需要有这样一个类似Dictionary<string,ClientInfo>的字典。在客户端A给客户端B转发数据的时候,可以从这个映射关系中找到对方。

登录过程

在客户端登录成功后,就可以发送文件了。

包头信息说明

TransferId:传输id,标识在同时传输多个文件时,是不同的传输。

TransferType:传输类型

TransferCommand:传输命令

MD5:检验值(md5或者hash,越短越好,算法越快越好)

FileName:文件名。

FileRelativePath:传输文件夹时用到,文件夹中的文件,需要用到相对路径,接收端根据接收路径+相对路径进行保存文件夹中的文件。

Size:文件或者文件夹总大小,将总大小抛给应用层,计算传输速度。

currendIndex:当前传输包的索引,也是读取文件第几个包的索引。

PkgCount:总共多少个包。接收端可以根据当前索引和包总数,来判断是否传输完成,或者在断点续传的时候用到。

From:发送端标识

To:接收端标识

BodySize:每次传输的body大小。

自定义协议

固定包头+Body

每次包都要遵循该协议,服务器收到包后,要进行解析,根据包头中bodysize取出这次的数据Data。

断点续传

在接收端,每次接收到包,写入文件的同时,将包头信息写入本地文件(ini也好,xml文件也好)。然后发送端,再次发送该文件的时候,首先会发送请求包,接收端根据该文件的包头信息和ini文件中的信息,比对md5是否相同,发送方是否相同,如果相同,则将CurrentIndex+1,响应给发送端。发送端就可以直接从CurrendIndex+1的位置继续读取文件包进行发送。

总结

该组件前前后后大概一个多月,里面业务比较复杂,需要考虑的到的东西还是比较多的,目前实现,同时传输多个文件,多个文件夹,断点续传功能。但多文件和多文件夹同时混合发送仍有问题。还有客户端A给客户端B发送文件的同时,客户端B给客户端A发送,仍有问题。

通过该组件的设计,也收获不小,对业务能力也是一种考验。对tcp通信有了更深入的学习。

本文只是分享一下思路,感兴趣的可以搜一下hp-socket。

时间: 2024-10-17 21:16:49

[总结]文件传输模型之文件中转的相关文章

linux不同系统的文件传输与网络管理,一些网络协议的tip

目录 ****12.不同系统之间的文件传输****2 1.文件归档2 2.压缩2 gz2 bz22 xz2 zip2 3.系统中的文件传输2 ****11.管理网络****2 1.ip基础知识2 1.ipv42 2.配置ip2 1.图形界面2 2.文本化图形2 3.<<命令>>2 4.<<文件>>2 4.1 dhcp //动态获取2 4.2 static|none //静态网络2 ************************************* *

Windows文件传输篇:怎么上传文件到服务器?

很多时候,我们需要把文件传输到服务器上进行运行.部署等操作,在使用windows服务器的时候,我们都会遇到这样的问题:我们应该怎么上传文件到服务器?有没有简单的方法来实现本地文件上传到服务器呢? Windows文件传输方法之一: 将需上传的文件打包压缩,利用邮箱附件功能发到另一邮箱,随后在服务器上登录邮箱下载. Windows文件传输方法之二: 将数据上传至百度网盘或者微云等第三方存储服务,在服务器上登录即可下载. Windows文件传输方法之三: 远程登录服务器时,通过本地磁盘映射功能,将本地

文件传输协议介绍

文件传输协议介绍文件传输协议是一种极为普遍的档案分享服务,让你可以将你的档案从储存装置传送到ASUSTOR NAS.ASUSTOR NAS 所支援的文件传输协议可分为: CIFS (网络文件共享系统)通常是指 SMB,SAMBA 或 Windows 档案服务,CIFS 主要被用在 Microsoft Windows 计算机,以及 Mac OS X 计算机. 这项服务通常为出厂时所内建的服务项目. AFP (苹果文件传输协定)AFP 是被用在 Mac OS 9 以及 Mac OS X 计算机来传输

视频流和文件传输相关协议

视频编码的两大流派 ITU(International Telecommunications Union)的VECG(Video Coding Experts Group),这个称为国际电联下的 VECG. ISO(International Standards Organization)的 MPEG(Moving Picture Experts Group),这个是ISO 旗下的 MPEG. 网络直播 网络协议将编码好的视频流,从主播端推送到服务器,在服务器上有个运行了同样协议的服务端来接收这

免费云主机文件传输软件推荐,大文件极速秒传

在对云主机进行运维的过程中,我们总是需要在云主机和本地之间进行文件传输.但是文件传输的过程往往会受到带宽的限制,譬如小编仅从云主机上下载一个300兆大小的文件就需要10分钟,上传一个60兆大小的文件需要2分钟,如果上传下载更大的文件,将耗时更长,运维效率将更加低下,并且传输过程中还会和业务系统争夺带宽资源,严重影响应用质量.而市面上大多能够实现快速上传下载大文件的软件工具,都需要支付一定的费用,并且安全性无法得到保障. 为了解决这一困扰,小编测试并试用了众多文件传输类软件或工具,终于发现一款高效

Web服务器实现文件传输程序设计

总体概括来说就是设计一个Web服务器的流程,将执行流程分为简单的步骤,每个步骤作为一个模块来实现. 1.整体设计 服务器程序发送文件给客户端或者从客户端接收文件,每次通信只能做一次文件传输,传输完毕后准备处理下一次通信.客户端程序,接收或者发送一个文件后就可以退出.因此,服务器短程序是一个死循环,处理一次之后不退出,继续监听.客户端程序处理一个连接就可以了. 2.客户端程序设计 客户端程序主要任务有3个, (1)分析用户输入的命令 (2)根据命令向服务器端发出请求 (3)等待服务器返回请求的结果

基于FTP协议的文件传输工具(SOCKET、FTP方面、MFC方面)

一.本课程是怎么样的一门课程(全面介绍) 1.简介:FTP(File Transfer Protocol),是文件传输协议的简称.用于Internet上的控制文件的双向传输.同时,它也是一个应用程序(Application).用户可以通过它把自己的PC机与世界各地所有运行FTP协议的服务器相连,访问服务器上的大量程序和信息.2.作用:FTP的主要作用,就是让用户连接上一个远程计算机(这些计算机上运行着FTP服务器程序)查看远程计算机有哪些文件,然后把文件从远程计算机上拷到本地计算机,或把本地计算

Linux socket跨局域网聊天和文件传输

一直想写一个跨局域网聊天和文件传输,以及视频聊天的软件,这两天刚好闲着没啥事就把代码写完了,代码已经上传至github:https://github.com/vinllen/chat 其实之前想法P2P模式,P2P的话必须穿透NAT,现在的NAT有4种模式: 完全圆锥型NAT 受限圆锥型NAT 端口受限圆锥型NAT 对称NAT(双向NAT) 维基百科给出的定义如下: 1.Full cone NAT,亦即著名的一对一(one-to-one)NAT 一旦一个内部地址(iAddr:port1)映射到外

ubutnu与小米3:文件传输

1.MTPfs原生支持 小米的帮助中说明了,但是不稳定,容易断开! 2.FTP服务器 1).两种构架:小米手机作为服务端,或者小米手机作为客户端: 当小米手机作为服务端时,直接使用文件管理自带的FTP服务器即可,注意编码要选UTF: 但小米手机作为客户端时,自带的文件管理器无法自定义登陆,只能下载第三方文件浏览器(如ES浏览器等),可以上传和下载. 2).三种传输介质:usb数据线传输,路由器WiFi传输,自建AP热点传输: usb:链接后,打开网络共享中的“USB共享网络”,此时Ubuntu多