1. 程式人生 > 其它 >GO FTP 簡易服務端和客戶端

GO FTP 簡易服務端和客戶端

服務端:

package main

import (
	"log"

	"goftp.io/server/core"
	"goftp.io/server/driver/file"
)

func main() {
	Name := "FTP Server"
	rootPath := "./static" //FTP根目錄
	Port := 2121           //FTP 埠
	var perm = core.NewSimplePerm("test", "test")

	// Server options without hostname or port
	opt := &core.ServerOpts{
		Name: Name,
		Factory: &file.DriverFactory{
			RootPath: rootPath,
			Perm:     perm,
		},
		Auth: &core.SimpleAuth{
			Name:     "username",       // FTP 賬號
			Password: "Password", // FTP 密碼
		},
		Port: Port,
	}
	// start ftp server
	s := core.NewServer(opt)
	err := s.ListenAndServe()
	if err != nil {
		log.Fatal("Error starting server:", err)
	}
}

  

客戶端:  三秒傳一次,傳成功為止

package main

import (
	"fmt"
	"log"
	"os"
	"time"

	"github.com/jlaffaye/ftp"
)

func main() {
	// Do something with the FTP conn

	for {
		newFunction()
		time.Sleep(3 * time.Second)
	}
}

func newFunction() {
	file, err := os.Open("data.dmp")
	if err != nil {
		log.Println("讀取檔案:")
		log.Println(err)
		return
	}

	c, err := ftp.Dial("127.0.0.1:2121", ftp.DialWithTimeout(5*time.Second))
	//c, err := ftp.Dial("172.16.33.194:2121", ftp.DialWithTimeout(5*time.Second))
	if err != nil {
		log.Println("登入0:")
		log.Println(err)
		return
	}

	err = c.Login("username", "password")
	if err != nil {
		log.Println("登入1:")
		log.Println(err)
		return
	}

	if err := c.Stor(`data.dmp`, file); err != nil {
		log.Println("上傳:")
		log.Println(err)
		return
	} else {
		log.Println("上傳成功")
		os.Exit(0)
	}
 
}