<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 一種嵌入式RPC的設計與實(shí)現

一種嵌入式RPC的設計與實(shí)現

作者: 時(shí)間:2011-06-10 來(lái)源:網(wǎng)絡(luò ) 收藏

1.4 Sun
Sun 有時(shí)也稱(chēng)為ONC(Open Network Computing)。Sun RPC提供了一個(gè)接口語(yǔ)言IDL和rpcgen用于C語(yǔ)言支持。這門(mén)語(yǔ)言可以定義constants,typedef,structure,union。rpcgen可以產(chǎn)生server code,client stub和頭文件。server code主要是建立socket,注冊端口和監聽(tīng),接受連接,拆參數,調用實(shí)際的過(guò)程,打包返回值。client stub則是打包參數,發(fā)送給server,將返回值解包。Sun RPC缺點(diǎn)就是對Windows沒(méi)有很好的支持。

2
與傳統的模型不同,服務(wù)器端分為:網(wǎng)絡(luò )通訊,接收狀態(tài)機和過(guò)程處理??蛻?hù)端分為網(wǎng)絡(luò )通訊,發(fā)送狀態(tài)機和過(guò)程調用。
圖3是服務(wù)器端的狀態(tài)機。服務(wù)器進(jìn)程從初始狀態(tài)進(jìn)入GetHeader狀態(tài)。GetHeader是讀取遠程過(guò)程調用的頭信息。如果一次得到了所有數據,也就是nCurLen>=dwTotalSize,則進(jìn)入GetComplatePacket狀態(tài),反之進(jìn)入GetData狀態(tài)。GetData是讀取參數數據,讀取數據直到得到所有的數據進(jìn)入GetComplatePacket狀態(tài)。期間如果超時(shí),則回到GetHeader狀態(tài)。超時(shí)的起始時(shí)間從GetHeader韻第一個(gè)字節算起,如果在定義的時(shí)間無(wú)法讀取dwTotalSize個(gè)字節,則Timeout從而回到GetHeader狀態(tài)。在GetHeader和GetData時(shí),如果讀取數據有錯誤(如客戶(hù)端斷開(kāi)連接,recv函數返回錯誤)則狀態(tài)機退出。GetComplatePacket是得到了完整的包。CheckCall判斷當前的調用是否是有效的過(guò)程調用。如果無(wú)效則進(jìn)入狀態(tài),并回復無(wú)效命令給客戶(hù)端,最后進(jìn)入GetHeader狀態(tài)。如果有效,則處理此調用,最后發(fā)送結果給客戶(hù)端。

本文引用地址:http://dyxdggzs.com/article/150615.htm

c.JPG d.JPG


圖4為客戶(hù)端狀態(tài)機。首先是打包參數,發(fā)送到服務(wù)器端,等待服務(wù)器端的回復,進(jìn)入GetHeader狀態(tài)。GetHeader,GetData和Get Com-plate Packet與服務(wù)器相應的狀態(tài)意義相同。如果timeout則返回timeout錯誤。如果得到了整個(gè)packet則拆分最后返回。
DCE—RPC和ONC—RPC允許選擇UDP或TCP協(xié)議。TCP協(xié)議傳輸控制協(xié)議,提供的是面向連接、可靠的字節流服務(wù)。UDP協(xié)議不提供可靠性,它只是把應用程序傳給IP層的數據報發(fā)送出去,但是并不能保證它們能到達目的地?;赥CP協(xié)議的可靠性,選擇TCP作為通訊協(xié)議。
3
3.1 數據結構
服務(wù)器和客戶(hù)用共用包頭信息和每個(gè)過(guò)程的參數結構。頭信息定義如下。dwCallID是過(guò)程的標識號。每個(gè)過(guò)程都有一個(gè)唯一的號碼。bCallType是調用的類(lèi)型。dwTotalSize是整包的字節數。dwReturn是返回結果。
e.JPG

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)


關(guān)鍵詞: 實(shí)現 設計 RPC 嵌入式

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>