gpt4 book ai didi

go - 如何在go lang中接收多帧二进制数据

转载 作者:IT王子 更新时间:2023-10-29 02:22:24 27 4
gpt4 key购买 nike

我成功地将帧的形式文件数据发送到websocket。我可以将文件数据拆分为多个帧并发送到 websocket,但我不知道如何在一个数据数组中接收和合并帧。

我将执行此操作以获取将文件发送到 websocket 的进度:

import (
"golang.org/x/net/websocket"
"io/ioutil"
...
...
)
...
...
var data []byte
err = websocket.Message.Receive(ws, &data)
if (err == nil) {
ioutil.WriteFile("/home/img.jpg", data, 0644)
}

最佳答案

通常应该不需要将数据拆分成多帧再合并。

如果你想取得进展,也许可以用相对较小的缓冲区大小调用 func (ws *Conn) Read(msg []byte) (n int, err error)。所以你不会一口气读完整封邮件。但是您可能必须始终在文件内容之前发送文件大小。 (例如,前 8 个字节始终是文件大小,文件内容从第 9 个字节开始。)所以您可以使用 sumOfReceivedSize/fileSize 来显示每次调用 Read 后的进度.


如果无论如何都想拆分文件数据:

只需在第一条消息中发送文件大小(前 8 个字节),然后在单独的消息中发送所有其余 block 。

将收到多条消息,直到收件人获得足够的数据,即达到文件大小。

关于go - 如何在go lang中接收多帧二进制数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41976053/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com