为了账号安全,请及时绑定邮箱和手机立即绑定

如何在golang中通知TCP客户端文件的结尾?

如何在golang中通知TCP客户端文件的结尾?

Go
拉风的咖菲猫 2021-05-07 14:12:48
我想通过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通知客户文件已结束。如果我要发送文件,将无法正常工作,该如何解决?
查看完整描述

3 回答

?
慕斯709654

TA贡献1840条经验 获得超5个赞

如果使用的是TCP连接,则os.EOF错误表示该连接被另一端关闭。

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

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


查看完整回答
反对 回复 2021-05-17
?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

如果您从发件人一侧关闭连接,则一切正常。

我现在做了同样的事情-通过TCP传输文件。如果添加,一切正常


defer conn.Close()

打开连接后。

例如:


conn, err := net.Dial("tcp", client)

defer conn.Close()


查看完整回答
反对 回复 2021-05-17
  • 3 回答
  • 0 关注
  • 269 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信