XDR


Programowanie aplikacji klient-serwer

Zewnętrzna reprezentacja danych

XDR

Standard XDR

0x08 graphic
0x08 graphic

0x08 graphic

0x08 graphic

0x08 graphic
0x08 graphic

0x08 graphic

0x08 graphic

Reprezentacja danych w formacie XDR

0x08 graphic

0x08 graphic

Filtry konwersji XDR

Typ danych

Filtr

Typy podstawowe języka C

char

xdr_char(3N)

short int

xdr_short(3N)

unsigned short int

xdr_u_short(3N)

int

xdr_int(3N)

unsigned int

xdr_u_int(3N)

long

xdr_long(3N)

unsigned long

xdr_u_long(3N)

float

xdr_float(3N)

double

xdr_double(3N)

void

xdr_void(3N)

enum

xdr_enum(3N)

bool_t(C int)

xdr_bool(3N)

Typy złożone

tablica zmiennej długości

xdr_array(3N)

tablica bajtów o podanej długości

xdr_bytes(3N)

ciąg bajtów określonej długości przesyłanych bez konwersji

xdr_opaque(3N)

wskaźniki

xdr_pointer(3N)

napisy

xdr_string(3N)

tablice stałej długości

xdr_vector(3N)

Strumienie XDR

0x08 graphic

Typy strumieni

Strumień w pamięci

#include <rpc/xdr.h>

#define BUFSIZE 4000 /* rozmiar bufora */

XDR xdrs; /* identyfikator strumienia */

char buf[BUFSIZE]; /* obszar dla danych XDR */

/* incjalizacja strumienia w trybie ENCODE */

xdrmem_create(xdrs,buf,BUFSIZE, XDR_ENCODE);

int i;

i=260;

/* konwersja i dołączenie do strumienia */

xdr_int(&xdrs,&i);

...

/* wysłanie strumienia */

Strumień przyłączony do pliku

#include <rpc/xdr.h>

FILE *fp; /* wskaźnik pliku */

XDR xdrs; /* wskaźnik strumienia */

fp=fopen("xdrplik","w") /* otwarcie pliku */

/* incjalizacja strumienia w trybie ENCODE */

xdrstdio_create(&xdrs,fp, XDR_ENCODE);

int i;

i=260;

/* konwersja i przesłanie do pliku */

xdr_int(&xdrs,&i);

.....

Strumień podzielony na rekordy

#include <rpc/xdr.h>

FILE *fp; /* wskaźnik pliku */

XDR xdrs; /* wskaźnik strumienia */

/* procedura czytania */

int readp(FILE *fp, char *buf, unsigned int n);

/* procedura pisania */

int writep(FILE *fp, char *buf, unsigned int n);

fp=fopen("xdrplik","w") /* otwarcie pliku */

/* incjalizacja strumienia w trybie ENCODE */

xdrreco_create(&xdrs,0,0,fp,readp,writep);

xdrs.x_op=XDR_ENCODE;

int i,j;

i=260;

j=350;

/* konwersja i przesłanie do bufora */

xdr_int(&xdrs,&i);

xdr_int(&xdrs,&j);

/* koniec rekordu - opróżnij bufor */

xdrrec_endofrecord(&xdrs,TRUE);

32 bity

bajt 3

bajt 2

bajt 1

bajt 0

Proces nadawca

Strumień XDR

Strumień XDR

Proces odbiorca

0

0

0

3

0

1

2

3

J

O

L

A

Komputer A:

liczba 3

napis JOLA

Komputer B:

liczba 50 331 648

napis JOLA

A

L

O

J

3

2

1

0

0

0

0

3

przesłanie

do komputera B

J

O

L

A

3

2

1

0

3

0

0

0

Komputer B:

liczba 3

napis ALOJ

32 bity

bajt 3

bajt 2

bajt 1

bajt 0

S

E

M

konwersja

konwersja



Wyszukiwarka

Podobne podstrony:
SRC-xdr

więcej podobnych podstron