亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        一種支持多客戶端的TCP服務(wù)器模型

        2019-09-09 13:33:49羅顯庭黎艷群
        數(shù)碼世界 2019年6期
        關(guān)鍵詞:描述符監(jiān)聽線程

        羅顯庭 黎艷群

        摘要:TCP服務(wù)器程序在現(xiàn)今網(wǎng)絡(luò)發(fā)達(dá)的儀器儀表中應(yīng)用廣泛。本文以降低設(shè)計(jì)人員開發(fā)難度為目的,從模塊化的設(shè)計(jì)思想出發(fā),提出一種支持多客戶端的TCP服務(wù)器模型。

        關(guān)鍵詞:TCP服務(wù)器單線程多客戶端類 回調(diào)函數(shù)

        在嵌入式儀器儀表中,經(jīng)常會遇到需要通過TCP和第三方設(shè)備進(jìn)行通信。開發(fā)人員每天忙碌在重復(fù)繁瑣的編碼工作中,為儀表編寫不同的應(yīng)用層協(xié)議以適配現(xiàn)場的工作需要。雖然編寫TCP服務(wù)器程序有很多種形式,例如為每個(gè)客戶端fork出單獨(dú)的進(jìn)程或者為每個(gè)客戶端創(chuàng)建單獨(dú)的線程,這樣勢必增加系統(tǒng)的開銷,占用過多的資源。本文從通用性和可移植性等方便考慮,實(shí)現(xiàn)一種支持多客戶端的TCP服務(wù)器模型,減少后期代碼的重復(fù)編寫。

        TCP服務(wù)器模型首先抽象為類的方式,具體數(shù)據(jù)的實(shí)時(shí)處理則交由回調(diào)函數(shù)去完成,將數(shù)據(jù)收發(fā)和協(xié)議解析部分分離,減輕開發(fā)人員的編碼工作、增強(qiáng)程序的穩(wěn)定性。

        抽象出的類主要有以下幾個(gè)方法:服務(wù)器打開、關(guān)閉、線程啟動、數(shù)據(jù)發(fā)送和接收等,具體實(shí)現(xiàn)接口如下

        服務(wù)器打開方法Open:

        該方法主要用于定義監(jiān)聽服務(wù)器的IP地址和端口號,同時(shí)設(shè)置為非阻塞模式以及限制最大連接數(shù)量。調(diào)用成功返回服務(wù)器的套接字句柄,否則返回?zé)o效句柄。具體實(shí)現(xiàn)流程如下:

        服務(wù)器關(guān)閉方法Close

        主要用來關(guān)閉已連接或未釋放的客戶端套接字,同時(shí)在應(yīng)用程序退出前關(guān)閉服務(wù)器自身用于監(jiān)聽的套接字。

        客戶端數(shù)據(jù)發(fā)送的方法SendData

        此方法由兩個(gè)函數(shù)組成,一個(gè)函數(shù)用于在已經(jīng)連接上的客戶端隊(duì)列中搜索,當(dāng)前是和哪個(gè)客戶端套接字進(jìn)行數(shù)據(jù)通信。另一個(gè)函數(shù)直接向?qū)?yīng)的套接字發(fā)送數(shù)據(jù)(注意在搜索套接字、發(fā)送數(shù)據(jù)失敗時(shí)需做重發(fā)或關(guān)閉等異常處理)。

        服務(wù)器線程啟動方法StartThread

        該方法主要用來定義兩個(gè)回調(diào)函數(shù),一個(gè)用于通知客戶端已連接的事件,另一個(gè)用于通知客戶端已接收到數(shù)據(jù)的事件。同時(shí)創(chuàng)建一個(gè)線程,用于服務(wù)器接受連接、客戶端的數(shù)據(jù)接收和關(guān)閉等操作。

        服務(wù)器接收連接或客戶端數(shù)據(jù)接收的方法ThreadFun

        該方法主要實(shí)現(xiàn)不斷地監(jiān)測服務(wù)器監(jiān)聽端口是否有新的接收連接,已連接的客戶端是否有數(shù)據(jù)發(fā)送過來,以及是否有客戶端申請關(guān)閉斷開等操作。

        在一個(gè)線程中實(shí)現(xiàn)多個(gè)客戶端連接和服務(wù)器監(jiān)聽功能,主要使用到了select系統(tǒng)調(diào)用。Select系統(tǒng)調(diào)用允許程序同時(shí)在多個(gè)底層文件描述符上等待輸入的到達(dá)。這意味著服務(wù)器可以同時(shí)在多個(gè)打開的套接字上處理多個(gè)客戶端的請求動作。具體處理流程如下:

        服務(wù)器讓select同時(shí)指向檢查監(jiān)聽套接字和客戶的連接套接字的Fd_set集合,通過用select調(diào)用同時(shí)處理多個(gè)客戶就不需再依賴多進(jìn)程或多線程了。一旦select有活動發(fā)生,就可以用FD_ISSET來遍歷所有可能的文件描述符,以檢查是哪個(gè)套接字有活動發(fā)生。

        如果是監(jiān)聽套接字可讀,這說明當(dāng)前有一個(gè)客戶試圖建立連接,此時(shí)就可以調(diào)用accept而不用擔(dān)心發(fā)生阻塞的可能,同時(shí)利用客戶端連接回調(diào)函數(shù)通知應(yīng)用層有新的客戶連接。

        如果是某個(gè)客戶描述符準(zhǔn)備好,說明該描述符上有一個(gè)客戶請求需要我們讀取和處理。如果讀操作返回零字節(jié),表示有客戶已結(jié)束,就從客戶端隊(duì)列中搜索關(guān)閉對應(yīng)的套接字,并把它從文件符集合中刪除。如果返回的數(shù)據(jù)大于零,就直接讀取數(shù)據(jù),同時(shí)通過客戶端數(shù)據(jù)接收回調(diào)函數(shù)將接收到的數(shù)據(jù)通知上層進(jìn)行數(shù)據(jù)解析和處理。

        模型的實(shí)例化使用整個(gè)操作如下,定義一個(gè)服務(wù)器對象,打開對應(yīng)的監(jiān)聽端口號,定義兩個(gè)回調(diào)函數(shù),啟動線程處理函數(shù)。

        在上層的調(diào)用程序中只要定義兩個(gè)回調(diào)函數(shù)就可以,tcp_accept函數(shù)實(shí)現(xiàn)有新客戶連接需要處理的功能,custom_recv函數(shù)實(shí)現(xiàn)客戶端數(shù)據(jù)接收時(shí)需要進(jìn)行的數(shù)據(jù)解析和處理功能即可。

        在實(shí)際的工程應(yīng)用中,此模型可以監(jiān)聽多個(gè)設(shè)備獲取不同設(shè)備的運(yùn)行狀態(tài)數(shù)據(jù),功能強(qiáng)大。采用盡量少的線程數(shù)量和限制客戶端的連接數(shù)量,系統(tǒng)開銷小。同時(shí)采用非阻塞模式防止程序干擾其他設(shè)備的請求響應(yīng),響應(yīng)快速。TCP服務(wù)實(shí)現(xiàn)和協(xié)議解析部分分離,代碼可移植性強(qiáng),性能穩(wěn)定。

        參考文獻(xiàn)

        [1]陳健、宋健健譯.《Linux程序設(shè)計(jì)》(第3版)人民郵電出版社.

        猜你喜歡
        描述符監(jiān)聽線程
        基于結(jié)構(gòu)信息的異源遙感圖像局部特征描述符研究
        千元監(jiān)聽風(fēng)格Hi-Fi箱新選擇 Summer audio A-401
        Linux單線程并發(fā)服務(wù)器探索
        利用CNN的無人機(jī)遙感影像特征描述符學(xué)習(xí)
        網(wǎng)絡(luò)監(jiān)聽的防范措施
        電子制作(2017年20期)2017-04-26 06:58:02
        淺談linux多線程協(xié)作
        應(yīng)召反潛時(shí)無人機(jī)監(jiān)聽航路的規(guī)劃
        局域網(wǎng)監(jiān)聽軟件的設(shè)計(jì)
        河南科技(2014年5期)2014-02-27 14:08:21
        Linux線程實(shí)現(xiàn)技術(shù)研究
        基于PDIUSBD12的USB接口設(shè)計(jì)應(yīng)用研究
        亚洲图片自拍偷图区| 99综合精品久久| 国产激情电影综合在线看| 亚洲欧洲无码一区二区三区| 日韩精品欧美激情亚洲综合| 91青青草免费在线视频| 日韩中文字幕不卡在线| 亚洲三区在线观看内射后入| 成人欧美一区二区三区1314| 亚洲av之男人的天堂| 亚洲天堂免费av在线观看| 激情亚洲不卡一区二区| 亚洲av成人无码久久精品老人| 亚洲av无码一区二区三区不卡| 欧美午夜精品久久久久免费视| 亚洲伊人免费综合网站| av在线入口一区二区| 国产私人尤物无码不卡| 一本色道久久99一综合| 中文字幕无码免费久久99| 手机在线观看成年人视频| 国产av剧情一区二区三区| 亚洲国产天堂久久综合网| 国产精品你懂的在线播放| 欧美野外疯狂做受xxxx高潮| a国产一区二区免费入口| 噜噜噜色97| 美女被内射中出在线观看| 丁香五月亚洲综合在线| 精品国产人妻一区二区三区| 亚洲中文字幕巨乳人妻 | 久久综合老鸭窝色综合久久| 国产流白浆视频在线观看| 99精品国产在热久久无码 | 亚洲色欲久久久综合网东京热| 大肉大捧一进一出好爽视频mba| 中日韩欧美高清在线播放| 亚洲国产成人久久精品美女av| 香蕉视频在线观看亚洲| 国产精品久久国产三级国不卡顿 | 亚洲成AV人国产毛片|