dil*_*ish 3 networking tcp file go
我想通过golang中的TCP发送文件。这是我的服务器代码:
c is connected *net.TCPConn
file, _ := os.Open(fn)
defer file.Close()
io.Copy(c, file)
// c.CloseWrite()
Run Code Online (Sandbox Code Playgroud)
和客户:
as above, c is connected *net.TCPConn
file, _ := os.Create("file.txt")
defer file.Close()
io.Copy(file, c)
Run Code Online (Sandbox Code Playgroud)
我的问题是:这样,客户端无法收到文件的EOF
因此,io.Copy被阻止。我必须打电话c.CloseWrite通知客户文件已结束。
如果要发送文件,将无法正常工作,如何解决?
如果使用TCP连接,则os.EOF错误表示该连接已被另一端关闭。
我认为可靠地发送文件的唯一方法是实现多状态协议。
例如。在传输的第一个状态下,告诉客户端要读取多少字节并进入状态2。在状态2中,如果读取了所有字节,那么我们知道它读取了整个文件。如果在读取所有字节之前检测到os.EOF,则丢弃并重新开始。