Соединение GoLang TCP - удаленная сеть не работает - PullRequest
0 голосов
/ 21 декабря 2018

Я создаю приложение GoLang, и клиенты являются телефонами Android.Я могу обрабатывать соединения.Если пользователь закрывает, приложение для Android разрывается с EOF

Моя проблема в том, что если клиент просто отключил соединение Wi-Fi, сеть все еще жива.

Вот мой код

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)
    }

}

Handeling соединения

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 выключен (кабель удален), я хочу отключить пользователя.Я пытался читать байт и каждую секунду, и он читает это.Я отправил байт, и он также отправлен.

...