新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 一種嵌入式RPC的設計與實現

        一種嵌入式RPC的設計與實現

        作者: 時間:2011-06-10 來源:網絡 收藏

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

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

        本文引用地址:http://www.104case.com/article/150615.htm

        c.JPG d.JPG


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

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


        關鍵詞: 實現 設計 RPC 嵌入式

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 毕节市| 饶平县| 新源县| 泽普县| 仙居县| 张家港市| 防城港市| 清涧县| 墨脱县| 登封市| 伊春市| 三都| 都匀市| 赣州市| 正蓝旗| 涪陵区| 怀安县| 湖口县| 甘孜县| 东光县| 吴川市| 三河市| 灌南县| 达州市| 久治县| 武强县| 海盐县| 恩施市| 莱阳市| 南澳县| 宁乡县| 徐闻县| 龙泉市| 四会市| 永定县| 庆元县| 屏东县| 永善县| 嵩明县| 三明市| 鄂托克前旗|