監(jiān)控程序中利用可靠與非可靠網(wǎng)絡(luò)的主從通信方法及系統(tǒng)的制作方法
【專利摘要】本發(fā)明公開了監(jiān)控程序中利用可靠與非可靠網(wǎng)絡(luò)的主從通信方法及系統(tǒng)。該方法包括:為監(jiān)控程序構(gòu)建通信線程,設(shè)置所述通信線程的套接字以及與該套接字相對應(yīng)的報(bào)文類型,其中,所述報(bào)文類型包括基于TCP可靠網(wǎng)絡(luò)協(xié)議的報(bào)文類型以及基于UDP非可靠網(wǎng)絡(luò)協(xié)議的報(bào)文類型;將目標(biāo)板的IP地址與各個(gè)套接字的端口進(jìn)行綁定;輪詢各個(gè)套接字的操作狀態(tài),在檢測到套接字的端口就緒時(shí),從該套接字的端口讀取數(shù)據(jù),獲取應(yīng)用層數(shù)據(jù)包;處理該應(yīng)用層數(shù)據(jù)包,并將處理的結(jié)果寫入該套接字的描述符內(nèi)進(jìn)行信息交互。采用本發(fā)明,可以保證通信可靠性的同時(shí),提供監(jiān)控系統(tǒng)除傳統(tǒng)串口方式以外利用網(wǎng)口通信的方式來增加網(wǎng)絡(luò)通信的效率。
【專利說明】監(jiān)控程序中利用可靠與非可靠網(wǎng)絡(luò)的主從通信方法及系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及網(wǎng)絡(luò)通信技術(shù),特別是涉及監(jiān)控程序中利用可靠與非可靠網(wǎng)絡(luò)的主從通信方法及系統(tǒng)。
【背景技術(shù)】
[0002]目前,DF1D (Digital Pre-Distortion,數(shù)字預(yù)失真)功放在工程上運(yùn)行,必須要保持功放能夠與主機(jī)通信正常,這樣才能對功放起到控制,進(jìn)而起到通過OMC (Operations &Maintenance Center,操作維護(hù)中心)監(jiān)控遠(yuǎn)程從機(jī)的目的。如果采用傳統(tǒng)的RS485串口通信方式,一方面受限于速度,如果要下載監(jiān)控程序?qū)⑹琴M(fèi)時(shí)又費(fèi)力的工作,另一方面,隨著監(jiān)控內(nèi)容增多,監(jiān)控目標(biāo)碼逐漸增大,為保證通信質(zhì)量,可靠性要求也越來越高,利用串口的傳統(tǒng)技術(shù)必須得到提高和改進(jìn)。
[0003]目前隨著互聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,基于網(wǎng)口的TCP/IP通信技術(shù)越來越成熟。為了改善通信過程中串口對速度瓶頸的制約,有效提高通信任務(wù)的吞吐量和健壯性,有必要在監(jiān)控系統(tǒng)中引入TCP/IP技術(shù)。
[0004]但是一般基于網(wǎng)口的網(wǎng)絡(luò)通信處理都比較大的數(shù)據(jù)流量,采用一般的server/client結(jié)構(gòu)會給系統(tǒng)監(jiān)控任務(wù)帶來不必要的負(fù)擔(dān),阻礙了通信效率的提高。
【發(fā)明內(nèi)容】
[0005]基于此,有必要針對上述問題,提供一種監(jiān)控程序中利用可靠與非可靠網(wǎng)絡(luò)的主從通信方法及系統(tǒng),能夠保證通信可靠性的同時(shí)提高通信的效率。
[0006]一種監(jiān)控程序中利用可靠與非可靠網(wǎng)絡(luò)的主從通信方法,包括:
[0007]為監(jiān)控程序構(gòu)建通信線程,設(shè)置所述通信線程的套接字以及與該套接字相對應(yīng)的報(bào)文類型,其中,所述報(bào)文類型包括基于TCP可靠網(wǎng)絡(luò)協(xié)議的報(bào)文類型以及基于UDP非可靠網(wǎng)絡(luò)協(xié)議的報(bào)文類型;
[0008]將目標(biāo)板的IP地址與各個(gè)套接字的端口進(jìn)行綁定;
[0009]輪詢各個(gè)套接字的操作狀態(tài),在檢測到套接字的端口就緒時(shí),從該套接字的端口讀取數(shù)據(jù),獲取應(yīng)用層數(shù)據(jù)包;
[0010]處理該應(yīng)用層數(shù)據(jù)包,并將處理的結(jié)果寫入該套接字的描述符內(nèi)進(jìn)行信息交互。
[0011]相應(yīng)地,一種監(jiān)控程序中利用可靠與非可靠網(wǎng)絡(luò)的主從通信系統(tǒng),包括:
[0012]線程構(gòu)建模塊,用于為監(jiān)控程序構(gòu)建通信線程,設(shè)置所述通信線程的套接字以及與該套接字相對應(yīng)的報(bào)文類型,其中,所述報(bào)文類型包括基于TCP可靠網(wǎng)絡(luò)協(xié)議的報(bào)文類型以及基于UDP非可靠網(wǎng)絡(luò)協(xié)議的報(bào)文類型;
[0013]與所述線程構(gòu)建模塊相連的端口綁定模塊,用于將目標(biāo)板的IP地址與各個(gè)套接字的端口進(jìn)行綁定;
[0014]與所述端口綁定模塊相連的端口輪詢模塊,用于輪詢各個(gè)套接字的操作狀態(tài);
[0015]與所述端口輪詢模塊相連的端口讀取模塊,用于在檢測到套接字的端口就緒時(shí),巨可靠網(wǎng)絡(luò)的主從通信方法的流程圖;非可靠網(wǎng)絡(luò)的主從通信方法的實(shí)施例示意
非可靠網(wǎng)絡(luò)的主從通信方法的實(shí)施例流程
巨可靠網(wǎng)絡(luò)的主從通信系統(tǒng)的示意圖;非可靠網(wǎng)絡(luò)的主從通信系統(tǒng)的實(shí)施例示意
[加清楚,下面將結(jié)合附圖對本發(fā)明作進(jìn)一非可靠網(wǎng)絡(luò)的主從通信方法的流程圖,包建立在可靠的TCP/IP技術(shù)的基礎(chǔ)上進(jìn)行的,無論是面向連接的TCP協(xié)議還是用戶數(shù)據(jù)報(bào)UDP協(xié)議,都能夠降低數(shù)據(jù)在傳輸過程中出錯(cuò)的概率。相比于傳統(tǒng)技術(shù)中沒有校驗(yàn)功能的串口通信方式,本發(fā)明能夠提高通信任務(wù)的可靠性。
[0031]除了上述利用軟件協(xié)議提高通信可靠性之外,從結(jié)合硬件效率來說,在操作系統(tǒng)啟動后,目標(biāo)數(shù)字板將網(wǎng)卡的IP地址設(shè)置為預(yù)先存儲在配置文件的IP地址,該IP地址是人為設(shè)置以便于目標(biāo)板與圖形用戶界面(GUI)和或遠(yuǎn)程主機(jī)通信。當(dāng)監(jiān)控程序創(chuàng)建通信服務(wù)線程后,將通信服務(wù)線程的套接口和該IP地址通過調(diào)用bind系統(tǒng)函數(shù)綁定在一起,經(jīng)過TCP/IP協(xié)議對數(shù)據(jù)的分類,通信線程只需要處理到達(dá)綁定套接字的數(shù)據(jù),例如本監(jiān)控程序的通信服務(wù)線程只接受綁定TCP套接字端口的數(shù)據(jù)和UDP套接字端口的數(shù)據(jù)。在該監(jiān)控平臺下硬件是百兆網(wǎng)卡,傳輸速率理想情況下為lOMbyte/s,數(shù)據(jù)傳輸速度相比于串口通信效率提升了大約1000倍。
[0032]圖2為本發(fā)明監(jiān)控程序中利用可靠與非可靠網(wǎng)絡(luò)的主從通信方法的實(shí)施例示意圖。由圖2可知,它不再是傳統(tǒng)串口方式的一對一的連接,而是一對多的連接方式,即通信服務(wù)線程(server)與多個(gè)外部程序(⑶I/0MC/0MT)進(jìn)行連接。通過輪詢套接字的readset(也即讀集),在同一時(shí)刻檢測多個(gè)人機(jī)交互界面軟件或網(wǎng)管中心的模調(diào)工具的通信連接。
[0033]需要補(bǔ)充說明的是,雖然外部程序(GUI/0MC/0MT)有多個(gè),如圖2所舉例子有五個(gè)(⑶1_1至⑶1_5),但是,本通信任務(wù)只有一個(gè)線程,該通信服務(wù)線程采用端口復(fù)用的策略,不增加子線程,盡量降低通信任務(wù)給整個(gè)系統(tǒng)帶來的開銷。在檢測到套接字的端口就緒時(shí),從該套接字的端口讀取數(shù)據(jù),獲取應(yīng)用層數(shù)據(jù)包。處理該應(yīng)用層數(shù)據(jù)包,并將處理的結(jié)果寫入該套接字的描述符內(nèi)進(jìn)行信息交互。
[0034]圖3為本發(fā)明監(jiān)控程序中利用可靠與非可靠網(wǎng)絡(luò)的主從通信方法的實(shí)施例流程圖。與圖1相比,圖3的為本發(fā)明優(yōu)選的實(shí)施方式示意圖。
[0035]S201:針對內(nèi)核發(fā)出的SIGPIPE信號,為所述通信線程配置處理回調(diào)函數(shù)。避免本線程因所述SIGPIPE信號而關(guān)閉。
[0036]S202:為監(jiān)控程序構(gòu)建通信線程,設(shè)置所述通信線程的套接字以及與該套接字相對應(yīng)的報(bào)文類型。其中,所述報(bào)文類型包括基于TCP可靠網(wǎng)絡(luò)協(xié)議的報(bào)文類型以及基于UDP非可靠網(wǎng)絡(luò)協(xié)議的報(bào)文類型。
[0037]S203:將基于TCP協(xié)議的套接字的描述字屬性設(shè)置為S0_REUSEADDR。
[0038]S204:將基于TCP協(xié)議的套接字的輪詢模式,以及將基于UDP協(xié)議的套接字的輪詢模式均設(shè)置為非阻塞形式。
[0039]S205:將目標(biāo)板的IP地址與各個(gè)套接字的端口進(jìn)行綁定。
[0040]將套接字描述符寫入到readset中,采用select命令輪詢各個(gè)套接字。
[0041]S206:輪詢各個(gè)套接字的操作狀態(tài),在檢測到套接字的端口就緒時(shí),從該套接字的端口讀取數(shù)據(jù),獲取應(yīng)用層數(shù)據(jù)包。
[0042]S207:處理該應(yīng)用層數(shù)據(jù)包,并將處理的結(jié)果寫入該套接字的描述符內(nèi)進(jìn)行信息交互。
[0043]S208:設(shè)置該套接字的描述符集為讀操作。重新輪詢各個(gè)套接字的操作狀態(tài)。
[0044]以下結(jié)合ARM9硬件平臺,并加載Linux系統(tǒng)作為基礎(chǔ),對本發(fā)明實(shí)施例展開說明。Linux作為一款多任務(wù)操作系統(tǒng),監(jiān)控程序是運(yùn)行在該系統(tǒng)上的一個(gè)應(yīng)用程序,而通信服務(wù)線程則是所述監(jiān)控程序的一個(gè)線程。故本發(fā)明的實(shí)現(xiàn)方式不限于上述硬件平臺或軟件基礎(chǔ),僅以此為例。
[0045]實(shí)現(xiàn)方式上,在物理層基于網(wǎng)口的以太網(wǎng),通過以太網(wǎng)協(xié)議編寫以太網(wǎng)的網(wǎng)卡驅(qū)動程序,將通信數(shù)據(jù)交由Linux內(nèi)核,Linux內(nèi)核中的協(xié)議棧TCP/IP協(xié)議來保證數(shù)據(jù)在IP層和傳輸層的可靠性,數(shù)據(jù)經(jīng)過Linux內(nèi)核處理之后傳遞給應(yīng)用層的客戶程序,在此為監(jiān)控程序進(jìn)程的通信服務(wù)線程來處理。
[0046]本發(fā)明的又一優(yōu)勢在于,該通信服務(wù)線程既可以處理基于TCP協(xié)議的數(shù)據(jù)包,又可以處理基于UDP協(xié)議的數(shù)據(jù)包。這樣,一方面為了保證通信任務(wù)的可靠性,另一方面又不過多增加系統(tǒng)的開銷,因此這里無需通過類似forkO函數(shù)來創(chuàng)建真正處理數(shù)據(jù)的子線程,而是只有一條主線程——通信服務(wù)線程,既實(shí)現(xiàn)數(shù)據(jù)的接收又實(shí)現(xiàn)數(shù)據(jù)的處理。對于創(chuàng)建在監(jiān)控程序下的通信服務(wù)線程來說,收到的原始數(shù)據(jù)包通過TCP/IP協(xié)議解析得到的應(yīng)用層數(shù)據(jù)包,再依據(jù)相關(guān)協(xié)議(例如CSP3協(xié)議)對該應(yīng)用層數(shù)據(jù)包進(jìn)行解析。利用TCP/IP協(xié)議提供的端口復(fù)用技術(shù),能實(shí)現(xiàn)多個(gè)人機(jī)交互界面軟件或網(wǎng)管中心的模調(diào)工具通過網(wǎng)口連接監(jiān)控系統(tǒng)的通信線程,實(shí)現(xiàn)通過通信任務(wù)查詢或設(shè)置監(jiān)控量來控制監(jiān)控程序的功能。圖3的實(shí)施例步驟是上述實(shí)現(xiàn)方式的細(xì)化,其中,S201至S205為通信線程的初始化步驟。
[0047]當(dāng)通信線程沒收到可執(zhí)行“寫操作”的套接字的時(shí)候,Linux內(nèi)核會向該進(jìn)程發(fā)送一個(gè)SIGPIPE信號,如果不捕捉該信號而采用系統(tǒng)默認(rèn)的行為,那么進(jìn)程會自動終止,為了避免監(jiān)控進(jìn)程的通信線程終止,進(jìn)而影響監(jiān)控進(jìn)程對整個(gè)平臺的控制功能,有必要對SIGPIPE信號設(shè)置處理回調(diào)函數(shù)忽略該信號。
[0048]對于TCP套接字的描述字,將其屬性設(shè)置為S0_REUSEADDR,這個(gè)套接字選項(xiàng)通知內(nèi)核,如果端口忙,但TCP狀態(tài)位于TIME_WAIT,可以重用端口。如果端口忙,而TCP狀態(tài)位于其他狀態(tài),重用端口時(shí)依舊得到一個(gè)錯(cuò)誤信息,指明“地址已經(jīng)使用中”。如果你的服務(wù)程序停止后想立即重啟,而新套接字依舊使用同一端口,此時(shí)S0_REUSEADDR選項(xiàng)非常有用。利用IP地址復(fù)用的屬性為了達(dá)到在操作系統(tǒng)不重啟的情況下再次重啟監(jiān)控系統(tǒng)能實(shí)現(xiàn)基于網(wǎng)絡(luò)的通信能夠正常使用的目的。另外,對于面向連接的TCP協(xié)議,由于Linux內(nèi)核為任何一個(gè)給定的監(jiān)聽套接字維護(hù)兩個(gè)隊(duì)列,一個(gè)是未完成連接隊(duì)列,另一個(gè)是已完成的連接隊(duì)列。為了能夠降低網(wǎng)絡(luò)服務(wù)器在監(jiān)控系統(tǒng)中的開銷,則需要設(shè)置監(jiān)聽套接字的最大連接個(gè)數(shù),如果通信線程的連接數(shù)多于設(shè)置的最大連接個(gè)數(shù),則通信線程將放棄一些連接請求,該功能通過IistenO系統(tǒng)函數(shù)能夠?qū)崿F(xiàn)。
[0049]TCP套接字和UDP套接字均以非阻塞的形式得到準(zhǔn)備就緒。關(guān)于非阻塞的形式是相對于阻塞形式來講的,當(dāng)所請求的I/o操作非得把本線程投入到睡眠才能完成,則不要投入到睡眠,而是返回一個(gè)錯(cuò)誤,無需等待。當(dāng)系統(tǒng)調(diào)度執(zhí)行通信線程的時(shí)候,判斷是否有準(zhǔn)備就緒的套接字以便執(zhí)行數(shù)據(jù)獲取操作。采取這樣的方式,可以進(jìn)一步減小服務(wù)器的開銷,降低服務(wù)器的負(fù)荷。
[0050]通信線程初始化之后,利用I/O端口復(fù)用技術(shù),通過輪詢安設(shè)置好的TCP套接字/UDP套接字,實(shí)現(xiàn)同一個(gè)通信服務(wù)線程既可以實(shí)現(xiàn)面向連接的TCP可靠通信,也可以實(shí)現(xiàn)用戶數(shù)據(jù)報(bào)UDP通信,而通過select函數(shù),將本身應(yīng)該阻塞在I/O系統(tǒng)調(diào)用的操作,阻塞在了該系統(tǒng)調(diào)用上,不過本監(jiān)控通信線程的實(shí)現(xiàn)方式是:對于二者都是采用非阻塞的模式,等待下一次輪詢調(diào)用檢查是否有套接字準(zhǔn)備就緒。類型包括基于扣?可靠網(wǎng)絡(luò)協(xié)議的報(bào)文類
漠塊,用于將目標(biāo)板的I?地址與各個(gè)套接
I塊,用于輪詢各個(gè)套接字的操作狀態(tài);摸塊,用于在檢測到套接字的端口就緒時(shí),
摸塊,用于在處理該應(yīng)用層數(shù)據(jù)包后,將處I:。
行方式與方法中的相同。
可靠網(wǎng)絡(luò)的主從通信系統(tǒng)的實(shí)施例示意圖。
信號,為所述通信線程配置處理回
0
議的套接字的描述字屬性設(shè)置為
【權(quán)利要求】
1.一種監(jiān)控程序中利用可靠與非可靠網(wǎng)絡(luò)的主從通信方法,其特征在于,包括: 為監(jiān)控程序構(gòu)建通信線程,設(shè)置所述通信線程的套接字以及與該套接字相對應(yīng)的報(bào)文類型,其中,所述報(bào)文類型包括基于TCP可靠網(wǎng)絡(luò)協(xié)議的報(bào)文類型以及基于UDP非可靠網(wǎng)絡(luò)協(xié)議的報(bào)文類型; 將目標(biāo)板的IP地址與各個(gè)套接字的端口進(jìn)行綁定; 輪詢各個(gè)套接字的操作狀態(tài),在檢測到套接字的端口就緒時(shí),從該套接字的端口讀取數(shù)據(jù),獲取應(yīng)用層數(shù)據(jù)包; 處理該應(yīng)用層數(shù)據(jù)包,并將處理的結(jié)果寫入該套接字的描述符內(nèi)進(jìn)行信息交互。
2.根據(jù)權(quán)利要求1所述的監(jiān)控程序中利用可靠與非可靠網(wǎng)絡(luò)的主從通信方法,其特征在于,為監(jiān)控程序構(gòu)建通信線程的步驟之前,包括: 針對內(nèi)核發(fā)出的SIGPIPE信號,為所述通信線程配置處理回調(diào)函數(shù),避免本線程因所述SIGPIPE信號而關(guān)閉。
3.根據(jù)權(quán)利要求1或2所述的監(jiān)控程序中利用可靠與非可靠網(wǎng)絡(luò)的主從通信方法,其特征在于: 將基于TCP協(xié)議的套接字的描述字屬性設(shè)置為SO_REUSEADDR。
4.根據(jù)權(quán)利要求1 至3任一項(xiàng)所述的監(jiān)控程序中利用可靠與非可靠網(wǎng)絡(luò)的主從通信方法,其特征在于: 將基于TCP協(xié)議的套接字的輪詢模式,以及將基于UDP協(xié)議的套接字的輪詢模式均設(shè)置為非阻塞形式。
5.根據(jù)權(quán)利要求4所述的監(jiān)控程序中利用可靠與非可靠網(wǎng)絡(luò)的主從通信方法,其特征在于,將處理的結(jié)果寫入該套接字的描述符內(nèi)進(jìn)行信息交互的步驟之后,還包括: 設(shè)置該套接字的描述符集為讀操作,重新輪詢各個(gè)套接字的操作狀態(tài)。
6.一種監(jiān)控程序中利用可靠與非可靠網(wǎng)絡(luò)的主從通信系統(tǒng),其特征在于,包括: 線程構(gòu)建模塊,用于為監(jiān)控程序構(gòu)建通信線程,設(shè)置所述通信線程的套接字以及與該套接字相對應(yīng)的報(bào)文類型,其中,所述報(bào)文類型包括基于TCP可靠網(wǎng)絡(luò)協(xié)議的報(bào)文類型以及基于UDP非可靠網(wǎng)絡(luò)協(xié)議的報(bào)文類型; 與所述線程構(gòu)建模塊相連的端口綁定模塊,用于將目標(biāo)板的IP地址與各個(gè)套接字的端口進(jìn)行綁定; 與所述端口綁定模塊相連的端口輪詢模塊,用于輪詢各個(gè)套接字的操作狀態(tài); 與所述端口輪詢模塊相連的端口讀取模塊,用于在檢測到套接字的端口就緒時(shí),從該套接字的端口讀取數(shù)據(jù),獲取應(yīng)用層數(shù)據(jù)包; 與所述端口輪詢模塊相連的端口寫入模塊,用于在處理該應(yīng)用層數(shù)據(jù)包后,將處理的結(jié)果寫入該套接字的描述符內(nèi)進(jìn)行信息交互。
7.根據(jù)權(quán)利要求6所述的監(jiān)控程序中利用可靠與非可靠網(wǎng)絡(luò)的主從通信系統(tǒng),其特征在于,所述線程構(gòu)建模塊,包括: 信號屏蔽單元,用于針對內(nèi)核發(fā)出的SIGPIPE信號,為所述通信線程配置處理回調(diào)函數(shù),避免本線程因所述SIGPIPE信號而關(guān)閉。
8.根據(jù)權(quán)利要求6或7所述的監(jiān)控程序中利用可靠與非可靠網(wǎng)絡(luò)的主從通信系統(tǒng),其特征在于,所述線程構(gòu)建模塊,包括:屬性設(shè)置單元,用于將基于TCP協(xié)議的套接字的描述字屬性設(shè)置為SO_REUSEADDR。
9.根據(jù)權(quán)利要求6至8任一項(xiàng)所述的監(jiān)控程序中利用可靠與非可靠網(wǎng)絡(luò)的主從通信系統(tǒng),其特征在于,所述端口輪詢模塊,包括: 模式設(shè)置單元,用于將基于TCP協(xié)議的套接字的輪詢模式,以及將基于UDP協(xié)議的套接字的輪詢模式均設(shè)置為非阻塞形式。
10.根據(jù)權(quán)利要求9所述的監(jiān)控程序中利用可靠與非可靠網(wǎng)絡(luò)的主從通信系統(tǒng),其特征在于,還包括: 連接在所述端口寫入模塊與所述端口輪詢模塊之間的操作切換單元,用于設(shè)置該套接字的描述符集為讀操作,重新輪詢各個(gè)套接字的操作狀態(tài)。
【文檔編號】H04L29/08GK103841148SQ201210484612
【公開日】2014年6月4日 申請日期:2012年11月23日 優(yōu)先權(quán)日:2012年11月23日
【發(fā)明者】羅志祺 申請人:京信通信系統(tǒng)(中國)有限公司