• go语言之TCP通信


    服务端

    package main
    
    import (
    	"bufio"
    	"fmt"
    	"net"
    )
    
    // 处理函数
    func process(conn net.Conn) {
    	defer conn.Close() // 关闭连接
    	for {
    		reader := bufio.NewReader(conn)
    		var buf [128]byte
    		n, err := reader.Read(buf[:]) // 读取数据
    		if err != nil {
    			fmt.Println("read from client failed, err:", err)
    			break
    		}
    		recvStr := string(buf[:n])
    		fmt.Println("收到client端发来的数据:", recvStr)
    		conn.Write([]byte(recvStr)) // 发送数据
    	}
    }
    
    func main() {
    	listen, err := net.Listen("tcp", "127.0.0.1:9000")
    	if err != nil {
    		fmt.Println("listen failed, err:", err)
    		return
    	}
    	for {
    		conn, err := listen.Accept() // 建立连接
    		if err != nil {
    			fmt.Println("accept failed, err:", err)
    			continue
    		}
    		go process(conn) // 启动一个goroutine处理连接
    	}
    }

    客户端

    package main
    
    import (
    	"bufio"
    	"fmt"
    	"net"
    	"os"
    	"strings"
    )
    
    func main() {
    	conn, err := net.Dial("tcp", "127.0.0.1:9000")
    	if err != nil {
    		fmt.Println("err :", err)
    		return
    	}
    	defer conn.Close() // 关闭连接
    	inputReader := bufio.NewReader(os.Stdin)
    	for {
    		input, _ := inputReader.ReadString('\n') // 读取用户输入
    		inputInfo := strings.Trim(input, "\r\n")
    		if strings.ToUpper(inputInfo) == "Q" { // 如果输入q就退出
    			return
    		}
    		_, err = conn.Write([]byte(inputInfo)) // 发送数据
    		if err != nil {
    			return
    		}
    		buf := [512]byte{}
    		n, err := conn.Read(buf[:])
    		if err != nil {
    			fmt.Println("recv failed, err:", err)
    			return
    		}
    		fmt.Println(string(buf[:n]))
    	}
    }
    

      

  • 相关阅读:
    使用vim + cscope/ctags
    python类库32[序列化和反序列化之pickle]
    Perforce2012新特征=20个用户免费+云
    Linux进程的uid和euid
    perl安装模块到自己的home ( install perl module without root)
    Python分布式+云计算
    Linux命令xargs+cut
    python实例32[简单的HttpServer]
    Python转载[编码规范]
    Linux命令lsof
  • 原文地址:https://www.cnblogs.com/mango1997/p/16058665.html
Copyright © 2020-2023  润新知