通过RPC发送大型文件

通过RPC发送大型文件,c,rpc,large-files,C,Rpc,Large Files,我正在开发一个应用程序客户端服务器来使用RPC发送文件,但在发送大文件时遇到了一些问题。我想允许发件人(客户端)上传任何维度的文件。我最初的意图是在客户端创建一个包含文件(作为一个大字符串)、文件名和大小的结构,然后将其发送到服务器。这是.x文件: fileA.x const MAXLEN = 1024; const FILELEN = 1000000000; typedef string my_file<FILELEN>; typedef char filename[MAXLEN

我正在开发一个应用程序客户端服务器来使用RPC发送文件,但在发送大文件时遇到了一些问题。我想允许发件人(客户端)上传任何维度的文件。我最初的意图是在客户端创建一个包含文件(作为一个大字符串)、文件名和大小的结构,然后将其发送到服务器。这是.x文件:

fileA.x

const MAXLEN = 1024;
const FILELEN = 1000000000;
typedef string my_file<FILELEN>;

typedef char filename[MAXLEN];

struct file_to_send {
 filename name;
 my_file data;
 int size;
};

program FILE_PROG {
  version FILE_VER {
    int sendFile(my_file) = 1;
  } = 1;
} = 0x20000011;
const MAXLEN=1024;
const FILELEN=100000000;
typedef字符串我的_文件;
typedef字符文件名[MAXLEN];
要发送的结构文件{
文件名;
我的文件数据;
整数大小;
};
程序文件程序{
版本文件\u版本{
int sendFile(my_file)=1;
} = 1;
}=0x2000011;

问题是,发送这个结构(也施加了大小FILELEN的限制),我无法发送超过106KB的数据。如何发送文件的任何维度?如果用户向服务器发送16GB的数据,则问题可能是在结构上加载文件,以及在服务器端将字符串存储在文件上。对于第一个操作,我需要读取文件并将其存储在字符串中;对于第二个操作,我需要读取字符串并将其存储在文件中。我想可能是记忆力有问题。如何避免这种情况?

不要尝试将整个文件存储在内存中。逐块读取并发送。一个好的块大小应该是1-64KB。谢谢你的建议,但是我如何使用RPC来实现呢?我必须向远程过程传递一个结构。我认为RPC不是发送大量消息的合适工具。