zoukankan      html  css  js  c++  java
  • golang学习笔记之tcp简单实现:server端与client端

    server端

    main.go

    package main
    
    import (
    	"fmt"
    	"net"
    )
    
    func main() {
    	//   simple tcp server
    	//1.listen ip+port
    	listener, err := net.Listen("tcp", "0.0.0.0:9090")
    	if err != nil {
    		fmt.Printf("listen fail, err: %v
    ", err)
    		return
    	}
    
    	//2.accept client request
    	//3.create goroutine for each request
    	for {
    		conn, err := listener.Accept()
    		if err != nil {
    			fmt.Printf("accept fail, err: %v
    ", err)
    			continue
    		}
    
    		//create goroutine for each connect
    		go process(conn)
    	}
    }
    
    func process(conn net.Conn) {
    	defer conn.Close()
    	for {
    		var buf [128]byte
    		n, err := conn.Read(buf[:])
    
    		if err != nil {
    			fmt.Printf("read from connect failed, err: %v
    ", err)
    			break
    		}
    		str := string(buf[:n])
    		fmt.Printf("receive from client, data: %v
    ", str)
    	}
    }
    

      

    client端

    main.go

    package main
    
    import (
    	"bufio"
    	"fmt"
    	"net"
    	"os"
    	"strings"
    )
    
    func main() {
    	conn, err := net.Dial("tcp", "localhost:9090")
    	defer conn.Close()
    	if err != nil {
    		fmt.Printf("connect failed, err : %v
    ", err.Error())
    		return
    	}
    
    	inputReader := bufio.NewReader(os.Stdin)
    
    	for {
    		input, err := inputReader.ReadString('
    ')
    		if err != nil {
    			fmt.Printf("read from console failed, err: %v
    ", err)
    			break
    		}
    		trimmedInput := strings.TrimSpace(input)
    		if trimmedInput == "Q" {
    			break
    		}
    		_, err = conn.Write([]byte(trimmedInput))
    
    		if err != nil {
    			fmt.Printf("write failed , err : %v
    ", err)
    			break
    		}
    	}
    }
    

      

    分别编译执行服务端和客户端

    客户端通过命令行与服务端简单交互

  • 相关阅读:
    深入探索迭代器(续)
    深入探索迭代器
    C++ 容器的综合应用的一个简单实例——文本查询程序
    multimap 和 multiset 类型
    set 类型
    map 类型
    关联容器
    Ajax请求成功, 但进不去success方法
    springboot指定配置文件启动项目
    新测可用IntelliJ IDEA 2020.1 for mac
  • 原文地址:https://www.cnblogs.com/yin5th/p/9274495.html
Copyright © 2011-2022 走看看