账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    Go 怎么实现局域网内客户端“发现”?
    49
    0

    比如设置一个字符串作为 GroupTag。同局域网内两台设备自动发现双方并验证 GroupTag 如果一样则开始交互数据 ?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 共 0 条
    • 在Go语言中,我们可以使用net包来实现局域网内客户端“发现”功能。以下是一个简单的示例:

      ```go package main

      import ( "fmt" "net" )

      func main() { // 创建一个服务器 s := net.Listen("tcp", ":8080")

      // 接收客户端连接
      for {
          conn, err := s.Accept()
          if err != nil {
              fmt.Println("Error accepting connection:", err)
              continue
          }
      
          // 创建一个新的连接
      新连接, err := conn.Accept()
          if err != nil {
              fmt.Println("Error accepting new connection:", err)
              continue
          }
      
          // 创建一个接收者,用于接收客户端的连接请求
          sub, err := conn.Sub()
          if err != nil {
              fmt.Println("Error subscribing:", err)
              continue
          }
      
          // 创建一个接收者列表
          subList := make(map[string]*net.Conn)
      
          // 开始接收客户端的连接请求
          for {
              err := sub.ReadFrom(conn)
              if err != nil {
                  fmt.Println("Error reading from connection:", err)
                  continue
              }
      
              // 当接收到一个连接请求时,将它添加到接收者列表中
              if subList[conn.RemoteAddr()] != nil {
                  fmt.Println("Client is already connected, ignore connection:", conn.RemoteAddr())
                  continue
              }
              subList[conn.RemoteAddr()] = conn
          }
      
          // 关闭连接
          err = sub.Close()
          if err != nil {
              fmt.Println("Error closing connection:", err)
          }
      }
      

      } ```

      这个示例创建了一个服务器监听8080端口,并且可以接收客户端的连接请求。当一个客户端连接到服务器时,服务器会创建一个新的连接,然后将这个连接添加到接收者列表中。当接收到一个新的连接请求时,服务器会检查这个连接是否已经在接收者列表中,如果不在,服务器会忽略这个连接,否则服务器会添加这个连接到接收者列表中。最后,服务器会关闭这个连接。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部