• Go语言网络通信---TCP通信上传一个小文件


    server:

    package main
    
    import (
    	"fmt"
    	"net"
    	"os"
    )
    
    func SHandleError(err error, when string)  {
    	if err != nil{
    		fmt.Println("服务端异常退出,err=", err, when)
    		os.Exit(1)
    	}
    }
    
    func main() {
    	//建立tcp监听
    	listener, e := net.Listen("tcp", ":8080")
    	SHandleError(e, "net.Listen")
    	defer func() {
    		listener.Close()
    		fmt.Println("服务端正常退出")
    	}()
    
    	//接受客户端请求,建立会话专线Conn
    	conn, e := listener.Accept()
    	SHandleError(e, "listener.Accept")
    	defer func() {
    		conn.Close()
    		fmt.Printf("已断开与%v的链接
    ", conn.RemoteAddr())
    	}()
    
    	dstFile, e := os.OpenFile(`meinv1.mp4`, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0666)
    	for {
    		//接受客户端上传的文件
    		buffer := make([]byte, 100)
    		n, e := conn.Read(buffer)
    		SHandleError(e, "conn.Read")
    
    		//写入服务端本地文件
    		dstFile.Write(buffer[:n])
    		fmt.Printf("成功写入%d个字节
    ", n)
    
    		//如果本次接受的数据没有填满一个缓冲区,说明数据已经接受完毕
    		if n < 100{
    			fmt.Println("文件接受成功")
    			dstFile.Close()
    
    			//回复客户端已收到文件
    			conn.Write([]byte("文件接受成功"))
    			break
    		}
    	}
    
    
    
    }
    

      client:

    package main
    
    import (
    	"fmt"
    	"io/ioutil"
    	"net"
    	"os"
    )
    
    /*
    ·实现tcp文件上传功能
    */
    
    func CHandleError(err error,when string)  {
    	if err != nil{
    		fmt.Println("客户端异常退出:err=", err, when)
    		os.Exit(1)
    	}
    }
    
    func main() {
    	conn, e := net.Dial("tcp", "127.0.0.1:8080")
    	CHandleError(e, "net.Dial")
    
    	defer func() {
    		conn.Close()
    		fmt.Println("客户端正常退出")
    	}()
    
    	bytes, e := ioutil.ReadFile(`preview.jpg`)
    	CHandleError(e, "ioutil.ReadFile")
    	_, e = conn.Write(bytes)
    	CHandleError(e, "conn.Write")
    
    	buffer := make([]byte, 1024)
    	n, e := conn.Read(buffer)
    	CHandleError(e, "conn.Read")
    	replyMsg := buffer[:n]
    	fmt.Println("服务端:", string(replyMsg))
    }
    

      

  • 相关阅读:
    几何变换
    图片移动、旋转、resize、
    load、display、save
    java基础—java三大集合ArrayList、HashSet、HashMap
    java基础—修饰符、抽象类、接口
    java基础——转义字符
    java基础—String类型常用api
    Python中 sys.argv[]的用法
    Java—this关键字
    在CMD中运行Python文件
  • 原文地址:https://www.cnblogs.com/yunweiqiang/p/12734546.html
Copyright © 2020-2023  润新知