您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

分享golang实现文件传输小demo

2025/3/19 6:52:08发布39次查看
下面由golang教程栏目给大家分享golang实现文件传输小demo ,希望对需要的朋友有所帮助!
获取文件信息需要用到os. stat接口,发送文件前开启接收者(服务端),启动客户端先发送文件名给接收者,接收者收到文件名返回确认信息ok,才读取本地文件 发送给接收者。
发送者:
package mainimport (    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])     }}
接收者:
package mainimport (    fmt    io    net    os)func main() {    fmt.println(请你的地址(ip:port):)    var addr string    fmt.scan(&addr)    listenner, err := net.listen(tcp, addr)    if err != nil{        fmt.println(net.listen err =, err)        return    }    defer listenner.close()    conn, errl := listenner.accept()    if errl != nil{        fmt.println(listenner.accept err =, errl)        return    }    var n int    buf := make([]byte, 1024)    n, err = conn.read(buf)    if err != nil{        fmt.println(conn.read filename err =, err)        return    }    filename := string(buf[:n])    n, err = conn.write([]byte(ok))    if err != nil{        fmt.println(conn.write ok err =, err)        return    }    recvfile(filename, conn)}func recvfile(filename string, conn net.conn){     file , err := os.create(filename)     if err != nil{         fmt.println(os.create err =, err)         return     }     defer file.close()     buf := make([]byte, 1024 * 4)     for{         n, err := conn.read(buf)         if err != nil{             if err == io.eof{                 fmt.println(文件接收完成)            } else {                fmt.println(conn.read err =, err)            }            return        }         n, err = file.write(buf[:n])         if err != nil{             fmt.println(file.write err =, err)             break        }     }}
以上就是分享golang实现文件传输小demo的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product