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. 基于PHPExcel常用方法总结(phpexcel类库实例)

    分享下对PHPExcel的常用方法进行详细的总结与分析. 对phpexcel类库不熟悉的朋友,可以阅读下<phpexcel中文帮助手册>中的内容,具体实例大家可以phpexcel快速开发指 ...

  2. 如何使用ILSpy 把发布版本反编译成源码

    有时候,看法别人写的代码比较好,想看看他们的代码到底是如何写的,于是就找方法,看看能否把发布版本变成源码.后来终于发现一个词“反编译”,我终于知道怎么办了. 工具:ILSpy   百度下载一个,该工具 ...

  3. (原创)用c++11打造类似于python的range

    python中的range函数表示一个连续的有序序列,range使用起来很方便,因为在定义时就隐含了初始化过程,因为只需要给begin()和end()或者仅仅一个end(),就能表示一个连续的序列.还 ...

  4. 每日英语:Bosses May Use Social Media to Discriminate Against Job Seekers

    Many companies regularly look up job applicants online as part of the hiring process. A new study su ...

  5. linux命令(49):显示文件的指定行,打印中间几行

    linux 如何显示一个文件的某几行(中间几行) [一]从第3000行开始,显示1000行.即显示3000~3999行 cat filename | tail -n +3000 | head -n 1 ...

  6. 使用windowAnimations定义Activity及Dialog的进入退出效果

    看了android的源代码和资源文件,终于明白如何去修改设置Dialog和Activity的进入和退出效果了.设置Dialog首先通过getWindow()方法获取它的窗口,然后通过getAttrib ...

  7. 【流媒体】UPnP的工作过程

    UPnP简介 通用即插即用(英语:Universal Plug and Play,简称UPnP)是由“通用即插即用论坛”(UPnP™ Forum)推广的一套网络协议. 该协议的目标是使家庭网络(数据共 ...

  8. 本地存储localStorage以及它的封装接口store.js的使用

    本地存储localStorage以及它的封装接口store.js的使用 sublime-text chrome javascript readyGo 2016年11月20日发布   0 推荐 9 收藏 ...

  9. 解析虚拟VMware三种网络模式的根本区别

    网络模式(文字解说)VMWare提供了三种工作模式,它们是bridged(桥接模式).NAT(网络地址转换模式)和host-only(主机模式).要想在网络管理和维护中合理应用它们,你就应该先了解一下 ...

  10. Zabbix监控数据库连通性所遇问题

    Zabbix配合db2bp监控DB2数据库能否远程连接问题分析: 所遇问题,有时监控一直获取不到数据,原因是connect to连接超时了,zabbix默认监控脚本获取数据时间是3s,但最多支持30s ...