zoukankan      html  css  js  c++  java
  • go语言之TCP编程

    服务端

    package main
    
    import (
    	"fmt"
    	"net"
    )
    
    func process(conn net.Conn){
    	defer conn.Close()
    	for{
    		buf:=make([]byte,1024)
    		fmt.Printf("服务器在等待客户端%s发送消息",conn.RemoteAddr().String())
    		n,err:=conn.Read(buf)//从conn读取数据
    		if err!=nil{
    			fmt.Printf("客户端%s退出。。。",conn.RemoteAddr().String())
    			return
    		}
    		fmt.Println(string(buf[:n]))
    	}
    }
    
    func main(){
    	fmt.Println("服务器开始监听")
    	listen,err:=net.Listen("tcp","0.0.0.0:7077")
    	if err!=nil{
    		fmt.Println("Listen出错!",err)
    		return
    	}
    	defer listen.Close()
    
    	//循环等待客户端来连接
    	for{
    		fmt.Println("等待客户端来连接")
    		conn,err:=listen.Accept()
    		if err!=nil{
    			fmt.Println("Accept出错",err)
    		}else{
    			fmt.Printf("Accept() suc con=%v 客户端 ip=%v
    ", conn, conn.RemoteAddr().String())
    		}
    		//这里准备一个协程,为客户端服务
    		go process(conn)
    	}
    }
    

    客户端

    package main
    
    import (
    	"bufio"
    	"fmt"
    	"net"
    	"os"
    )
    
    func main(){
    	conn,err:=net.Dial("tcp","127.0.0.1:7077")
    	if err!=nil{
    		fmt.Println("Dial出错",err)
    		return
    	}
    	//功能一:客户端可以发送单行数据,然后就退出
    	reader := bufio.NewReader(os.Stdin) //os.Stdin 代表
    	//从终端读取一行用户输入,并准备发送给服务器
    	line, err := reader.ReadString('
    ')
    	if err != nil {
    		fmt.Println("readString err=", err)
    	}
    	//再将 line 发送给 服务器
    	n, err := conn.Write([]byte(line))
    	if err != nil {
    		fmt.Println("conn.Write err=", err)
    	}
    	fmt.Printf("客户端发送了 %d 字节的数据,并退出", n)
    
    }
    

      

  • 相关阅读:
    几种常见的树:排序二叉树、平衡二叉树、红黑树、B+树
    网关高可用
    微服务网关GateWay
    微服务网关Zuul
    客户端容错保护Alibaba Sentinel
    客户端容错保护Hystrix
    服务调用Feign
    服务注册与发现Consul
    服务负载均衡调用Ribbon
    服务注册Eureka高级
  • 原文地址:https://www.cnblogs.com/mango1997/p/15530531.html
Copyright © 2011-2022 走看看