• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      C/C/S模式實時通信軟件設(shè)計與實現(xiàn)

      2010-09-05 01:35:58爽,云
      大連民族大學(xué)學(xué)報 2010年5期
      關(guān)鍵詞:接收數(shù)據(jù)發(fā)送數(shù)據(jù)鏈表

      劉 爽,云 健

      (大連民族學(xué)院計算機科學(xué)與工程學(xué)院,遼寧大連 116605)

      C/C/S模式實時通信軟件設(shè)計與實現(xiàn)

      劉 爽,云 健

      (大連民族學(xué)院計算機科學(xué)與工程學(xué)院,遼寧大連 116605)

      根據(jù)某引航站引航管理信息平臺的建設(shè)目標(biāo),設(shè)計了基于客戶端/客戶端 (中轉(zhuǎn)服務(wù)器)/服務(wù)器模式的實時通信軟件;介紹了該通信軟件的網(wǎng)絡(luò)拓撲結(jié)構(gòu),分析了服務(wù)器端和客戶端基于 TCP/IP協(xié)議的通信過程及接收發(fā)送數(shù)據(jù)工作流程;重點討論了如何利用嵌入式數(shù)據(jù)庫、變長鏈表及多線程技術(shù)實現(xiàn)數(shù)據(jù)通信的完整性、實時性和安全性,并給出了 LoadRunner對通信軟件的測試結(jié)果。實踐表明,該通信軟件運行可靠,傳輸穩(wěn)定。

      C/S模式;多線程;嵌入式數(shù)據(jù)庫;實時;通信

      1 系統(tǒng)概述

      為確保港口水域運輸安全、有序,根據(jù)某引航站引航調(diào)度管理的實際需求開發(fā)了引航管理信息平臺。該平臺利用現(xiàn)代化的管理手段加強港口的信息交換,實現(xiàn)對港口中移動目標(biāo)的實時監(jiān)控和動態(tài)跟蹤,加強了調(diào)度引航的統(tǒng)一管理,以此達到提高整體工作效率、降低成本、促進管理的目的,為企業(yè)提供信息化建設(shè)的全面解決方案。

      通信軟件是整個管理信息平臺的核心環(huán)節(jié),實現(xiàn)了導(dǎo)航系統(tǒng)與監(jiān)控系統(tǒng)、引航調(diào)度系統(tǒng)之間的通信,即向監(jiān)控系統(tǒng)發(fā)送船舶、車輛動態(tài)信息,從監(jiān)控系統(tǒng)接收它船的動態(tài)信息;向引航調(diào)度系統(tǒng)發(fā)送計劃請求信息、引航開始/結(jié)束時間、天氣預(yù)報請求信息、風(fēng)速儀請求信息,從引航調(diào)度系統(tǒng)接收引航計劃、天氣預(yù)報信息和風(fēng)速儀信息。管理信息平臺總體網(wǎng)絡(luò)拓撲結(jié)構(gòu)如圖 1。

      通信軟件分為服務(wù)器端、客戶端中轉(zhuǎn)服務(wù)器端、局域網(wǎng)客戶端 3部分。服務(wù)器端通過串口接收通信運營商轉(zhuǎn)發(fā)過來的船舶 A IS/GPS、車輛GPS定位數(shù)據(jù),解析存入Oracle數(shù)據(jù)庫,根據(jù)配置文件讀取有效轉(zhuǎn)發(fā)中心 IP地址和端口號列表,建立監(jiān)聽 Socket,接受客戶端連接請求,維護客戶端Socket鏈表。連接建立成功則把接收到的二進制數(shù)據(jù)流通過 TCP/IP協(xié)議發(fā)送到各客戶端中轉(zhuǎn)服務(wù)器處。中轉(zhuǎn)服務(wù)器接收到服務(wù)器發(fā)來數(shù)據(jù)后依據(jù)配置文件 UDPClient.txt,讀取各終端用戶的 IP地址和端口號,并根據(jù)用戶數(shù)目每 20個用戶創(chuàng)建一個套接字,然后通過UDP協(xié)議將二進制格式數(shù)據(jù)發(fā)送到局域網(wǎng)各客戶端,同時對接收到的數(shù)據(jù)解析以數(shù)據(jù)表格形式顯示。局域網(wǎng)客戶端只接收數(shù)據(jù),按通信協(xié)議解析,以數(shù)據(jù)表格形式顯示或是疊加到電子海圖上顯示即可。

      數(shù)據(jù)通信的效率決定了整個管理信息平臺的性能,因此采用了嵌入式數(shù)據(jù)、變長鏈?zhǔn)酱鎯岸嗑€程技術(shù)來實現(xiàn)通信軟件的實時、準(zhǔn)確、高效。

      圖1 通信軟件網(wǎng)絡(luò)拓撲結(jié)構(gòu)圖

      2 通信軟件總體設(shè)計

      引航管理信息平臺監(jiān)控系統(tǒng)使用 C++作為開發(fā)語言,Visual Studio 2005作為開發(fā)工具,引航調(diào)度系統(tǒng)使用 Java作為開發(fā)語言,MyEclipse6.5作為開發(fā)工具,為實現(xiàn)與兩系統(tǒng)的兼容并保證通信的實時高效,通信軟件采用 C++作為開發(fā)語言。整個通信軟件設(shè)計開發(fā)過程采用面向?qū)ο蠓椒?使用UML2.0作為描述工具。

      服務(wù)器端工作過程[1-2]如下:首先與通信運營商轉(zhuǎn)發(fā) GPS/A IS數(shù)據(jù)中心建立 TCP/IP連接,啟動接收數(shù)據(jù)線程,負責(zé)接收二進制數(shù)據(jù)文件;處理數(shù)據(jù)線程,負責(zé)解析二進制數(shù)據(jù),在界面上顯示并存入服務(wù)器的 Oracle數(shù)據(jù)庫;監(jiān)聽客戶端連接線程,負責(zé)建立用戶 Socket和監(jiān)聽 Socket的連接;發(fā)送數(shù)據(jù)線程負責(zé)向合法客戶端(中轉(zhuǎn)服務(wù)器)發(fā)送二進制數(shù)據(jù)。其中的 Socket采用阻塞類 CSocket作為基類,CSocket類在非阻塞 Socket基礎(chǔ)之上實現(xiàn)了阻塞操作,在阻塞期間實現(xiàn)了消息循環(huán)[3-4]。

      在服務(wù)器與客戶端(中轉(zhuǎn)服務(wù)器)通過 TCP/ IP協(xié)議建立連接過程中,服務(wù)器端維護一個合法客戶端請求鏈表,對長時間不接收數(shù)據(jù)的客戶端或是網(wǎng)絡(luò)連接出現(xiàn)故障的客戶端定期刪除更新,對合法客戶端接受請求發(fā)送數(shù)據(jù)。

      客戶端(中轉(zhuǎn)服務(wù)器)工作過程如下:當(dāng)客戶端應(yīng)用程序向服務(wù)器發(fā)出連接請求時,啟動連接線程,負責(zé)與服務(wù)器建立網(wǎng)絡(luò)連接,定時檢查是否出現(xiàn)網(wǎng)絡(luò)故障或服務(wù)器重啟等情況,出現(xiàn)錯誤則重連。服務(wù)器首先讀取 config.txt文件,查找客戶端 IP地址是否合法,合法則接受連接請求。建立完連接后客戶端會再向服務(wù)器發(fā)送讀取數(shù)據(jù)請求,服務(wù)器端處理請求后開始發(fā)送數(shù)據(jù)。當(dāng)指定端口開始有數(shù)據(jù)寫入,中轉(zhuǎn)服務(wù)器啟動讀數(shù)據(jù)線程,直接讀取網(wǎng)卡緩沖區(qū)數(shù)據(jù),寫入到一個變長鏈表中,避免數(shù)據(jù)丟失;在視圖的初始化更新操作中啟動數(shù)據(jù)處理進程,從消息鏈表中讀取數(shù)據(jù),逐條解析,插入或更新數(shù)據(jù)庫中數(shù)據(jù),并顯示到界面上,處理完的數(shù)據(jù)則全部刪除。在接收數(shù)據(jù)的同時,啟動發(fā)送數(shù)據(jù)線程,讀取UDPClient.txt配置文件獲取局域網(wǎng)內(nèi)各終端用戶的 IP地址和端口號,每 20個客戶端建立一個基于UDP協(xié)議的 Socket,之后開始持續(xù)傳送二進制數(shù)據(jù)文件。

      第二級客戶端即局域網(wǎng)客戶端軟件功能較簡單,就是接收二進制數(shù)據(jù),按通信協(xié)議解析,存入數(shù)據(jù)庫,可供監(jiān)控系統(tǒng)調(diào)用在電子海圖上顯示監(jiān)視目標(biāo)的動態(tài)情況。

      服務(wù)器端和兩級客戶端應(yīng)用程序接收數(shù)據(jù)解析過程基本相同,即在指定端口接收數(shù)據(jù),按通信協(xié)議格式解析接收到的數(shù)據(jù),存入數(shù)據(jù)庫表,其活動圖如圖2。

      兩級客戶端發(fā)送數(shù)據(jù)活動圖如圖 3。

      服務(wù)器端應(yīng)用程序通過短信向船載或車載終端發(fā)送天氣信息、風(fēng)向信息,實現(xiàn)過程是把需要發(fā)送的數(shù)據(jù)封裝成規(guī)定的通信協(xié)議格式,由無線運營商轉(zhuǎn)發(fā)到終端 S IM卡上。而兩級客戶端通過服務(wù)器向終端發(fā)送引航計劃請求信息或是引航開始/結(jié)束時間等數(shù)據(jù)時過程類似,只是發(fā)送的目的地是指定的 IP地址和端口。

      圖2 接收數(shù)據(jù)處理活動圖

      圖3 兩級客戶端發(fā)送數(shù)據(jù)活動圖

      3 提高通信軟件性能的 3種技術(shù)

      3.1 嵌入式數(shù)據(jù)庫

      為降低應(yīng)用程序與大型數(shù)據(jù)庫交互的代價,第一級客戶端采用嵌入式數(shù)據(jù)庫 Sqlite3[2]。

      Sqlite3作為嵌入式數(shù)據(jù)庫,占有資源少,小巧、速度快。Sqlite3與 access一樣是文件型數(shù)據(jù)庫,就是說,一個數(shù)據(jù)庫就是一個文件,在此數(shù)據(jù)庫里可以建立很多的表,建立索引、觸發(fā)器等等,但實際上就是一個文件。備份這個文件就備份了整個數(shù)據(jù)庫,占用存儲空間非常小。

      Sqlite3不需要任何數(shù)據(jù)庫引擎,即使用Sqlite3來保存一些用戶數(shù)據(jù),也不需要安裝數(shù)據(jù)庫。它提供了一系列 C函數(shù)接口,通過這些接口,傳遞一些標(biāo)準(zhǔn) SQL語句就能夠操縱數(shù)據(jù)庫。

      Sqlite3使用讀、寫鎖控制對數(shù)據(jù)庫的訪問。典型地,其他嵌入式的 SQL數(shù)據(jù)庫引擎同時只允許一個進程連接到數(shù)據(jù)庫。目前,只有 Sqlite3的SQL數(shù)據(jù)庫引擎能處理如此多的并發(fā)操作,即允許多個進程同時打開一個數(shù)據(jù)庫,同時讀一個數(shù)據(jù)庫。當(dāng)有任何進程需要寫數(shù)據(jù)時,必須在更新過程中鎖住數(shù)據(jù)庫文件。

      3.2 多線程技術(shù)

      多線程編程技術(shù)[6]是將程序任務(wù)分成多個并行的子任務(wù),特別是在網(wǎng)絡(luò)編程中,很多可以并發(fā)執(zhí)行的功能利用多線程可以提高程序的快速響應(yīng)。為了保證用戶總能夠在很短的時間內(nèi)完成與應(yīng)用程序的交互,本文的通信軟件服務(wù)器端和一級客戶端都采用了多線程技術(shù)。

      服務(wù)器端應(yīng)用程序主要由接收數(shù)據(jù)線程、處理數(shù)據(jù)線程、監(jiān)聽客戶端連接線程、發(fā)送數(shù)據(jù) 4個線程組成。程序開始即啟動監(jiān)聽客戶端連接線程,負責(zé)建立用戶 Socket和監(jiān)聽 Socket的連接。連接建立后啟動接收數(shù)據(jù)線程,負責(zé)接收二進制數(shù)據(jù)文件;處理數(shù)據(jù)線程由接收線程啟動,負責(zé)解析二進制數(shù)據(jù),在界面上顯示并存入服務(wù)器數(shù)據(jù)庫。

      客戶端中轉(zhuǎn)服務(wù)器應(yīng)用程序啟動 4個線程,包括連接線程、接收數(shù)據(jù)線程、處理數(shù)據(jù)線程、發(fā)送數(shù)據(jù)線程,完成數(shù)據(jù)的接收和解析、顯示、傳送功能。

      使用多線程技術(shù)就存在數(shù)據(jù)同步問題。該通信軟件在測試過程中就出現(xiàn)了二級客戶端數(shù)據(jù)與服務(wù)器數(shù)據(jù)不同步,且數(shù)據(jù)過少問題。經(jīng)調(diào)試發(fā)現(xiàn),對接收數(shù)據(jù)的變長鏈表加鎖時間存在問題。在對鏈表未加鎖操作之前,可能會出現(xiàn)將處理線程切換到接收線程的情況,當(dāng)再切換到該線程的時候,m_s MsgQueue的大小就發(fā)生了變化,隨著鏈表數(shù)量的增大,查找時間越來越長,而放到鏈表后面的數(shù)據(jù)長期得不到執(zhí)行,就產(chǎn)生了程序運行不順暢,數(shù)據(jù)更新慢現(xiàn)象。針對這一情況,把加鎖操作時間點提前,保證每次線程跳到 OnProcess Message()函數(shù)時一次執(zhí)行完畢,避免發(fā)生鏈表數(shù)量越來越大的現(xiàn)象。

      3.3 變長鏈?zhǔn)酱鎯?/p>

      鏈?zhǔn)酱鎯梢粤闵⒎峙浯鎯臻g,比線性存儲結(jié)構(gòu)插入、刪除等操作的效率更高。通信軟件中的服務(wù)器和兩級客戶端接收數(shù)據(jù)的線程都使用了變長鏈表來存儲接收的數(shù)據(jù),一是保證存取操作效率,二是變長適應(yīng)了不同數(shù)量終端的需求。

      同時把變長鏈表和多線程結(jié)合使用。如中轉(zhuǎn)服務(wù)器數(shù)據(jù)處理線程中當(dāng)鏈表中的元素個數(shù)位于100和 200之間時該線程的優(yōu)先級提高到THREAD_PR IOR ITY_ABOVE_NORMAL,當(dāng)優(yōu)先級在 200以上時將優(yōu)先級提高到 THREAD_PR IOR ITY_H IGHEST,低于 100時設(shè)成正常模式。此外在鏈表數(shù)據(jù)量大于零時將休眠時間縮短到 10 ms,否則提高到 500 ms。對鏈表的動態(tài)維護一是防止鏈表中留有過多數(shù)據(jù)得不到及時的入庫和發(fā)送,二是防止 CPU分配過少資源給接收線程,使接收緩沖區(qū)留有過多數(shù)據(jù)得不到及時接收,能夠自適應(yīng)調(diào)整線程的優(yōu)先級,合理利用 CPU資源。

      4 性能測試

      由于通信軟件的關(guān)鍵性能在于高效傳輸數(shù)據(jù),對界面要求不多,因此這里不再給出界面效果,只給出測試軟件 LoadRunner[7]對 200個移動目標(biāo)同時發(fā)送數(shù)據(jù)的測試結(jié)果。圖 4為W indows資源圖。

      圖 4 通信軟件測試W indows資源圖

      其縱坐標(biāo)是資源使用率 (Resources Usage)。W indows資源圖描述W indows主機的系統(tǒng)資源摘要。最高的一條曲線為 CPU使用率,第二、第三條曲線為以 K字節(jié)計算和M字節(jié)計算的物理內(nèi)存可用字節(jié)數(shù),最低的第四條曲線是磁盤驅(qū)動器忙于讀或?qū)懭胩峁┓?wù)所用的時間百分比。由此圖可知,服務(wù)器的 CPU使用率均值為 66.164%,磁盤驅(qū)動器忙的時間百分比均值為 4.99%,可用物理內(nèi)存在 2149.57 M左右,說明通信軟件性能能夠滿足 200個用戶并發(fā)操作的請求。

      5 結(jié) 語

      本文開發(fā)的系統(tǒng)目前已在某引航站交付使用,系統(tǒng)運行穩(wěn)定。本系統(tǒng)服務(wù)器和兩級客戶端之間的數(shù)據(jù)傳輸采用客戶端/客戶端/服務(wù)器模式,基于 Visual Studio 2005開發(fā)平臺編程實現(xiàn),而服務(wù)器、客戶端軟件均采用多線程技術(shù)。實踐表明,嵌入式數(shù)據(jù)庫、變長鏈表和多線程技術(shù)可以實現(xiàn)高性能可靠的數(shù)據(jù)通信。

      [1]劉爽,賈傳熒,陳鵬.基于 C/S結(jié)構(gòu)的車輛監(jiān)控系統(tǒng)設(shè)計與實現(xiàn)[J].計算機工程與設(shè)計,2005,26(12): 3320-3323.

      [2]劉爽,史國友,張遠強.基于 TCP/IP協(xié)議和多線程的通信軟件的設(shè)計與實現(xiàn) [J].計算機工程與設(shè)計, 2010,31(7):1417-1420,1522.

      [3]施煒,李錚,秦穎.W indows Sockets規(guī)范及應(yīng)用 -W indows網(wǎng)絡(luò)編程接口 [M].北京:清華大學(xué)出版社,2000.

      [4]吳暾華.網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)中數(shù)據(jù)傳輸?shù)膶崿F(xiàn) [J].計算機工程與設(shè)計,2004,25(6):971-974.

      [5]OWENSM.The Definitive Guide to SQLite[M].New York:Apress,2006.

      [6]HUGHES C,HUGHES T.C++面向?qū)ο蠖嗑€程編程[M].周良忠,譯.北京:人民郵電出版社,2003.

      [7]于涌.軟件性能測試與 LoadRunner實戰(zhàn)[M].北京:人民郵電出版社,2008.

      (責(zé)任編輯 劉敏)

      Design and I mplementation of Real-t ime Commun ication Software in Client/Client/ServerM ode

      L IU Shuang,YUN Jian
      (College of Computer Science&Engineering,Dalian NationalitiesUniversity,Dalian Liaoning 116605,China)

      To achieve the goal of a pilotage management infor mation platfor m for some piloting station,we designed real-time communication software based on the client/client(relay server)/servermode.Thispaperpresents the network topology of the software and analyzes the communication process between the server and the client through TCP/IP and the workflow of data reception/transmission.The discussion is focused on how to ensure the integrity,real time and security of data communication using embedded databases,variable-length chain tables and multithreading technology. It also gives the result of communication software tests made with LoadRunner.It turns out that the sof tware runs reliablywith steady trans mission.

      client/servermode;multithread;embedded database;real-time;communication

      book=9,ebook=234

      TP393.09

      A

      1009-315X(2010)05-0477-04

      2010-6-21

      大連民族學(xué)院博士啟動金資助項目(20076207)。

      劉爽 (1977-),女,滿族,遼寧錦州人,副教授,博士,主要從事智能交通系統(tǒng)、機器學(xué)習(xí)研究。

      猜你喜歡
      接收數(shù)據(jù)發(fā)送數(shù)據(jù)鏈表
      移動自組網(wǎng)中MAC層協(xié)議研究
      沖激噪聲背景下基于幅度預(yù)處理的測向新方法*
      基于二進制鏈表的粗糙集屬性約簡
      跟麥咭學(xué)編程
      低復(fù)雜度多輸入多輸出雷達目標(biāo)角度估計方法
      基于馬爾科夫鏈的LoRaWAN網(wǎng)絡(luò)節(jié)點性能分析
      帶標(biāo)記方式的CRDSA++協(xié)議性能分析*
      基于鏈表多分支路徑樹的云存儲數(shù)據(jù)完整性驗證機制
      使用IPSec安全傳輸數(shù)據(jù)
      單片機模擬串口數(shù)據(jù)接收程序的實現(xiàn)及優(yōu)化
      焉耆| 宜兰市| 灯塔市| 阿图什市| 晋州市| 蕉岭县| 通辽市| 葵青区| 米脂县| 东山县| 额尔古纳市| 永州市| 滕州市| 保靖县| 广河县| 平陆县| 汽车| 清丰县| 丹东市| 湘阴县| 福州市| 罗山县| 棋牌| 石狮市| 武定县| 黔西| 崇礼县| 平舆县| 万荣县| 崇礼县| 治多县| 枣庄市| 辉南县| 濉溪县| 洪洞县| 临沭县| 宁远县| 宜宾县| 贡山| 来安县| 武冈市|