Linux網路程式設計讀書筆記 8

2021-03-31 11:22:37 字數 3125 閱讀 3252

第十一章

資料結構的傳輸和

xdr標準

·11.1

資料結構的傳送

網路資料結構傳遞可能存在以下問題:網路字序問題、浮點數傳輸、指標處理

自定義手工處理方式:

將待傳送資料結構轉換以後放入應用的傳送緩衝區;

將應用的接收緩衝區中資料結構轉換以後再進行資料處理。

**示例:

void send_int32_2buf(char *buf, unit32_t n)

void send_string_2buf(char *buf, char*str);

void send2_buf(char *buf, struct u_data *ptr)

void recv_int32_from(char *buf, unit32_t *n)

void recv_from_buf(char *buf, struct u_data *ptr)

·xdr

標準和實現原理

xdr資料結構傳輸標準是

sun公司設計的,已經成為大多數客戶機

/伺服器應用中的事實上的標準。

xdr對各種資料型別規定了編碼方式。初始化函式是

#include

extern void xdrmem_create((xdr *xdrs, constcaddr_t addr, u_int size, enum xdr_op xop)); //xdrs

是建立後

xdr流指標

,addr

是存放xdr

流傳送緩衝區

xdr的流轉換方式和上面自定義方式類似,但是對各種資料型別的處理做了統一規定。應用程式設計配對的接收和傳送,分別處理每個資料項。

xdr有記憶體流和

i/o流兩種。可以使用記憶體流,進行套接字緩衝區間的資料結構傳輸;使用

i/o流將編譯碼的結果輸出到檔案流中。

xdr和

tcp都是流的抽象,所以兩者可以很好結合。另外

xdr提供了面向記錄的

xdr抽象,應用在

udp傳輸。

xdr轉化函式所做操作決定於

xdr流本身性質。如果

xdr是編碼流時,轉化函式就做資料編碼,如果是解碼流時,轉換函式就做資料解碼。

第十二章

rpc遠端過程呼叫原理和實現

·rpc

的原理使用

xdr協議可以讓資料結構無差別的在網路傳輸,使用

rpc(remote procedure call)

遠端過程呼叫可以使函式在不同主機上執行。

rpc所要達到目的是將網路通訊功能和應用的需求分開。

rpc的中心是優先考慮應用的分析,在模組功能劃分完畢後將其分離出來。這些模組在不同主機上執行,

rpc保證模組分離前後的語義不變。

函式呼叫的

4個原則:

1 把函式所需引數準備好,通過某種方式可以讓呼叫函式訪問到。

2 必須包含函式的返回資訊

3 能夠確定呼叫函式的位置

4 為呼叫函式建立可以執行的環境

其中「本地呼叫」這是上述四個原則的一種實現,

1 通過堆疊段

2 函式返回位址

3 pc

指標指向函式入口位址

4 區域性變數在函式棧分配,其他資料共享程序資料段

rpc遠端呼叫模擬本地呼叫:

我們可以使用定義好的資訊格式儲存呼叫過程引數,在資訊格式中說明如何去找被呼叫者(通常是某種標誌)。然後通過網路將資訊報文傳送到被呼叫所在機器上,然後呼叫者等待被呼叫方發回的呼叫結果。

【條件1和3

】被呼叫主機上應有乙個分派器控制所有遠端呼叫過程。收到報文後通過其中的標誌知道需要呼叫哪個,取出被呼叫者需要的引數然後傳入。【條件2】

被呼叫過程在它所在環境中執行,並將執行結果寫在資訊格式中,最後網路將呼叫結果返回。【條件4】

·rpc

的實現遠端過程標示:(程式號,遠端呼叫過程版本號,遠端過程序號)

埠的動態對映:每乙個遠端呼叫過程都對應占用乙個有作業系統動態分配的傳輸層埠。呼叫方需要呼叫乙個遠端呼叫過程,它會向埠對映器傳送乙個請求,然後埠對映器通過查表返回相應遠端呼叫過程的埠號。然後它向遠端呼叫過程發起呼叫請求。

rpc的報文:

rpc使用

xdr語言定義應用的報文。

rpc開發工具:由於

onc rpc

協議規程非常複雜,因此系統提供了專門用於開發

rpc的工具。注意包括:

xdr庫函式,

rpc執行時間庫函式,一些程式的自動生成工具,產生乙個構件

rpc分布式程式需要的

c程式檔案,這些程式主要是遮蔽底層通訊對應用的影響。

客戶端主要實現:

向埠對映器傳送請求,並從埠對映器接收回應;形成

call

報文,向真正的遠端呼叫過程傳送呼叫請求,接收來自伺服器的呼叫結果。

伺服器段主要實現:

在提供服務之前向埠對映器註冊自己實際埠;將乙個呼叫分派到具體呼叫程式中的乙個呼叫過程。

·rpc

的實現遠端過程標示:(程式號,遠端呼叫過程版本號,遠端過程序號)

埠的動態對映:每乙個遠端呼叫過程都對應占用乙個有作業系統動態分配的傳輸層埠。呼叫方需要呼叫乙個遠端呼叫過程,它會向埠對映器傳送乙個請求,然後埠對映器通過查表返回相應遠端呼叫過程的埠號。然後它向遠端呼叫過程發起呼叫請求。

rpc的報文:

rpc使用

xdr語言定義應用的報文。

rpc開發工具:由於

onc rpc

協議規程非常複雜,因此系統提供了專門用於開發

rpc的工具。注意包括:

xdr庫函式,

rpc執行時間庫函式,一些程式的自動生成工具,產生乙個構件

rpc分布式程式需要的

c程式檔案,這些程式主要是遮蔽底層通訊對應用的影響。

客戶端主要實現:

向埠對映器傳送請求,並從埠對映器接收回應;形成

call

報文,向真正的遠端呼叫過程傳送呼叫請求,接收來自伺服器的呼叫結果。

伺服器段主要實現:

在提供服務之前向埠對映器註冊自己實際埠;將乙個呼叫分派到具體呼叫程式中的乙個呼叫過程。

《Linux網路程式設計》讀書筆記

去年買了 linux網路程式設計 這本,沒想到一放就是半年的時間了,慚愧啊!當年的雄心壯志都去哪了 好,廢話不多說,從今天開始,每天積累一點,厚積才能薄發,磨刀不誤砍柴工。工資趕快漲 漲 1991年,linux開始誕生了,到2011年,linux的版本從2.6直接蹦到了3.0,據說這個沒什麼大意義,...

《Linux高階程式設計》讀書筆記8

第十二章 自由桌面專案 典型的桌面都會有多個應用程式在執行,而且,它們經常需要彼此進行通訊。dcop是乙個用於kde的 解決方案,但是它依賴於qt,所以不能用於其他桌面環境之中。類似的,bonobo是乙個用於gnome的解決方案,但是非常笨重,因為它是基於corba的。它還依賴於gobject,所以...

Linux網路程式設計讀書筆記 4

第四章 基本套接字程式設計 4.1 基本套接字函式族 標頭檔案 主要函式 int socket int domain,int type,int protocol 建立socket 描述符 domain af unix,af i af iso type sock stream,sock dgram,s...