6.6 go 文件tcp传输客户端

/**
文件传输客户端
*/
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

	*/
	
}
发布了152 篇原创文章 · 获赞 122 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/h4241778/article/details/105500117
6.6
今日推荐