C语言 通过 Sun RPC 发送二进制文件



我正在尝试使用 Sun RPC 实现一个小型客户端-服务器程序。我希望它有一个功能是客户端能够将任何格式的文件上传到服务器。

现在我有这个规范:

struct add_in{
  string author<>;
  string title<>;
  opaque file<>;
};
struct node{
  struct node * next;
  int id;
  string author<>;
  string title<>;
  opaque paper<>;
}; 
struct info_out{
  string author<>;
  string title<>;
};
typedef int add_out;
typedef int remove_in;
typedef struct node* list_out;
typedef int info_in;
typedef int fetch_in;
typedef char* fetch_out;
program FUNCTIONS {
  version FUNCTIONS_VERS {
    /* Add function. Adds paper to server "database"*/
    add_out ADD_PROC(add_in) = 1;
    /*Remove function. Removes paper from server "database"*/
    void REMOVE_PROC(remove_in) = 2;
    /*List function. Displays the papers currently stored by the server*/
    list_out LIST_PROC() = 3;
    /*Info function. Displays the auther and title of a specific paper*/
    info_out INFO_PROC(info_in) = 4;
    /*Fetch function. Fetches content of paper from server*/
    fetch_out FETCH_PROC(fetch_in) = 5;
  } = 1;
} = 0x00000001;

这是我的客户:

#include "functions.h"
#include <stdio.h>
#include <stdlib.h>
char * read_file(char* path){
  FILE *file;
  char *buffer;
  long file_length;
  file = fopen(path, "rb");
  if(file == NULL){
    perror("Unable to open file");
    exit(1);
  }
  printf("file openedn");
  fseek(file,0,SEEK_END);
  file_length = ftell(file);
  fseek(file,0,SEEK_SET);
  buffer=(char *)malloc(file_length+1);
  if(buffer == NULL){
    perror("Error allocating memory");
    exit(1);
  }
  printf("Memory allocatedn");
  fread(buffer, file_length, 1, file);
  fclose(file);
  printf("File imported, fd closedn");
  return buffer;
}
int main(int argc, char** argv){
  CLIENT *cl;
  char *buf;
  add_in in;
  add_out *out;
  cl = clnt_create(argv[1], FUNCTIONS, FUNCTIONS_VERS, "tcp");
  in.author = argv[3];
  in.title = argv[4];
  in.file = read_file(argv[5]);

  out = add_proc_1(&in, cl);
  if(out == NULL){
    fprintf(stderr,"Error: %sn", clnt_sperror(cl,argv[1]));
  }else{
    printf("%dn",*out);
  }
  return 0;
}

问题在于"in.file = read_file(argv[5])"语句。我收到一个编译器错误,指出:

从中分配给类型"struct"时不兼容的类型 键入"字符 *"

所以我的问题是,他需要什么样的指针?

谢谢!

莱纳斯

opaque file被翻译成结构体:

struct {
    uint file_len;
    char* file_val;
}

相关内容

  • 没有找到相关文章

最新更新