我想通过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,则丢弃并重新开始。
哈士奇WWW
TA贡献1799条经验 获得超6个赞
如果您从发件人一侧关闭连接,则一切正常。
我现在做了同样的事情-通过TCP传输文件。如果添加,一切正常
defer conn.Close()
打开连接后。
例如:
conn, err := net.Dial("tcp", client)
defer conn.Close()
- 3 回答
- 0 关注
- 269 浏览
添加回答
举报
0/150
提交
取消