admin 管理员组

文章数量: 887017

最近做课程设计的时候需要实现开发板和PC的文件传输,打算用FTP来实现,但屡屡出现FTP连接不上和命令not found的情况,终于摸索出一些经验,那不如分享一下完整的流程吧。

平台:迅为单片机SUM4412,PC(win 10系统)
软件:MobaXterm,tftpd64
硬件:串口线,网线
流程:

1. 将PC和开发板IP配置到同一网段

由于跨局域网的FTP访问需要路由,所以把PC和开发板的IP配置到同一网段,会更方便些。
我的方法是先查询开发板的IP,然后配置电脑的IP到它对应的网段下。
用串口线连接开发板和电脑,然后用MobaXterm软件新建一个serial:

选择对应的串口和合适的波特率(我用的115200):

如果serial port里面没有可选的项,那么可能是没有安装对应的驱动。打开设备管理器检查更新。如果更新后依然没有反应,需要更新windows系统。我当时重复了两遍操作之后,就能看到串口选项了,点击OK。
然后在弹出的窗口里敲入ifconfig命令后回车,就可以查看开发板的IP了:

然后配置电脑的IP为192.168.1.xxx。
用网线连接电脑和开发板,进入控制面板->网络和internet->以太网(未识别的网络),选择TCP/IPv4:

双击打开,设置IP地址为192.168.1.xxx,xxx可以任选但不能是1。设置子网掩码为255.255.255.0。

这样就把PC和开发板配置到同一网段了,下面开始正式搭建FTP。

2. PC:搭建FTP服务器

2.1 新建用户

在“此电脑”上右键,打开计算机管理:

选中“用户”右键,添加新用户:

设置好用户名和密码,然后去掉“用户下次登录时须更改密码”的选项,否则在创建好FTP之后,登录时会提示未修改密码,导致登不上。

2.2 打开FTP功能

进入控制面板->程序和功能->启用或关闭windows功能,打开FTP和IIS:

如果没做这一步,可能导致FTP无法连接。
然后关闭防火墙,否则也可能出现FTP无法连接。具体有很多做法。
1)直接关闭整个防火墙
打开控制面板->windows defender 防火墙:


2)允许FTP通过防火墙

点击更改设置,勾选FTP服务器,专用+公用:

点击允许其它应用,选择C:\Windows\System32\svchost.exe,确定。
然后打开防火墙对应的端口:

点击“入站规则”,右键“新建规则”,选择“端口”:

选择TCP(FTP协议是TCP/IP协议组中的协议),然后填写FTP端口(21或者22,后面创建FTP时指定的端口和这里要一样):

网上有资料说,FTP使用时可能也会用到其他端口,因此如果只打开21,后面可能会发生连接不上的问题。我后来找不出连接不上的原因,就保险起见把防火墙整个关了。关于防火墙的问题可以自行百度,可能要多试试。


名称和描述都很随意,填写后就可以完成了:

2.3 创建FTP服务器

首先在PC上创建一个文件夹用于FTP传输,相当于是指定了一个路径,里面的文件是被PC和开发板共享的:开发板只能从这个文件夹获取文件,也只能上传到这个文件夹。
windows搜索IIS,打开IIS管理器,右键“网站”,添加FTP站点:

填写主机的IP(也就是上面配置后的IP),选择“无SSL”(如果选择允许,那么需要在添加FTP站点之前新建一个证书并选定它)。

选择身份验证“基本”,对指定用户授权,用户名填写刚才新建的用户,完成。

在FTP页面右边可以查看当前站点的开启情况。点击基本设置->连接为:


选择特定用户,点击设置,填写刚才创建的用户名和密码:

2.4 命令行环境测试

搜索cmd打开命令行,输入ftp <PC机配置的IP>,然后输入用户名和密码即可登录。看到user logged in就说明登录成功了,可以初步判断为FTP搭建完成。注意在输入密码的时候窗口不会显示***,并不是输入有问题。

输入bye即可退出。

3. 开发板:配置FTP命令

3.1 telnet连接开发板

telnet是一种远程连接linux主机的方式,可以理解为:我想在开发板上敲命令,但是不方便,通过telnet就可以在电脑上敲命令了,而执行命令的依然是开发板,这和远程访问服务器有点像。
首先保证PC和开发板能ping通:在PC的cmd中输入ping <开发板的IP>,如果成功就说明ping通了。
然后进行telnet连接。打开MobaXterm,新建一个telnet session:

填写开发板的ip,以及用户名(root):

点击OK,输入用户名root回车即可登录。然后在这个界面下,可以查看开发板里的文件,也可以运行其中的可执行文件。

3.2 安装命令

我想让开发板往PC的FTP文件夹传文件,需要用到curl命令,但是在telnet里输入命令却无法执行,后来发现是开发板根本就没有安装这个命令,自然无法调用。
可以百度下载需要的命令,然后用现成的工具(比如tftpd64)传到开发板上,放在代码生成的可执行文件的同一目录下。

3.3 编程实现FTP命令

在C语言中,用system("<命令>")函数可以执行所需的命令。例如,要用代码实现curl命令,可以这么写:

system("./curl -u <FTP用户名>:<FTP密码> -T <本地文件名> ftp://<FTP服务器的IP>");

这样就可以自动实现FTP通讯了,其他命令和格式可以查手册。
需要注意的是,代码生成的可执行文件想要在telnet里跑通,需要在运行前给curl命令指定权限:

chmod 777 curl
./<可执行文件名>

否则上面那行代码依然无法运行。

参考资料

[1] Win10如何设置防火墙开放特定端口 windows10防火墙设置对特定端口开放的方法
[2] Windows下如何搭建FTP服务并且设置其用户名和密码
[3] ftp连接不上怎么解决啊,如下图
[4] Win10开启FTP与配置(完整无错版)
[5] linux下常用FTP命令

本文标签: 单片机 流程 完整 通信 ftp