c++ - 我应该通过套接字以一次读\写还是多个 block 的方式发送文件?

标签 c++ sockets ftp

我有一个关于如何在 C++ 中实现基本文件传输客户端\服务器的基本问题。

我不确定为什么在一次读\写中发送文件不是一个好方法,为什么好方法是在小缓冲区中发送文件?

最佳答案

I am not sure why it is not a good way to send file in one read\write and why the good way is sending it in chunks of small buffer?

如果您有一个大小为 2TB 的文件,您首先需要分配这个数量的 RAM 并将整个文件加载到这个单个缓冲区中。然后你需要写出所有这个缓冲区。由于内存不足,这对于 2TB 文件可能不会成功,但即使对于较小的文件,这也会浪费资源。由于从磁盘的读取和对网卡的写入都是在内部以 block 的形式完成的,因此即使整个文件适合 RAM,您也不会获得更好的性能。

一个可能的妥协可能是以 4k 到 32k 之间的 block 读/写,最佳大小取决于操作系统、磁盘缓冲区、套接字缓冲区、磁盘和网络速度等。

关于c++ - 我应该通过套接字以一次读\写还是多个 block 的方式发送文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30681071/

相关文章:

python - ftplib MLSD 命令给出 500 Unknown command

c - 如何将二进制文件转换为字节?

c++ - 套接字发送接收函数

c++ - 将检测到的文本设置为比图像暗 - ccv

c# - 由于其权限而无法访问套接字

python - PyFtpdLib 如何在仍在运行服务器时添加用户

c++ - QTreeView 边框/框架颜色

c++ - 在我的 C++ OpenFrameworks 项目中未定义对 wpa_ctrl 函数的引用。需要帮助集成这个 c 库

node.js - Feathersjs Node 套接字客户端未连接

c++ - Windows,C++ : two connections on one server socket?