发文件与聊天室
# 发文件与聊天室
文件传输协议应先发送元数据,再按约定长度传输正文,并校验大小与摘要。接收端必须限制最大文件、清理文件名并防止路径穿越。
written, err := io.CopyN(destination, connection, declaredSize)
if err != nil {
return fmt.Errorf("receive file: %w", err)
}
if written != declaredSize {
return io.ErrUnexpectedEOF
}
1
2
3
4
5
6
7
2
3
4
5
6
7
聊天室可由一个中心 goroutine 管理加入、离开和广播事件,使成员表只有一个修改者。每个客户端使用有限缓冲;慢客户端超过容量后断开,避免一个连接阻塞全部用户。