main.go

package main

import (
"strings"
ftp4go "github.com/shenshouer/ftp4go"
"fmt"
"flag"
"github.com/larspensjo/config"
"time"
) var (
configFile = flag.String("configfile", "config.ini", "General configuration file")
) //配置文件
var TOPIC = make(map[string]string)
var TOPIC1 = make(map[string]string)
//配置文件 func main() { /*读取配置*/
cfg, err1 := config.ReadDefault(*configFile)
if err1 != nil {
restart("读取配置文件失败")
}
if cfg.HasSection("server") {
section, err1 := cfg.SectionOptions("server")
if err1 == nil {
for _, v := range section {
options, err1 := cfg.String("server", v)
if err1 == nil {
TOPIC[v] = options
}
}
}
}
if cfg.HasSection("client") {
section, err1 := cfg.SectionOptions("client")
if err1 == nil {
for _, v := range section {
options, err1 := cfg.String("client", v)
if err1 == nil {
TOPIC1[v] = options
}
}
}
}
/*读取配置*/ /*连接ftp*/
ftpClient := ftp4go.NewFTP()
_, err := ftpClient.Connect(TOPIC["address"], ftp4go.DefaultFtpPort, "")
if err != nil {
restart("连接失败")
}
defer ftpClient.Quit()
_, err = ftpClient.Login(TOPIC["name"], TOPIC["password"], "")
if err != nil {
restart("登陆失败")
}
/*连接ftp*/ /*读取目录*/
var files []string
c1 := make(chan string)
go func(){
if files, err = ftpClient.Nlst(TOPIC["path"]); err != nil {
restart("读取目录失败")
}
c1 <- "读取目录成功"
}()
select {
case res := <-c1:
fmt.Println(res)
case <-time.After(time.Second * ):
restart("读取目录超时")
}
if len(files) == {
restart("无可下载文件")
}
/*读取目录*/ /*执行下载*/
for i := ; i < len(files); i++ {
ch := files[i]
str := strings.Replace(ch, " ", ",", -)
s := strings.Split(str,",")
x := len(s)-
file1 := s[x]
if err = ftpClient.DownloadResumeFile(TOPIC["path"]+"/"+file1, TOPIC1["path"]+file1, false); err == nil{
fmt.Println(TOPIC["path"]+"/"+file1+"--->下载成功")
_, err = ftpClient.Delete(TOPIC["path"]+"/"+file1)
if err == nil {
fmt.Println(TOPIC["path"]+"/"+file1+"--->删除成功")
}else{
restart("删除失败")
break
}
}else{
restart("下载失败")
break
}
}
/*执行下载*/
restart("新的一轮执行")
} func restart(err string){
fmt.Println("重启--------->"+err)
time.Sleep(time.Second * )
main()
}

config.ini

[server]
address = 192.168.1.58
name = test
password =
path = / [client]
path = D:/Ftp/

go ftp通信的更多相关文章

  1. 【转】Android端与Android端利用WIFI进行FTP通信

    原文网址:http://www.cnblogs.com/zhangkai5157/p/4303188.html 一.客户端通信工具类: import java.io.File; import java ...

  2. Android端与Android端利用WIFI进行FTP通信

    一.客户端通信工具类: import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; im ...

  3. Windows10与虚拟机中CentOS-7.2进行ftp通信

    首先Linux的IP地址可以通过以下命令获取: ifconfig Windows10上面IP地址通过下面命令获取 ipconfig 你首先要保证你的主机和Linux虚拟机是可以ping通的(ping都 ...

  4. 使用.net FtpWebRequest 实现FTP常用功能 上传 下载 获取文件列表 移动 切换目录 改名 .

    平时根本没时间搞FTP什么的,现在这个项目需要搞FTP,为什么呢,我给大家说下项目背景,我们的一个应用程序上需要上传图片,但是用户部署程序的服务器上不让上传任何东西,给了我们一个FTP账号和密码,让我 ...

  5. TCP/IP FTP/TFTP

    引言 从一台计算机向另一台计算机传送文件是在连网或互联网环境中最常见的任务.而FTP和TFTP就是这样的协议. 关于文件传输协议FTP? 端口21使用服务TCP [FTP模型] FTP连接? 1.控制 ...

  6. 高可用的Spring FTP上传下载工具类(已解决上传过程常见问题)

    前言 最近在项目中需要和ftp服务器进行交互,在网上找了一下关于ftp上传下载的工具类,大致有两种. 第一种是单例模式的类. 第二种是另外定义一个Service,直接通过Service来实现ftp的上 ...

  7. TCP、UDP通信

    开放系统互连参考模型 (Open System Interconnect 简称OSI) OSI七层模型 1.应用层2.表示层3.会话层4.传输层5.网络层6.数据链路层7.物理层 TCP/IP模型1. ...

  8. http和ftp下载的区别

    HTTP和FTP是两种网络传输协议的缩写,FTP是File Transportation Protocol(文件传输协议)的缩写,而HTTP则是Hyper Text Transportation Pr ...

  9. 下载文件的协议:HTTP、FTP、P2P

    本篇学习笔记以HTTP.FTP.P2P叙述与网上下载文件有关的协议 需要掌握的要点: 下载一个文件可以使用 HTTP 或 FTP,这两种都是集中下载的方式,而 P2P 则换了一种思路,采取非中心化下载 ...

随机推荐

  1. Java设计模式之工厂模式的两种实现方式

    工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 1. 为什么要有工厂模式? "Talk i ...

  2. C#中自定义属性的例子

    自定义属性的作用 有时候我们需要给一个类或者类中的成员加上一些属性或者附加信息,让类或者变量的功能更明确可控制的细粒度更高,打个简单的比方:数据库里面的一张表,表中的每一个字段都有很多属性,如是否主键 ...

  3. Spring Boot中扩展XML请求和响应的支持

    在Spring Boot中,我们大多时候都只提到和用到了针对HTML和JSON格式的请求与响应处理.那么对于XML格式的请求要如何快速的在Controller中包装成对象,以及如何以XML的格式返回一 ...

  4. HR必备基础能力之人性

    https://www.jianshu.com/p/bbb858431c81 人力资源管理-从新手到入门(正文) 第一章 必备基础能力 第三节 人性 人力资源管理者(HR)日常工作中面对的主要对象是人 ...

  5. PLSA及EM算法

    前言:本文主要介绍PLSA及EM算法,首先给出LSA(隐性语义分析)的早期方法SVD,然后引入基于概率的PLSA模型,其参数学习采用EM算法.接着我们分析如何运用EM算法估计一个简单的mixture ...

  6. python argparse详解

    1.argparse模块作用 用于解析命令行参数 2.位置参数和可选参数 运行以下代码: import argparse parser = argparse.ArgumentParser() args ...

  7. 【Android】安卓闪电复习

    Intent An intent is an abstract description of an operation to be performed 一个Intent就是一次对将要执行的操作的抽象描 ...

  8. git file mode change

    近期在做ffmpeg版本合并时发现,TortoiseGit的Check for Modifications的修改对话框中有未修改的问题,直接导出diff,会有类似下面的输出: compat/plan9 ...

  9. js实现类似qq表情(插入图片以及获取光标的效果)

    <!doctype html><html style="height:100%"><head><meta charset="ut ...

  10. 总结: Sort 排序算法

    排序总结 面试经验 硅谷某前沿小Startup面试时,问到的一个题目就是写一个快速排序算法.进而面试官问到了各种算法的算法复杂度,进而又问了Merge Sort 与 QuickSort 的优劣. 对排 ...