读取golang websocket返回随机字节

读取golang websocket返回随机字节,go,websocket,Go,Websocket,我的节目: package main import ( "fmt" "io" "log" "net" "github.com/gobwas/ws" ) func HandleConn(conn net.Conn) { for { header, err := ws.ReadHeader(conn) if err

我的节目:

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”)都会返回不同的字节。但是字节数组的长度始终等于字符串的长度。golang从哪里得到这些随机字节?我怎样才能解决这个问题?我的程序是文档中的一个示例。

如果您不打算使用
wsutil
,则需要取消有效负载的掩码:

buff:=make([]字节,头.Length)
_,err=io.ReadFull(连接,buff)
如果出错!=零{
//处理错误
}
如果标题被屏蔽{
ws.Cipher(buff,header.Mask,0)
}
fmt.Println(字符串(浅黄色))

我不确定您指的是什么文档,或者您使用的是哪个websocket库,但没有一个流行的文档让您直接访问
net.Conn
。唯一具有
Update
功能的服务器(gorilla)接受HTTP请求和响应,而不是
net.Conn
,并且不返回
net.Conn
。你能提供一个最小的、可重复的例子吗?@Adrian我使用:。文件:。我在我的代码中使用tcp是因为零拷贝升级是必需的:可能值得一提的是,如果您重用头来写入客户端(例如,
ws.WriteHeader(conn,header)
),那么您应该按照