2

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) に送信するというものです。サーバーは構造内のデータをファイルに書き込み、そのファイルを開いて圧縮します。しかし、私の論理が正しいかどうかはわかりません。

4

0 に答える 0