ubuntu 14 で Sun XDR RPC を使用しています。圧縮のために RPC 経由で画像を送受信する必要があります。ここに私の.xファイルがあります
onst MAXPARAMNAME = 9024;
typedef string prog<MAXPARAMNAME>;
struct prognames
{
prog program1;
int index;
};
program RPC_PROG {
version RPC_VERS {
string RUN_PROGS(prognames) = 1; /* procedure numer=1 */
} = 1; /* version number = 1 */
} = 0x12345678; /* program number = 0x12345678 */
以下はクライアントファイルです
FILE *imageN=fopen("index.jpg", "r");
char b[9024];
int i=0;
while(!feof(imageN))
{
fread(b, 1,1024,imageN );
i+=1024;
fseek( imageN,i, SEEK_SET );
}
prognames args;
args.program1 =&b;
/*remote procedure run_progs */
resultStringFromServerExecutePrograms = run_progs_1(&args, cl);
画像が送信されているコードについてのみ言及しています。最後にサーバーコード:
char** run_progs_1_svc(prognames *argparams, struct svc_req *arg2)
{
FILE* fpipe;
char* program1AndProgram2;
char* prog1 = argparams->program1;
static char* readPipeInto1;
readPipeInto1 = (char*)malloc((READ_MAX_SIZE + 1)*sizeof(char));
static char* readPipeInto;
readPipeInto = (char*)malloc((READ_MAX_SIZE + 1)*sizeof(char));
memset(readPipeInto, 0, READ_MAX_SIZE + 1);
program1AndProgram2=(char*)malloc((strlen(prog1))*sizeof(char));
strcpy(program1AndProgram2, argparams->program1);
//execute commands
if ( !(fpipe= (FILE*)fopen("tst.jpg","w")) )
{
perror("Cant open pipe!");
exit(1);
}
fwrite(program1AndProgram2,0,8024,fpipe);
long length;
//calculating size of file
//fread((char *)readPipeInto1, length, 1, fpipe);
fclose(fpipe);
//compression code
コードを実行した後、サーバー側はファイルが空であると言います。クライアント側でしばらくすると以下のエラーが発生します。
localhost: RPC: Unable to receive; errno = Connection refused
私のコードの背後にある基本的なロジックは、クライアントがファイルから読み取り、それを構造体に格納してから、この構造体をサーバー (RPC) に送信するというものです。サーバーは構造内のデータをファイルに書き込み、そのファイルを開いて圧縮します。しかし、私の論理が正しいかどうかはわかりません。