1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
| package main
import ( "fmt" "io" "net" "os" )
func sendFile(fp string, conn net.Conn) { file, err := os.Open(fp) if err != nil { fmt.Println("open file faild") return } buf := make([]byte, 1024*4) for { n, err := file.Read(buf) if err != nil { if err == io.EOF { fmt.Println("文件发送完毕") return } return } conn.Write(buf[:n]) } }
func main() { // 获取文件路径 fmt.Println("请输入需要传输文件的路径:") var filePath string fmt.Scan(&filePath)
fileInfo, err := os.Stat(filePath) if err != nil { fmt.Println("err:", err) return } fileName := fileInfo.Name() fileSize := fileInfo.Size() fmt.Printf("fileName:%s\nfileSize:%d\n", fileName, fileSize)
// 连接服务器 conn, err := net.Dial("tcp", "127.0.0.1:8888") if err != nil { fmt.Println("net.Dial() faild") return } defer conn.Close() // 发送文件名 _, err = conn.Write([]byte(fileName)) if err != nil { fmt.Println("conn.Write() faild") return } buf := make([]byte, 4) // 接收服务器返回 n, err := conn.Read(buf) if err != nil { fmt.Println("conn.Read() faild") return }
if "ok" == string(buf[:n]) { sendFile(filePath, conn) } }
|