使用udp协议传输文件补包设计_What?!! 这么方便的文件传输方法你还不知道?

作为嵌入式开发程序猿,不可避免的经常需要从电脑、编译服务器和Linux开发板之间传输文件。Android有adb工具,不需要多说,本文程序猿小编给您介绍一种广泛应用于Linux的一种文件传输协议TFTP。

d87c690d00979ad370df6196c1bc4462.gif

TFTP简介

TFTP(Trivial File Transfer Protocol,简单文件传输协议):TFTP是一个传输文件的简单协议,绝大多数情况下基于UDP协议而实现,也不排除有部分TFTP协议是基于其它传输协议完成的。用来在客户机与服务器之间进行简单文件传输,提供不复杂、开销不大的文件传输服务。端口号为69。

TFTP用法

我们以Windows电脑端作为服务端,Linux作为客户端为例,具体设置如下:

01 服务端

服务端打开一个名为Tftpd32.exe的TFTP工具,选择Tftp Server按钮使其作为服务终端,如下图:

d1645434ba1560293d169720a9606f82.png

说明:

CurrentDirectory: 当前服务端的路径,和客户端传输的文件都存储在这个路径下。包括客户端从服务端下载和上传的所有文件。此路径可以通过Browse按钮根据自己的情况设置。

Server interfaces:服务端传输数据网口IP地址,对于多个网口的设备,可以选择所需要传输数据网口对应的IP地址。

02 客户端(开发板)

一般情况下,Linux开发板都会带有busybox指令集,busybox中一般都集成有tftp命令,所以这就不需要我们在开发板客户端做任何设置。只需要在串口终端输入tftp即可使用,下图是小编开发板上的tftp信息:

103585583cd21a7b952c827f310bb668.png

从上图可以看出,使用tftp命令传输文件时还是有一些参数的,具体常用参数的用法如下:

-g 表示下载文件(get)

-p 表示上传文件(put)

-l 表示本地文件名(local file)

-r 表示远程主机的文件名(remote file)

例如,我们要从小编服务端远程主机172.30.16.72上下载一个名为test.txt的文件,则应输入以下命令:

tftp -g -r test.txt 172.30.16.72

03 客户端(Linux服务器)

除了开发板,在一些Linux服务器上,我们也可以使用tftp命令来传输文件。请看小编以下操作截图:

6dc01b32c224b0c599654f55bb868236.png

由上图可以看出,我们可以在Linux终端上输入tftp 172.30.16.72 这个命令,就会进入到tftp的操作,这时客户端和服务端之间就可以传输文件了,用get test.txt命令从服务端下载文件。同样,用put 命令将文件上传服务端。这就实现了文件的传输功能。

进入TFTP相关操作说明:

connect:连接到远程tftp服务器

mode:文件传输模式

put:上传文件

get:下载文件

quit:退出

verbose:显示详细的处理信息

tarce:显示包路径

status:显示当前状态信息

binary:二进制传输模式

ascii:ascii 传送模式

rexmt:设置包传输的超时时间

timeout:设置重传的超时时间

help:帮助信息

? :帮助信息

相关操作方法也可以通过在操作界面输入“?”或者“help”获取,如下图:

a07932f56062ceb582cf020e1a0457ab.png

TFTP优缺点

优点:

1、TFTP可用于UDP环境;比如当需要将程序或者文件同时向许多机器下载时就往往需要使用到TFTP协议。

2、TFTP代码所占的内存较小,这对于较小的计算机或者某些特殊用途的设备来说是很重要的(比如我们一些简单的Linux嵌入式设备),这些设备不需要硬盘,只需要固化了TFTP、UDP和IP的小容量只读存储器即可。

3、不需要验证客户端的权限,在局域网中调试设备时传输文件就减少了很多步骤。

缺点:

TFTP是一个传输文件的简单协议,此协议设计的时候是进行小文件传输的。因此它不具备通常的FTP的许多功能,它只能从文件服务器上获得或写入文件,不能列出目录。

总结

在一些嵌入式局域网的软件调试过程中,我们可以用TFTP来传输我们调试过程中产生的文件,如一些临时验证的可执行文件,抓包文件,TFTP搭建传输环境简单,可以提高我们的调试效率。但是如果是一些比较大的文件并且是互联网传输的,小编我还是建议大家用FTP。

欢迎大家关注我们同名微信公众号“麻辣软硬件”,一起交流技术相关话题!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这两天下了一个使用UDP传输目录内文件的程序,发出来给大家一起看看,共同进步。有问题请指教。 由于udp丢包比较厉害,因此使用了自定义的内部协议,进行双方的确认。 程序跑起来后,看网络状况,有候会一卡一卡的。 以下是程序说明: * 本程序集成了数据导出端(服务器端)和数据导入端(客户端),使用UDP进行文件传递 * 服务器端的文件来源目录,见Tools中SOURCEPATH的设置 * 客户端的文件保存目录,见Tools中DESTINATIONPATH的设置,可以根据自己需要进行调整 * * 由于UDP存在丢包问题,因此Server和Client的通讯需要来回包进行确认,协议包头如下: * 1. "55 aa 99 01",表示客户端发起广播请求,请求服务器响应 * 2. "55 aa 99 02 + 服务器的设备名称",表示服务器接收到广播后,响应客户端请求,把此包指定IP发送客户端(此指定IP地址可以UDP广播信息包中获取) * 3. "55 aa 99 03",表示客户端接收到服务器的响应,接着向服务器指定IP请求:需要传递的文件总数目和文件总容量(单位为KB) * 4. "55 aa 99 04 + 4字节文件总数目和4字节的文件总容量",表示服务器接收到客户端的0x03请求,统计SOURCEPATH中的所有文件数目和文件总容量,发送指定IP地址的客户端 * 5. "55 aa 99 05",客户端接收到文件总数目和文件总容量,请求服务器发送文件具体内容 * 6. "55 aa 99 10 + 文件名称",服务器发送文件名称 * 7. "55 aa 99 11",客户端响应,表示接收到服务器发送的0x10包 * 8. "55 aa 99 12+文件内容",服务器端发送具体文件内容 * 9. "55 aa 99 13",客户端响应,表示接收到服务器发送的0x12包 * 10."55 aa 99 14",服务端高速客户端发送完毕 * * 注意:服务器发送0x10包后,收到客户端的0x11响应包,将把文件具体内容拆分成N个0x12包,每个包的大小见Tools.byteSize的设置,目前设置为10K, * 服务器没收到一个0x13响应包,才能继续发下一个0x12包,已放置UDP的丢包,另外每个0x12包最多发送10次而无0x13包的响应,则发送进程结束,界面提示 * * 本程序已经封装好,调用见TransportFilesActivity.java文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值