GoLang TCP连接-远程网络已关闭检查

时间:2018-12-21 07:18:09

标签: go tcp

我正在创建GoLang应用程序,客户端是android手机。我能够处理连接。如果用户关闭,则使用EOF

删除android应用程序连接

我的问题是,如果客户端仅关闭wifi网络连接,则该连接仍然有效。

这是我的代码

func main() {
    fmt.Println("Starting server...")
    connection, err := net.Listen("tcp", ":4406")

    if err != nil {
        fmt.Println(err)
    }
    defer connection.Close()
    manager := ClientManager{
        clients:    make(map[*Client]bool),
        broadcast:  make(chan []byte),
        register:   make(chan *Client),
    }

    go manager.start()
    for {
        connection, _ := connection.Accept()
        if err != nil {
            fmt.Println(err)
        }
        client := &Client{socket: connection, data: make(chan []byte), uuid: connection.RemoteAddr().String()}

        manager.register <- client
        go manager.receive(client)
        go handleConnection(client)
    }

}

处理连接

func handleConnection(client *Client) {

    conn := client.socket
    defer conn.Close()
    notify := make(chan error)
    go func() {
        buf := make([]byte, 1024)
        for {
            n, err := conn.Read(buf)
            if err != nil {
                notify <- err
                return
            }
            if n > 0 {
                fmt.Println("unexpected data: %s", buf[:n])
            }
        }
    }()

    for {
        select {
        case err := <-notify:
            if err != nil {
                fmt.Println("connection dropped message", err)
                return
            }
        case <-time.After(time.Second * 1):
            fmt.Println("timeout 1, still alive")
        }
    }
}

关闭远程wifi(拔下电缆)后,我想断开用户连接。我试图读取一个字节,然后每秒读取一次。我发送了一个字节,它也被发送了。

0 个答案:

没有答案