如何通过RPC发送和接收图像

时间:2018-03-09 17:27:54

标签: c rpc xdr

我在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)。服务器将结构中的数据写入文件,然后打开该文件并进行压缩。 但我不确定我的逻辑是否正确。

0 个答案:

没有答案