Socket

Go——Socket - 图1

HelloWorld

客户端代码

  1. package main
  2. import (
  3. "bufio"
  4. "fmt"
  5. "io"
  6. "net"
  7. "time"
  8. )
  9. func main() {
  10. var tcpAddr *net.TCPAddr
  11. tcpAddr,_ = net.ResolveTCPAddr("tcp","127.0.0.1:9999")
  12. conn,err := net.DialTCP("tcp",nil,tcpAddr)
  13. if err!=nil {
  14. fmt.Println("Client connect error ! " + err.Error())
  15. return
  16. }else {
  17. fmt.Println(conn.LocalAddr().String() + "客户端连接成功!")
  18. }
  19. defer conn.Close()
  20. // 向服务器发送数据
  21. reader := bufio.NewReader(conn)
  22. conn.Write([]byte("hi server \n"))
  23. for {
  24. // 接受服务器返回数据
  25. msg, err := reader.ReadString('\n')
  26. fmt.Println(msg)
  27. if err != nil || err == io.EOF {
  28. fmt.Println(err)
  29. break
  30. }
  31. time.Sleep(time.Second * 2)
  32. b := []byte(fmt.Sprintf("client time:%s\n",time.Now().String()))
  33. _, err = conn.Write(b)
  34. if err != nil {
  35. fmt.Println(err)
  36. break
  37. }
  38. }
  39. }

服务器代码

  1. package main
  2. import (
  3. "bufio"
  4. "fmt"
  5. "io"
  6. "net"
  7. "time"
  8. )
  9. //tcp server
  10. func main() {
  11. //定义一个tcp断点
  12. var tcpAddr *net.TCPAddr
  13. //通过ResolveTCPAddr实例一个具体的tcp断点
  14. tcpAddr,_ = net.ResolveTCPAddr("tcp",":9999")
  15. //打开一个tcp断点监听
  16. tcpListener,err:= net.ListenTCP("tcp",tcpAddr)
  17. if err !=nil{
  18. panic(err)
  19. }
  20. defer tcpListener.Close()
  21. fmt.Println("server start success")
  22. //循环接收客户端的连接,创建一个协程具体去处理连接
  23. for{
  24. tcpConn,err := tcpListener.AcceptTCP()
  25. if err!=nil {
  26. fmt.Println(err)
  27. continue
  28. }
  29. fmt.Println(tcpConn.RemoteAddr().String()+"connect success")
  30. go tcpPipe(tcpConn)
  31. }
  32. }
  33. //具体处理连接过程方法
  34. func tcpPipe(conn *net.TCPConn){
  35. //tcp连接的地址
  36. ipStr := conn.RemoteAddr().String()
  37. defer func() {
  38. fmt.Println(" Disconnected : " + ipStr)
  39. conn.Close()
  40. }()
  41. //获取一个连接的reader读取流
  42. reader := bufio.NewReader(conn)
  43. for {
  44. message,_,err := reader.ReadLine()
  45. if err!=nil || err == io.EOF {
  46. break
  47. }
  48. fmt.Println(string(message))
  49. time.Sleep(time.Second*3)
  50. b := []byte(fmt.Sprintf("server time:%s\n",time.Now().String()))
  51. conn.Write(b)
  52. }
  53. }