XDR 介绍

XDR 编程 example

typedef struct student {
char* name;
 int age;
}STU;



int main(void) {
char *buf;
XDR x;
char* buf1;
char* buf2;
STU *s_snd = calloc(1, sizeof(struct student));
s_snd->name = calloc(20, sizeof(char));
strcpy(s_snd->name, "platform");
s_snd->age = 25;
 STU *s_rcv = calloc(1, sizeof(struct student));
s_rcv->name = calloc(20, sizeof(char));

/* start to encode */
buf = malloc(100) ;
xdrmem_create(&x,buf,100,XDR_ENCODE);
/* encode data */
if (!xdr_stu(&x, &s_snd)) {
    free(s_snd->name);
    free(s_snd);
    free(s_rcv->name);
    free(s_rcv);
    xdr_destroy(&x);
    return FALSE;
}

xdr_destroy(&x);
/* start to decode */
xdrmem_create(&x,buf,100,XDR_DECODE);
/* decode data */
if (!xdr_stu(&x, &s_rcv)) {
    free(s_snd->name);
    free(s_snd);
    free(s_rcv->name);
    free(s_rcv);
    xdr_destroy(&x);
    return FALSE;
}

xdr_destroy(&x);
printf("s_rcv>name: %s, s_rcv->age: %d/n",s_rcv->name, s_rcv->age);
return 0;
}

bool_t
xdr_stu(XDR *xdrs, struct student *stu) {

if(!xdr_string(xdrs, &(stu->name), 20)
        || !xdr_int(xdrs, &(stu->age))) {
    return FALSE;
}   
}