duanjiao3754 2019-09-04 04:44
浏览 68

我已通过使用大猩猩将其作为客户端连接。 连接后。 如何在GO中关闭它?

As i am learning golang to work with Web socket and its connected as a client from golang but after connecting it, its not getting disconnect. So how can i close it?

func WebSocketClientGO() {
    flag.Parse()
    log.SetFlags(0)

    interrupt := make(chan os.Signal, 1)
    signal.Notify(interrupt, os.Interrupt)

    u := url.URL{Scheme: "ws", Host: *addr, Path: "/ws/player/BHMb1QZoiQWcOVPxa7OMd0AUL"}

    log.Printf("connecting to %s", u.String())

    c, _, err := websocket.DefaultDialer.Dial(u.String(), nil)
    if err != nil {
        log.Fatal("dial:", err)
    }
    defer c.Close()

    done := make(chan struct{})


    go func() {
        defer close(done)
        for {
            _, message, err := c.ReadMessage()
            if err != nil {
                log.Println("read:", err)
                return
            }
            log.Printf("recv: %s", message)
        }
    }()

    ticker := time.NewTicker(time.Second)
    defer ticker.Stop()

    for {
        select {
        case <-done:
            return
        case t := <-ticker.C:
            err := c.WriteMessage(websocket.TextMessage, []byte(t.String()))
            if err != nil {
                log.Println("write:", err)
                return
            }
        case <-interrupt:
            log.Println("interrupt")

            err := c.WriteMessage(websocket.CloseMessage, websocket.FormatCloseMessage(websocket.CloseNormalClosure, ""))
            c.Close()
            if err != nil {
                log.Println("write close:", err)
                c.Close()
                return
            }
            select {

            case <-done:
                log.Println("Done In For")
            case <-time.After(time.Second):
                log.Println("Done In For With Time")
            }
            return
        }
    }
}

This is response what i get but when i want to disconnect it it wont and it stuck so suggest me about this, i have find solutions but it wasn't working

connecting to ws://10.68.101.13:8061/ws/player/iHel5oWq9bTQC6lJpFwSRmIga
recv: {"code":500,"data":null,"message":"Internal Error","type":"ERROR"}
interrupt
read: read tcp 10.68.101.213:55709->10.68.101.13:8061: use of closed network connection
Done In For
  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥20 有关区间dp的问题求解
    • ¥15 多电路系统共用电源的串扰问题
    • ¥15 slam rangenet++配置
    • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
    • ¥15 对于相关问题的求解与代码
    • ¥15 ubuntu子系统密码忘记
    • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
    • ¥15 保护模式-系统加载-段寄存器
    • ¥15 电脑桌面设定一个区域禁止鼠标操作
    • ¥15 求NPF226060磁芯的详细资料