代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
GO
】
定义的ftp客户端库
作者:
dezaicn
/ 发布于
2015/9/14
/
1049
这是一个golang实现的ftp client的库,实现了简单的ftp操作,包括列表目录,上传、下载文件等等,可以参考。
package ftp import ( "fmt" "os" "net" "strconv" "strings" ) type FTP struct { host string port int user string passwd string pasv int cmd string Code int Message string Debug bool stream []byte conn net.Conn Error os.Error } func (ftp *FTP) debugInfo(s string) { if ftp.Debug { fmt.Println(s) } } func (ftp *FTP) Connect(host string, port int) { addr := fmt.Sprintf("%s:%d", host, port) ftp.conn, ftp.Error = net.Dial("tcp", addr) ftp.Response() ftp.host = host ftp.port = port } func (ftp *FTP) Login(user, passwd string) { ftp.Request("USER " + user) ftp.Request("PASS " + passwd) ftp.user = user ftp.passwd = passwd } func (ftp *FTP) Response() (code int, message string) { ret := make([]byte, 1024) n, _ := ftp.conn.Read(ret) msg := string(ret[:n]) code, _ = strconv.Atoi(msg[:3]) message = msg[4 : len(msg)-2] ftp.debugInfo("<*cmd*> " + ftp.cmd) ftp.debugInfo(fmt.Sprintf("<*code*> %d", code)) ftp.debugInfo("<*message*> " + message) return } func (ftp *FTP) Request(cmd string) { ftp.conn.Write([]byte(cmd + "\r\n")) ftp.cmd = cmd ftp.Code, ftp.Message = ftp.Response() if cmd == "PASV" { start, end := strings.Index(ftp.Message, "("), strings.Index(ftp.Message, ")") s := strings.Split(ftp.Message[start:end], ",", -1) l1, _ := strconv.Atoi(s[len(s)-2]) l2, _ := strconv.Atoi(s[len(s)-1]) ftp.pasv = l1*256 + l2 } if (cmd != "PASV") && (ftp.pasv > 0) { ftp.Message = newRequest(ftp.host, ftp.pasv, ftp.stream) ftp.debugInfo("<*response*> " + ftp.Message) ftp.pasv = 0 ftp.stream = nil ftp.Code, _ = ftp.Response() } } func (ftp *FTP) Pasv() { ftp.Request("PASV") } func (ftp *FTP) Pwd() { ftp.Request("PWD") } func (ftp *FTP) Cwd(path string) { ftp.Request("CWD " + path) } func (ftp *FTP) Mkd(path string) { ftp.Request("MKD " + path) } func (ftp *FTP) Size(path string) (size int) { ftp.Request("SIZE " + path) size, _ = strconv.Atoi(ftp.Message) return } func (ftp *FTP) List() { ftp.Pasv() ftp.Request("LIST") } func (ftp *FTP) Stor(file string, data []byte) { ftp.Pasv() if data != nil { ftp.stream = data } ftp.Request("STOR " + file) } func (ftp *FTP) Quit() { ftp.Request("QUIT") ftp.conn.Close() } // new connect to FTP pasv port, return data func newRequest(host string, port int, b []byte) string { conn, _ := net.Dial("tcp", fmt.Sprintf("%s:%d", host, port)) defer conn.Close() if b != nil { conn.Write(b) return "OK" } ret := make([]byte, 4096) n, _ := conn.Read(ret) return string(ret[:n]) } //该代码片段来自于: http://www.sharejs.com/codes/go/8663 使用范例如下 view sourceprint? import "fmt" import "os" import "io/ioutil" import "./ftp" func main() { // new ftp ftp := new(ftp.FTP) // set debug, default false ftp.Debug = true // connect ftp.Connect("10.0.0.0", 20) // login ftp.Login("smallfish", "****") // login failure if ftp.Code == 530 { fmt.Println("error: login failure") os.Exit(-1) } // pwd ftp.Pwd() fmt.Println("code:", ftp.Code, ", message:", ftp.Message) // mkdir new dir ftp.Mkd("/smallfish") // stor new file ftp.Request("TYPE I") b, _ := ioutil.ReadFile("/path/a.txt") ftp.Stor("/smallfish/a.txt", b) // quit ftp.Quit() }
试试其它关键字
ftp
同语言下
.
将SQL查询结果转换成map数组
.
德州扑克的核心规则算法
.
格式化时间
.
超简单QR二维码生成器
.
检查命令位置,替代 mac 下 whereis
.
百度 API 翻译工具
.
鼠标事件处理
.
快速排序
.
鸡尾酒排序
.
冒泡排序
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
dezaicn
贡献的其它代码
(
45
)
.
生成字符串的 CheckSum
.
a标签屏蔽href跳转
.
将文本框的值插入指定位置
.
快速查找所有存储过程中是否包含某字符
.
将指定网页保存为Excel
.
获取html5 audio 音频时长方法
.
全角、半角转换
.
将DateTimePicker控件清空
.
使datetimepicker为空值
.
字符串处理(全角转半角,半角转换全角)
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3