我正在使用 tcp 协议在 c# 中开发一个简单的文件和文件夹传输程序。
我用来传输文件的方法是将它分成小块。这些片段中的每一个都将用 Base64 编码并插入到更复杂的 JSON 消息中,然后将其发送到另一端。因此,由于 Base64,每条消息都将始终采用文本形式。
我对网络没有太多经验,我决定做出这个选择,因为在互联网上阅读,发送没有任何编码的字节流可能会冒着消息的某些部分可能被路由器或防火墙解释为命令的风险中断连接。
我的问题是我的软件也适用于非常大的文件(> 10GB)并且 base64 编码只会增加数据大小并使传输速度非常慢,因为 cpu 工作如此之多以连续编码/解码。
现在我想知道:
例如,发送一个仅以字节转换的简单文件,而没有先以任何格式进行编码,这是否真的存在对路由器或防火墙造成问题的风险?
一点也不。这样做是完全正常的,例如所有 HTTPS 通信都是二进制的 - 它可以工作。
使用 Base64 进行大文件传输是否正确?
虽然可以做到这一点,但如果底层支持二进制数据,那么这是一种无用的开销。
有更好的选择吗?
直接使用二进制。不要编码或解码任何东西。不要将它包装到像 JSON 这样的层中,这些层实际上并不需要传输。