zoukankan      html  css  js  c++  java
  • 32_Go基础(TCP通信)

    Server:

    package main
    
    import (
        "bufio"
        "fmt"
        "net"
    )
    
    func worker(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 msg from client failed ,err: ", err)
                break
            }
    
            resStr := string(buf[:n])
            fmt.Println("收到Client的数据:", resStr)
            conn.Write([]byte(resStr)) // 发送数据
        }
    }
    
    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)
            }
            go worker(conn) // 启动一个 goroutine 处理
        }
    }

    Client: 

    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)
        }
        defer conn.Close()
    
        cReader := bufio.NewReader(os.Stdin)
        for {
            input, _ := cReader.ReadString('\n')
            info := strings.Trim(input, "\r\n")
            if strings.ToUpper(info) == "Q" { // 如果输入q/Q,就退出
                return
            }
            _, err := conn.Write([]byte(info)) // 发送数据
            if err != nil {
                buf := [512]byte{}
                n, err := conn.Read(buf[:])
                if err != nil {
                    fmt.Println("Client receive msg err: ", err)
                    return
                }
                fmt.Println(string(buf[:n]))
            }
        }
    }
  • 相关阅读:
    何时使用Hibernate (Gavin King的回答)
    Transaction in ADO.net 2.0
    CollectionClosureMethod in .Net
    如何实现真正的随机数
    如何测试私有方法?(TDD)
    try catch 块的使用原则
    多态小quiz
    A simple way to roll back DB pollution in Test
    一个画图程序的演变
    当前软件开发的反思
  • 原文地址:https://www.cnblogs.com/luwei0915/p/15523610.html
Copyright © 2011-2022 走看看