FTP实现文件传输

今天尝试Windows10主机和VM虚拟机里的Windows10进行通过FTP连接传输文件

一、开始

一定要关掉主机的防火墙,否则FTP连接会被防火墙拦截,虚拟机的防火墙关不关闭没有影响。

开启FTP服务,进入控制面板->程序,开启如图所示服务

进入防火墙允许的应用开启FTP服务,如果没有FTP服务则直接下一步

进入管理工具打开Internet information Services(IIS)

右键网站,添加FTP站点,名称随便,位置记住就可以了,待会传输的文件就发送到这个目录下了

IP地址就是主机的地址,SSL选择无SSL

完成后就可以看见网站下启动了,如果出现无法启动,如下图所示在设置应用程序默认设置里选择应用程序池,要是没有可以自己新建一个。选择应用池后 右键K点击管理FTP站点选择重新启动就可以启动FTP服务了

虚拟机里的Win10操作一样。

二、连接

win+R调出CMD提示符,输入FTP,然后open+IP(要连接的目标的IP)连接

注意:这里有个巨坑,连接会要求你输入需要连接的用户和密码,我第一次明明账号密码都正确,它就是提示我530 User can't login.

我查了好多资料,反正各种情况,我按照如下方法解决了。在主机里连接虚拟机就需要虚拟机的IP以及用户和密码,密码还是开机密码,我发现这里要你输入的用户并不是win10的用户名而是cmd后的这个用户名(如下图所示)

同理虚拟机连接主机则需要主机IP 用户 密码 

注意:这里的用户名是HOME

这里使用put 加文件路径就可以传送文件了

打开目标机下的前面设置好的接受数据的目录,可以看见文件已经接收到了

非常感谢,有疑问可以联系qq:2680148591

  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为了实现FTP文件传输,我们需要使用C语言中的socket编程。下面是一个简单的FTP客户端的实现过程: 1. 创建socket连接,连接FTP服务器的命令端口(一般为21端口)。 2. 发送用户名和密码进行登录。 3. 发送FTP命令,例如LIST、RETR、STOR等。 4. 如果是文件传输,需要创建数据连接,连接FTP服务器的数据端口(一般为20端口)。 5. 传输数据。 6. 关闭数据连接和命令连接。 下面是一个简单的C语言FTP客户端的代码示例,用于从FTP服务器下载文件: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <arpa/inet.h> #include <unistd.h> #define BUF_SIZE 1024 int main(int argc, char *argv[]) { int sock; struct sockaddr_in serv_addr; char buf[BUF_SIZE]; int read_cnt; if (argc != 4) { printf("Usage: %s <IP> <port> <filename>\n", argv[0]); exit(1); } // 创建socket连接 sock = socket(PF_INET, SOCK_STREAM, 0); if (sock == -1) { perror("socket() error"); exit(1); } // 设置服务器地址 memset(&serv_addr, 0, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = inet_addr(argv[1]); serv_addr.sin_port = htons(atoi(argv[2])); // 连接FTP服务器的命令端口 if (connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) == -1) { perror("connect() error"); exit(1); } // 发送用户名和密码进行登录 sprintf(buf, "USER anonymous\r\n"); write(sock, buf, strlen(buf)); read(sock, buf, BUF_SIZE); sprintf(buf, "PASS anonymous\r\n"); write(sock, buf, strlen(buf)); read(sock, buf, BUF_SIZE); // 发送FTP命令,下载文件 sprintf(buf, "RETR %s\r\n", argv[3]); write(sock, buf, strlen(buf)); read(sock, buf, BUF_SIZE); // 创建数据连接,连接FTP服务器的数据端口 int data_sock; struct sockaddr_in data_addr; memset(&data_addr, 0, sizeof(data_addr)); data_addr.sin_family = AF_INET; data_addr.sin_addr.s_addr = inet_addr(argv[1]); data_addr.sin_port = htons(20); data_sock = socket(PF_INET, SOCK_STREAM, 0); if (data_sock == -1) { perror("socket() error"); exit(1); } if (connect(data_sock, (struct sockaddr*)&data_addr, sizeof(data_addr)) == -1) { perror("connect() error"); exit(1); } // 接收数据并保存到本地文件 FILE *fp = fopen(argv[3], "wb"); while ((read_cnt = read(data_sock, buf, BUF_SIZE)) != 0) { fwrite(buf, 1, read_cnt, fp); } fclose(fp); // 关闭数据连接和命令连接 close(data_sock); close(sock); return 0; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值