999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

一種支持多客戶端的TCP服務器模型

2019-09-09 13:33:49羅顯庭黎艷群
數碼世界 2019年6期
關鍵詞:方法

羅顯庭 黎艷群

摘要:TCP服務器程序在現今網絡發達的儀器儀表中應用廣泛。本文以降低設計人員開發難度為目的,從模塊化的設計思想出發,提出一種支持多客戶端的TCP服務器模型。

關鍵詞:TCP服務器單線程多客戶端類 回調函數

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

TCP服務器模型首先抽象為類的方式,具體數據的實時處理則交由回調函數去完成,將數據收發和協議解析部分分離,減輕開發人員的編碼工作、增強程序的穩定性。

抽象出的類主要有以下幾個方法:服務器打開、關閉、線程啟動、數據發送和接收等,具體實現接口如下

服務器打開方法Open:

該方法主要用于定義監聽服務器的IP地址和端口號,同時設置為非阻塞模式以及限制最大連接數量。調用成功返回服務器的套接字句柄,否則返回無效句柄。具體實現流程如下:

服務器關閉方法Close

主要用來關閉已連接或未釋放的客戶端套接字,同時在應用程序退出前關閉服務器自身用于監聽的套接字。

客戶端數據發送的方法SendData

此方法由兩個函數組成,一個函數用于在已經連接上的客戶端隊列中搜索,當前是和哪個客戶端套接字進行數據通信。另一個函數直接向對應的套接字發送數據(注意在搜索套接字、發送數據失敗時需做重發或關閉等異常處理)。

服務器線程啟動方法StartThread

該方法主要用來定義兩個回調函數,一個用于通知客戶端已連接的事件,另一個用于通知客戶端已接收到數據的事件。同時創建一個線程,用于服務器接受連接、客戶端的數據接收和關閉等操作。

服務器接收連接或客戶端數據接收的方法ThreadFun

該方法主要實現不斷地監測服務器監聽端口是否有新的接收連接,已連接的客戶端是否有數據發送過來,以及是否有客戶端申請關閉斷開等操作。

在一個線程中實現多個客戶端連接和服務器監聽功能,主要使用到了select系統調用。Select系統調用允許程序同時在多個底層文件描述符上等待輸入的到達。這意味著服務器可以同時在多個打開的套接字上處理多個客戶端的請求動作。具體處理流程如下:

服務器讓select同時指向檢查監聽套接字和客戶的連接套接字的Fd_set集合,通過用select調用同時處理多個客戶就不需再依賴多進程或多線程了。一旦select有活動發生,就可以用FD_ISSET來遍歷所有可能的文件描述符,以檢查是哪個套接字有活動發生。

如果是監聽套接字可讀,這說明當前有一個客戶試圖建立連接,此時就可以調用accept而不用擔心發生阻塞的可能,同時利用客戶端連接回調函數通知應用層有新的客戶連接。

如果是某個客戶描述符準備好,說明該描述符上有一個客戶請求需要我們讀取和處理。如果讀操作返回零字節,表示有客戶已結束,就從客戶端隊列中搜索關閉對應的套接字,并把它從文件符集合中刪除。如果返回的數據大于零,就直接讀取數據,同時通過客戶端數據接收回調函數將接收到的數據通知上層進行數據解析和處理。

模型的實例化使用整個操作如下,定義一個服務器對象,打開對應的監聽端口號,定義兩個回調函數,啟動線程處理函數。

在上層的調用程序中只要定義兩個回調函數就可以,tcp_accept函數實現有新客戶連接需要處理的功能,custom_recv函數實現客戶端數據接收時需要進行的數據解析和處理功能即可。

在實際的工程應用中,此模型可以監聽多個設備獲取不同設備的運行狀態數據,功能強大。采用盡量少的線程數量和限制客戶端的連接數量,系統開銷小。同時采用非阻塞模式防止程序干擾其他設備的請求響應,響應快速。TCP服務實現和協議解析部分分離,代碼可移植性強,性能穩定。

參考文獻

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

猜你喜歡
方法
中醫特有的急救方法
中老年保健(2021年9期)2021-08-24 03:52:04
高中數學教學改革的方法
河北畫報(2021年2期)2021-05-25 02:07:46
化學反應多變幻 “虛擬”方法幫大忙
變快的方法
兒童繪本(2020年5期)2020-04-07 17:46:30
學習方法
用對方法才能瘦
Coco薇(2016年2期)2016-03-22 02:42:52
最有效的簡單方法
山東青年(2016年1期)2016-02-28 14:25:23
四大方法 教你不再“坐以待病”!
Coco薇(2015年1期)2015-08-13 02:47:34
賺錢方法
捕魚
主站蜘蛛池模板: 丁香六月综合网| 国产黄色片在线看| 香蕉视频在线精品| 青青青视频91在线 | 9丨情侣偷在线精品国产| 久久国产亚洲欧美日韩精品| 无码日韩人妻精品久久蜜桃| 91视频免费观看网站| 天天激情综合| 国产网站免费| 国产精品免费电影| 五月激激激综合网色播免费| 欧美精品成人| 美女扒开下面流白浆在线试听 | 免费99精品国产自在现线| 国产一级片网址| 亚洲成人精品在线| www.亚洲一区| 国产aⅴ无码专区亚洲av综合网 | 国产导航在线| 国产内射一区亚洲| 久久国产香蕉| 国产区91| 黄色网址手机国内免费在线观看| 9cao视频精品| 成人综合久久综合| 91麻豆国产精品91久久久| 国产欧美精品一区aⅴ影院| 91精品国产福利| 天天干天天色综合网| 91福利免费视频| 爱做久久久久久| 欧美亚洲网| 国产男女XX00免费观看| 日韩欧美视频第一区在线观看 | 国产男女免费视频| av在线人妻熟妇| 欧美一级色视频| 国产三级成人| 韩国v欧美v亚洲v日本v| 中文字幕久久波多野结衣| 国产精品亚洲а∨天堂免下载| 亚洲国语自产一区第二页| 中文字幕亚洲另类天堂| 国产精品成人一区二区| 午夜精品区| 中文无码日韩精品| 日韩毛片免费视频| 欧美一级黄片一区2区| 8090成人午夜精品| 亚洲第一页在线观看| 欧美中文一区| 久久无码av三级| 亚洲国产黄色| 九九热这里只有国产精品| 88av在线播放| 国产福利在线免费观看| 国产精品亚洲五月天高清| 国产视频a| 亚洲香蕉伊综合在人在线| 久久熟女AV| 亚洲综合精品第一页| 日韩av在线直播| 欧美一区中文字幕| 欧美日韩福利| 中文字幕资源站| 激情午夜婷婷| 日本免费福利视频| 精品剧情v国产在线观看| 欧美一级色视频| 老熟妇喷水一区二区三区| yjizz国产在线视频网| 国产97视频在线观看| 漂亮人妻被中出中文字幕久久 | 一区二区三区毛片无码| 99这里只有精品在线| 亚洲第一av网站| 国产精品亚洲日韩AⅤ在线观看| 天天做天天爱天天爽综合区| 国产黄视频网站| 天天爽免费视频| 色婷婷啪啪|