質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Q&A

解決済

1回答

1960閲覧

【GO】golangでFTPSアプリを構築したいです。

Gunjirk

総合スコア23

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

0グッド

0クリップ

投稿2020/07/01 04:03

編集2020/07/02 00:50

以下ソースコードを実行したら、proc.goに飛んで終了してしまいます。
原因がわかる方いましたら、ご教授願います。

GO

1package main 2 3import ( 4 "fmt" 5 6 "github.com/onbings/ftpsclient" 7) 8 9func main() { 10 11 var FtpsClientParam_X ftpsclient.FtpsClientParam 12 13 FtpsClientParam_X.Id_U32 = 123 14 FtpsClientParam_X.LoginName_S = "mc" 15 FtpsClientParam_X.LoginPassword_S = "a" 16 FtpsClientParam_X.InitialDirectory_S = "/Seq" 17 FtpsClientParam_X.SecureFtp_B = false 18 FtpsClientParam_X.TargetHost_S = "127.0.0.1" 19 FtpsClientParam_X.TargetPort_U16 = 21 20 FtpsClientParam_X.Debug_B = false 21 FtpsClientParam_X.TlsConfig_X.InsecureSkipVerify = true 22 FtpsClientParam_X.ConnectTimeout_S64 = 2000 23 FtpsClientParam_X.CtrlTimeout_S64 = 1000 24 FtpsClientParam_X.DataTimeout_S64 = 5000 25 FtpsClientParam_X.CtrlReadBufferSize_U32 = 0 26 FtpsClientParam_X.CtrlWriteBufferSize_U32 = 0 27 FtpsClientParam_X.DataReadBufferSize_U32 = 0x100000 28 FtpsClientParam_X.DataWriteBufferSize_U32 = 0x100000 29 30 FtpsClientPtr_X := ftpsclient.NewFtpsClient(&FtpsClientParam_X) 31 if FtpsClientPtr_X != nil { 32 Err := FtpsClientPtr_X.Connect() 33 if Err == nil { 34 DirEntryArray_X, Err := FtpsClientPtr_X.List() 35 if Err == nil { 36 for _, DirEntry_X := range DirEntryArray_X { 37 fmt.Printf("(%d): %s.%s %d bytes %s\n", DirEntry_X.Type_E, DirEntry_X.Name_S, DirEntry_X.Ext_S, DirEntry_X.Size_U64, DirEntry_X.Time_X) 38 } 39 ReplyCode_i, ReplyMessage_S, Err := FtpsClientPtr_X.SendFtpCtrlCommand("FEAT", 211) 40 fmt.Printf("feat %d %s\n", ReplyCode_i, ReplyMessage_S) 41 if Err != nil { 42 Err = FtpsClientPtr_X.Disconnect() 43 } 44 45 } 46 } 47 } 48} 49
//proc.go if atomic.Load(&runningPanicDefers) != 0 { // Running deferred functions should not take long. for c := 0; c < 1000; c++ { if atomic.Load(&runningPanicDefers) == 0 { break } Gosched() } } if atomic.Load(&panicking) != 0 { gopark(nil, nil, waitReasonPanicWait, traceEvGoStop, 1) } exit(0)

以下のサイトを参考にしました。

https://github.com/onbings/ftpsclient

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

d_tutuz

2020/07/03 15:05

ローカルの環境で FTP サーバーは起動していますか?
Gunjirk

2020/07/06 00:15

d_tutuzさん、ご回答ありがとうございます! targethostの設定しているサーバーが起動しています。 業務データにつきIPアドレスを出せないため、元データのlocalhostのままにしています。 開発環境では、サーバのIPアドレスを設定しています。 ちなみにですが、、 FtpsClientPtr_X := ftpsclient.NewFtpsClient(&FtpsClientParam_X) if FtpsClientPtr_X != nil { Err := FtpsClientPtr_X.Connect() if Err == nil ←ここでproc.goの該当箇所に飛んでいます。
nobonobo

2020/07/06 23:44

proc.goうんぬんは単に終了処理ですのであまり関係ないです。 Errがnilではないからmain処理で実行する処理内容が無く、 記述通りプログラムが終了しているだけです。 Goプログラムの一般的な実装ではErrがnilでない場合はそのErrを表示しましょう。 そうすると何が問題なのかが見えてくるはずです。
Gunjirk

2020/07/07 00:04

nobonoboさん、ご回答ありがとうございます! Errを出力した結果、以下が返ってきました。 Ftps: Connection is not established 参考までにデバック内容は以下です。 09:01:04.744042 [FTP CON] Connect to IPアドレス:ポート->dial tcp4 IPアドレス:ポート: i/o timeout ローカルでFFFTPを使用したら、対象のFTPサーバーに接続できるため、原因がわからない状態です。。。 よろしくお願いします。
guest

回答1

0

ベストアンサー

github.com/onbings/ftpsclientは試してみたところ、接続できない問題があるようです。
(こういう時、GitHubの最終更新日付を確認するのはおすすめです。このリポジトリは6年前の更新からメンテされていません。)

github.com/jlaffaye/ftpを使った例を以下に上げておきます。
こちらでつながるかどうかお試しください。

go

1package main 2 3import ( 4 "log" 5 "time" 6 7 "github.com/jlaffaye/ftp" 8) 9 10func main() { 11 c, err := ftp.Dial("localhost:2121", ftp.DialWithTimeout(5*time.Second)) 12 if err != nil { 13 log.Fatal(err) 14 } 15 16 err = c.Login("user", "password") 17 if err != nil { 18 log.Fatal(err) 19 } 20 entries, err := c.List("") 21 if err != nil { 22 log.Fatal(err) 23 } 24 for _, e := range entries { 25 log.Println(e) 26 } 27 28 if err := c.Quit(); err != nil { 29 log.Fatal(err) 30 } 31}

FTPSで繋ぐ場合は DialWithExplicitTLS を利用するようです。

投稿2020/07/07 00:45

編集2020/07/07 00:53
nobonobo

総合スコア3367

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Gunjirk

2020/07/07 01:22

nobonoboさん!ご回答ありがとうございます! >github.com/onbings/ftpsclientは試してみたところ、接続できない問題があるようです。 >(こういう時、GitHubの最終更新日付を確認するのはおすすめです。このリポジトリは6年前の更新からメンテされていません。) そもそも使えないリポジトリだったのですね。 知れてよかったです。今後は注意していきます。 教えていただいたコードを試してみたところ、つながってはいるものの、暗号化の問題でエラーが出ているそうです。 2020/07/07 10:17:41 Non-anonymous sessions must use encryption. nobonoboさんの仰るとおり、DialWithExplicitTLS を利用すれば解決しそうです。 勉強不足で申し訳ないのですが、DialWithExplicitTLS の利用方法がわからないので、教えていただきたいです。。
Gunjirk

2020/07/08 01:09

ftp.Dialのオプションにftp.DialWithExplicitTLSを指定したらできました! ありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問