Files
mgmt/examples/tftp/tftp_client.go
2024-01-28 15:55:24 -05:00

55 lines
1.0 KiB
Go

package main
import (
"bytes"
"fmt"
"log"
"os"
"github.com/pin/tftp/v3"
)
func main() {
if len(os.Args) < 2 || len(os.Args) > 3 {
log.Printf("Usage: ./%s [port] <filename>", os.Args[0])
return
}
port := "69" // default
if len(os.Args) >= 3 {
port = os.Args[1]
}
file := os.Args[len(os.Args)-1]
addr := fmt.Sprintf("127.0.0.1:%s", port)
log.Printf("Connecting to: %s", addr)
c, err := tftp.NewClient(addr)
if err != nil {
log.Printf("Error connecting to server: %v", err)
return
}
wt, err := c.Receive(file, "octet") // no idea why this is "octet"
if err != nil {
log.Printf("Error receiving from server: %v", err)
return
}
// Optionally obtain transfer size before actual data.
if n, ok := wt.(tftp.IncomingTransfer).Size(); ok {
log.Printf("Transfer size: %d", n)
}
buf := new(bytes.Buffer)
n, err := wt.WriteTo(buf)
if err != nil {
log.Printf("Error writing to buffer: %v", err)
return
}
log.Printf("%d bytes received", n)
log.Printf("Got: %s", buf.String())
log.Printf("Done!")
}