新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于ARM-Linux嵌入式系統的多進程并發服務器設計

        基于ARM-Linux嵌入式系統的多進程并發服務器設計

        作者: 時間:2016-09-12 來源:網絡 收藏

        bind (listen_fd,(struct sockaddr*)client_addr,sizeof(client_addr))

        當調用socket0函數創建一個套接字時,默認情況下它是一個主動套接字。所以對于TCP服務器,在綁定操作后,必須要調用listen0函數,將這個未連接的套接字轉換。

        成被動套接字,使它處在監聽模式下,指示內核應接受發向該套接字的連接請求。在調用listen0函數后,服務器的狀態從close轉換到listen狀態。Listen第二個狀態字代表的是最大連接數,本系統設置的最大連接數為10。

        listen(listen_fd,10);

        接受客戶連接,客戶協議地址和長度省略接收,失敗accept_fd=-1,置errno。如果建立連接。并且fork0=0,那么程序就進入子進程進行執行。

        accept_fd=accept(listen_fd,NULL,NULL);

        清除一個文件描述符集,并將一個新文件描述符加入文件描述符集中,其作用就是更新文件描述符。

        FD_ZERO(fds);

        FD_SET(aecept_fd,fds);

        函數select0是給出每個描述符我們所關心的條件:是否讀描述符、是否想寫描述符、是否描述符的異常條件。tv指等待時間。FD_ISS ET()測試該集中的一個給定位是否有變化、更新。

        retval=select(accept_fd+1,fds,NULL,NULL,tv);

        FD_ISSET(accept_fd,fds)

        調用read0可以接收buffer數據緩沖區,1 024指接收數據緩沖區大小,n為接收字節數。

        n=read(aecept_fd,buffer,1 024);

        調用子程序modbus.c,執行相應操作,調用make_modbus_ack0生成回發數據,并通過send0回發給客戶端。

        send_count=make_modbus_ack(buffer,n);

        send(accept_fd,buffer,send_count,0)

        3 ARM-Linux多進程服務移植與實現

        3.1 程序編譯移植

        Makefile的作用就是讓編譯器知道要編譯一個文件需要依賴哪些文件,同時當那些依賴文件更新時,編譯器會自動發現最終生成的文件已經過時,而重新編譯相應模塊。Makefile定義了一系列規則來指定各文件,如依賴性、先后順序及是否需要更新等。

        ARM平臺上的Makefile

        CROSS=arm-linux-

        arm-modbus-server.main.c modbus.c

        $(CROSS)gcc-o arm-modbus-server main.c modbus.c

        clean:

        rm-vf*.o

        編譯譯基于ARM的modbus網絡程序如下圖,首先我們看到文件夾里沒有可執行文件arm-modbus-server,輸入:#make

        執行Makefile文件,進行編譯連接依賴文件:main.c、modbus.c、std_c.h。

        然后生成我們所需要的文件arm-modbus-server。

        3.2 并發服務器測試

        本測試是基于ARM9的linux2.9內核平臺。首先使用chmod修改arm-modbus-server執行權限,然后運行./arm-modbus-server即服務器程序已經啟動。

        啟用兩個客戶端通過IP訪問服務器,可見如圖5所示,已顯示并發服務器運行正常。

        基于ARM-Linux嵌入式系統的多進程并發服務器設計

        4 結論

        本文詳細介紹了并發服務器的原理結構,分析了基于linux下的并發服務器程序代碼,并且移植到ARM平臺上運行,實現了小型嵌入式服務器的制作。這種低成本、低噪聲、低功耗、高穩定性、高安全性的嵌入式服務器,將在我們信息化發展中的智能樓宇、智能家電、智能移動設備中獲得應用。


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 娄底市| 深圳市| 四川省| 县级市| 呼图壁县| 牙克石市| 武鸣县| 深圳市| 四川省| 夹江县| 白玉县| 韶关市| 随州市| 永城市| 寿宁县| 西华县| 安乡县| 景德镇市| 建宁县| 突泉县| 绵阳市| 嘉善县| 股票| 道孚县| 怀远县| 军事| 长葛市| 大港区| 章丘市| 忻州市| 蓬安县| 彰化市| 曲阜市| 四川省| 迭部县| 定州市| 梨树县| 井冈山市| 遂川县| 潮州市| 宜川县|