Go语言上传文件

Server

listener,err:=net.Listen("tcp","127.0.0.1:8006")
	if err!=nil {
		fmt.Print(err)
		return
	}
	defer listener.Close()

	conn,err:=listener.Accept()
	if err!=nil {
		fmt.Print(err)
		return
	}
	defer conn.Close()

	buf:=make([]byte,1024)
	n,err:=conn.Read(buf)
	if err!=nil {
		fmt.Print(err)
		return
	}
	conn.Write([]byte("ok"))
	filename:=string(buf[:n])
	func(conn net.Conn,filename string) {
		fp,err:=os.Create("/Users/zmx/"+filename)
		if err!=nil {
			fmt.Print(err)
			return
		}
		defer fp.Close()
		buf:=make([]byte,1024)
		for  {
			n,err:=conn.Read(buf)
			if err!=nil {
				fmt.Print(err)
				return
			}
			fp.Write(buf[:n])
		}
	}(conn,filename)

Client

filePath:="/Users/zmx/go/180726/src/main/index.go"
	fileinfo,err:=os.Stat(filePath)
	if err!=nil {
		fmt.Print(err)
		return
	}
	filename:=fileinfo.Name()

	conn,err:=net.Dial("tcp","127.0.0.1:8006")
	if err!=nil {
		fmt.Print(err)
		return
	}
	defer conn.Close()
	conn.Write([]byte(filename))
	buf:=make([]byte,1024)
	n,err:=conn.Read(buf)
	if err!=nil {
		fmt.Print(err)
		return
	}
	if string(buf[:n])=="ok" {
		func(conn net.Conn,filePath string) {
			fp,err:=os.Open(filePath)
			if err!=nil {
				fmt.Print(err)
				return
			}
			defer fp.Close()
			buf:=make([]byte,1024)
			for  {
				n,err:=fp.Read(buf)
				if err!=nil {
					if err==io.EOF {
						return
					} else {
						fmt.Print(err)
						return
					}
				}
				conn.Write(buf[:n])
			}
		}(conn,filePath)
	}

猜你喜欢

转载自blog.csdn.net/baidu_25845567/article/details/82354251