/**
文件传输客户端
*/
package main
import (
"io"
"fmt"
"os"
"net"
)
//发送数据
func SendFile(path string,conn net.Conn){
//打开文件
f,err:=os.Open(path)
if err!=nil{
fmt.Println("os.Open err=",err);
return
}
defer f.Close()
buf:=make([]byte,2048)
//读文件,读多少发多少
for{
n,err:=f.Read(buf)
if err!=nil{
if err==io.EOF{
break
}else{
fmt.Println("os.Open err=",err);
return
}
}
conn.Write(buf[:n])
}
}
func main(){
var path string
fmt.Scan(&path)
//获取文件名 info.Name()
info,err:=os.Stat(path)
if err!=nil{
fmt.Println("os.stat=",err);
return
}
//主动连接服务器
conn,err1:=net.Dial("tcp","127.0.0.1:8000")
if err1!=nil{
fmt.Println("net.Dial=",err1);
return
}
defer conn.Close()
//给接收方,先发文件名
_,err3:=conn.Write([]byte(info.Name()))
if err3!=nil{
fmt.Println("net.Dial=",err3);
return
}
fmt.Println("我要发送文件",info.Name())
//接收对方的回复,如果回复ok,说明对方准备好,可以发文件
buf:=make([]byte,1024)
n2,err4:=conn.Read(buf)
if err4!=nil{
fmt.Println("net.Dial=",err4);
return
}
if "ok"==string(buf[:n2]){
fmt.Println("接收到指令:",string(buf[:n2]))
SendFile(path,conn)
}
/**
输出:
F:\goWorkSpace\study\06通信编程>go run 06_文件传输send客户端.go
F:\soft\安装包\python3.6.6.rar
我要发送文件 python3.6.6.rar
接收到指令: ok
*/
}
6.6 go 文件tcp传输客户端
猜你喜欢
转载自blog.csdn.net/h4241778/article/details/105500117
今日推荐
周排行