Go语言Socket-Agent双向通迅

闲无事,搞个Socket双向通迅的聊天室,也可以指定单发消息

Server.go
listen_socket, err := net.Listen("tcp4", "localhost:110")
if err != nil {
   log.Println(err)
}
defer listen_socket.Close()

wg_server.Add(3)

//接受Client消息
go func() {
   for {
      new_conn, err := listen_socket.Accept()
      clientArr[new_conn.RemoteAddr().String()] = new_conn
      if err != nil {
         continue
      }
      fmt.Println(new_conn.RemoteAddr().String() + " 上线了")
      go sendClient(new_conn)
   }
   wg_server.Done()
}()

//广播给所有Client发消息
go func() {
   for {
      go clientListen()
      time.Sleep(time.Second * 10)
   }
   wg_server.Done()
}()

//给单个Client发消息
go func() {
   for {
      var s string;
      fmt.Print("请输入客户端标识:")
      fmt.Scanf("%s", &s)
      if len(s) > 0 {
         go oneClientListen(s)
      }
   }
   wg_server.Done()
}()

wg_server.Wait()
Agent.go
addr := "localhost:110"
tcpAddr, err := net.ResolveTCPAddr("tcp4", addr)
if err != nil {
   log.Println(err)
   log.Println("建立TcpAddr对象失败")
   //退出程序
   os.Exit(1)
}
connTcp, err := net.DialTCP("tcp4", nil, tcpAddr)
if err != nil {
   log.Println(err)
   log.Println("建立Server通迅失败")
   os.Exit(1)
}

wg_client.Add(2)

//向Server发送消息
go func() {
   for {
      var s string;
      fmt.Print("请输入要发送的消息:")
      fmt.Scanf("%s", &s)
      connTcp.Write([]byte(s))
   }
   wg_client.Done()
}()

//监听Server通知
go func() {
   for {
      go listenServerMessage(connTcp)
      time.Sleep(time.Second * 3)
   }
   wg_client.Done()
}()

wg_client.Wait()

Github: Golang-Socket长连接通迅

郝先生

继续阅读此作者的更多文章