6.7 go 文件tcp传输服务端

/**
文件传输服务端
*/
package main

import (
	"fmt"
	"net"
	"os"
	"io"
)
//接收文件内容
func RecvFile(fileName string,conn net.Conn){
	//新建文件
	f,err:=os.Create(fileName)
	if err!=nil{
		fmt.Println("os.Create err=",err)
		return
	}
	defer f.Close()
	buf:=make([]byte,2048)
	//接收多少,写多少
	for{
		n,err:=conn.Read(buf)
		if err!=nil{
			if err==io.EOF{
		    	break	
			}else{
			 fmt.Println("os.Open err=",err);
			 return
			}
	   }
	   f.Write(buf[:n])//往文件写入内容
		
	}
	fmt.Println("文件接收ok")
}

func main(){
	//监听
	listener,err:=net.Listen("tcp","127.0.0.1:8000")
	if err!=nil{
		fmt.Println("err=",err)
		return
	}
	//结束时关闭监听
	defer listener.Close()
	
	//阻塞等待用户连接
	conn,err2:=listener.Accept()
	if err2!=nil{
		fmt.Println("err2",err2)
		return
	}
	defer conn.Close()
	//接收用户的请求
	buf:=make([]byte,1024)
	n,err3:=conn.Read(buf)
	if err3!=nil{
		fmt.Println("err3",err3)
		return
	}
	fmt.Println("收到文件名filename=",string(buf[:n]))
	fileName:=string(buf[:n])
	//回复ok
	conn.Write([]byte("ok"))
	fmt.Println("现在可以发送")
	
	//接收文件内容
	RecvFile(fileName,conn)
	
	/**
	   输出:
	   
		F:\goWorkSpace\study\06通信编程>go run 07_文件传输recv服务端.go
		收到文件名filename= python3.6.6.rar
		现在可以发送
		文件接收ok
	*/
	
	
	
	
}
发布了152 篇原创文章 · 获赞 122 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/h4241778/article/details/105500137
6.7
今日推荐