Go语言实现聊天小工具的示例代码

小工具分为server端和client端,废话不多说,代码如下

代码实现

server.go

  1. package main
  2. import (
  3.      “bufio”
  4.      “fmt”
  5.      “net”
  6.      “os”
  7.      “strings”
  8. )
  9. func process(conn net.Conn) {
  10.      defer conn.Close()
  11.      var tmp [128]byte
  12.      reader := bufio.NewReader(os.Stdin)
  13.      for {
  14.          n, err := conn.Read(tmp[:]) // 读取连接中的数据
  15.          if err != nil {
  16.              fmt.Printf(“read failed err:%v\n”, err)
  17.              break
  18.          }
  19.          fmt.Println(“Clent:”, string(tmp[:n]))
  20.          fmt.Print(“Server:”)
  21.          text, _ := reader.ReadString(‘\n’)
  22.          msg := strings.TrimSpace(text)
  23.          conn.Write([]byte(msg))
  24.      }
  25. }
  26. func main() {
  27.      // 监听tcp端口
  28.      listen, err := net.Listen(“tcp”, “127.0.0.1:10086”)
  29.      if err != nil {
  30.          fmt.Printf(“start server failed err:%v\n”, err)
  31.          return
  32.      }
  33.      // for循环实现建立多个连接
  34.      for {
  35.          conn, err := listen.Accept() // 建立连接
  36.          if err != nil {
  37.              fmt.Printf(“accept failed err:%v\n”, err)
  38.              return
  39.          }
  40.          // 每个连接建立一个goroutine处理连接
  41.          go process(conn)
  42.      }
  43. }

client.go

  1. package main
  2. import (
  3.      “bufio”
  4.      “fmt”
  5.      “net”
  6.      “os”
  7.      “strings”
  8. )
  9. func main() {
  10.      // 与服务端建立连接
  11.      conn, err := net.Dial(“tcp”, “127.0.0.1:10086”)
  12.      if err != nil {
  13.          fmt.Printf(“conn failed err:%v”, err)
  14.          return
  15.      }
  16.      var msg string
  17.      var tmp [128]byte
  18.      reader := bufio.NewReader(os.Stdin)
  19.      for {
  20.          fmt.Print(“Client:”)
  21.          text, _ := reader.ReadString(‘\n’)
  22.          msg = strings.TrimSpace(text) // 识别字符串中的特别字符并去掉开头末尾空格
  23.          if msg == “exit” {
  24.              break
  25.          }
  26.          // 往连接里写入数据
  27.          conn.Write([]byte(msg))
  28.          n, err := conn.Read(tmp[:]) // 读取连接中的数据
  29.          if err != nil {
  30.              fmt.Printf(“read failed err:%v”, err)
  31.              return
  32.          }
  33.          fmt.Println(“Server:”, string(tmp[:n]))
  34.      }
  35.      conn.Close()
  36. }

运行效果

D:\Software\godata\src\demo\server>go run main.go
Clent: 你好
Server:hello
Clent: 很高兴见到你
Server:我也是
Clent: 我是你爸爸
Server:滚

到此这篇关于Go语言实现聊天小工具的示例代码的文章就介绍到这了,更多相关Go语言聊天工具内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

标签

发表评论