读取 golang websocket returns 随机字节

reading golang websocket returns random bytes

我的程序:

package main

import (
    "fmt"
    "io"
    "log"
    "net"

    "github.com/gobwas/ws"
)

func HandleConn(conn net.Conn) {
    for {
        header, err := ws.ReadHeader(conn)
        if err != nil {
            log.Fatal(err)
        }

        buf := make([]byte, header.Length)
        _, err = io.ReadFull(conn, buf)
        if err != nil {
            log.Fatal(err)
        }
        fmt.Println(buf)
        fmt.Println(string(buf))
    }
}

func main() {
    ln, err := net.Listen("tcp", "localhost:8080")
    if err != nil {
        log.Fatal(err)
    }
    for {
        conn, err := ln.Accept()
        if err != nil {
            log.Fatal(err)
        }
        _, err = ws.Upgrade(conn)
        if err != nil {
            log.Fatal(err)
        }
        go HandleConn(conn)
    }
}

我在浏览器控制台中做:

let socket = new WebSocket("ws://127.0.0.1:8080")
socket.send("Hello world")

我在我的终端中看到随机字节。每次调用 socket.send("Hello world") return 不同的字节。但是字节数组的长度总是等于字符串的长度。 golang 从哪里得到这些随机字节?我怎样才能解决这个问题?我的程序是文档中的示例。

如果您不打算使用 wsutil,您需要取消屏蔽有效负载:

buff := make([]byte, header.Length)
_, err = io.ReadFull(conn, buff)
if err != nil {
    // handle error
}
if header.Masked {
    ws.Cipher(buff, header.Mask, 0)
}
fmt.Println(string(buff))