Go: net

 

Server:

复制代码
package main

import (
  "fmt"
  "net"
)

func main() {
  fmt.Println("net.Listen")
  listen, err := net.Listen("tcp", "0.0.0.0:5555")
  if err != nil {
    fmt.Println(err)
    return
  }
  defer func(listen net.Listener) {
    err := listen.Close()
    if err != nil {
      fmt.Println("main close err  >>>", err)
    }
  }(listen)
  for {
    fmt.Println("listen.Accept")
    conn, err := listen.Accept()
    if err != nil {
      fmt.Println("Accept error:", err)
    } else {
      fmt.Printf("conn %T %v client: %v\n", conn, conn, conn.RemoteAddr().String())
    }
    go process(conn)
  }
}

func process(conn net.Conn) {
  defer func(conn net.Conn) {
    err := conn.Close()
    if err != nil {
      fmt.Println("process close err  >>>", err)
    }
  }(conn)

  buffer := make([]byte, 1024)

  for {
    length, err := conn.Read(buffer)
    if err != nil {
      fmt.Println("process read err  >>>", err)
      return
    }
    fmt.Print(string(buffer[:length]))
  }
}
复制代码

 

client:

复制代码
package main

import (
  "bufio"
  "fmt"
  "net"
  "os"
  "strings"
)

func main() {
  conn, err := net.Dial("tcp", "localhost:5555")

  if err != nil {
    fmt.Println(err)
    return
  }

  reader := bufio.NewReader(os.Stdin)

  for {
    readString, err := reader.ReadString('\n')
    if err != nil {
      fmt.Println("readString err  >>>", err)
    }
    readString = strings.Trim(readString, " \r\n")

    if readString == "exit" {
      fmt.Println("client exit")
      return
    }
    _, err = conn.Write([]byte(readString + "\n"))
    if err != nil {
      fmt.Println("write err  >>>", err)
    }
  }
}
复制代码

 

posted @   ascertain  阅读(32)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
历史上的今天:
2021-05-20 centos6 阿里云 yun源
点击右上角即可分享
微信分享提示