gpt4 book ai didi

c - 通过 Sun RPC 发送二进制文件

转载 作者:太空宇宙 更新时间:2023-11-04 03:00:17 25 4
gpt4 key购买 nike

我正在尝试使用 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 opened\n");

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 allocated\n");

fread(buffer, file_length, 1, file);
fclose(file);

printf("File imported, fd closed\n");
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: %s\n", clnt_sperror(cl,argv[1]));
}else{
printf("%d\n",*out);
}

return 0;
}

问题出在“in.file = read_file(argv[5])”语句中。我收到编译器错误说明:

incompatible types when assigning to type ‘struct ’ from type ‘char *’

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

谢谢!

林纳斯

最佳答案

不透明文件被翻译成一个结构:

struct {
uint file_len;
char* file_val;
}

关于c - 通过 Sun RPC 发送二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12861857/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com