gpt4 book ai didi

file - golang中如何通知TCP客户端文件结束?

转载 作者:IT王子 更新时间:2023-10-29 00:54:45 28 4
gpt4 key购买 nike

我想在 golang 中通过 TCP 发送文件。这是我的服务器代码:

    c is connected *net.TCPConn

file, _ := os.Open(fn)
defer file.Close()
io.Copy(c, file)
// c.CloseWrite()

和客户:

    as above, c is connected *net.TCPConn

file, _ := os.Create("file.txt")
defer file.Close()
io.Copy(file, c)

我的问题是:这样客户端收不到文件的EOF

所以,io.Copy 被阻止了。我必须调用 c.CloseWrite 来通知客户端文件已结束。

如果我想发送文件,这行不通,我该如何解决?

最佳答案

如果您使用的是 TCP 连接,那么 os.EOF 错误意味着连接被另一端关闭。

我认为可靠地发送文件的唯一方法是实现多状态协议(protocol)。

例如。在传输的第一个状态,告诉客户端要读取多少字节并转到状态 2。在状态 2 中,如果所有字节都已读取,那么我们知道它读取了整个文件。如果在读取所有字节之前检测到 os.EOF,则丢弃并重新开始。

关于file - golang中如何通知TCP客户端文件结束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13175102/

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