1 server.go

  1. 1.监听端口
  2. 2.接收客户端请求建立链接
  3. 3.创建goroutine处理链接。
  1. package main
  2. import (
  3. "fmt"
  4. "net"
  5. )
  6. func main() {
  7. listener, err := net.Listen("tcp", ":47123")
  8. if err != nil {
  9. return
  10. }
  11. for {
  12. conn, err := listener.Accept()
  13. if err != nil {
  14. continue
  15. }
  16. go Handler(conn)
  17. }
  18. }
  19. func Handler(conn net.Conn) {
  20. defer conn.Close()
  21. for {
  22. var buf [1024]byte
  23. n, err := conn.Read(buf[:])
  24. if err != nil {
  25. fmt.Println("client已退出")
  26. break
  27. }
  28. recvStr := string(buf[:n])
  29. fmt.Println("收到client数据:", recvStr)
  30. conn.Write([]byte("已收到" + recvStr))
  31. }
  32. }

2 client.go

1.建立与服务端的链接
2.进行数据收发
3.关闭链接

  1. package main
  2. import (
  3. "bufio"
  4. "fmt"
  5. "net"
  6. "os"
  7. "strings"
  8. )
  9. func main() {
  10. conn, err := net.Dial("tcp", ":47123")
  11. if err != nil {
  12. return
  13. }
  14. defer conn.Close()
  15. inputReader := bufio.NewReader(os.Stdin)
  16. for {
  17. // 读取用户输入, 如果输入Q就退出
  18. input, _ := inputReader.ReadString('\n')
  19. inputInfo := strings.Trim(input, "\r\n")
  20. if strings.ToUpper(inputInfo) == "Q" {
  21. return
  22. }
  23. // 发送数据
  24. _, err = conn.Write([]byte(inputInfo))
  25. if err != nil {
  26. return
  27. }
  28. buf := [1024]byte{}
  29. n, err := conn.Read(buf[:])
  30. if err != nil {
  31. return
  32. }
  33. fmt.Println(string(buf[:n]))
  34. }
  35. }