package main

import (    "fmt"

"io"

"net"

"os")

func main() {

fmt.Println("请输入接收者地址(IP:PORT):")    var addr string

fmt.Scan(&addr)

fmt.Println("请输入需要传输的文件:")    var path string

fmt.Scan(&path)

info, errf := os.Stat(path)    if errf != nil{

fmt.Println("os.Stat errf =", errf)        return

}

conn, err := net.Dial("tcp", addr)    if err != nil{

fmt.Println("net.Dial err =",err)        return

}

defer conn.Close()

_, err = conn.Write([]byte(info.Name()))    if err != nil{

fmt.Println("conn.Write info.Name err =",err)        return

}    var n int

buf := make([]byte, 1024)

n, err = conn.Read(buf)    if err != nil{

fmt.Println("conn.Read ok err =", err)        return

}    if "ok" == string(buf[:n]){

fmt.Println("ok")

SendFile(path, conn)

}

}

func SendFile(path string, conn net.Conn){

file , err := os.Open(path)     if err != nil{

fmt.Println("os.Open err =", err)         return

}

defer file.Close()

buf := make([]byte, 1024 * 4)     for {

n, err := file.Read(buf)         if err != nil{             if err == io.EOF{

fmt.Println("文件发送完毕")

} else{

fmt.Println("file.Read err =",err)

}             return

}         if n == 0{

fmt.Println("文件发送完毕")             break

}

conn.Write(buf[:n])

}

}