新聞中心

EEPW首頁 > 手機(jī)與無線通信 > 設(shè)計(jì)應(yīng)用 > Linux環(huán)境下局域網(wǎng)通信系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

Linux環(huán)境下局域網(wǎng)通信系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

——
作者: 時(shí)間:2007-12-18 來源: 收藏

  1 引 言

  客戶機(jī)/服務(wù)器模型中,發(fā)起連接的計(jì)算機(jī)被稱為客戶機(jī),接收并建立連接的計(jì)算機(jī)被稱為服務(wù)器。根據(jù)此模型,計(jì)算機(jī)通信也多采用架設(shè)服務(wù)器并通過服務(wù)器轉(zhuǎn)發(fā)的方式進(jìn)行客戶機(jī)之間的數(shù)據(jù)通信,然而,這種通信方式存在一定的缺點(diǎn),主要在于:

  (1)如果中各主機(jī)間需要通信,就必須先要架設(shè)服務(wù)器,使用非常不方便。

  (2)各個(gè)網(wǎng)絡(luò)主機(jī)之間的通信數(shù)據(jù)必須先由源客戶機(jī)發(fā)給服務(wù)器,再通過服務(wù)器轉(zhuǎn)發(fā)至目的客戶機(jī),因此數(shù)據(jù)并沒有在客戶機(jī)之間直接傳遞,通信效率較低。

  本文就是針對(duì)以上問題,以客戶機(jī)/服務(wù)器模型為基礎(chǔ),設(shè)計(jì)出一種不需要服務(wù)器支持的通信系統(tǒng),使內(nèi)不同計(jì)算機(jī)問的通信不再需要通過服務(wù)器中轉(zhuǎn),實(shí)現(xiàn)了不同計(jì)算機(jī)問的數(shù)據(jù)的直接傳輸。

  2 系統(tǒng)框架設(shè)計(jì)

  的OSI七層模型中,傳輸層有TCP和UDP兩種協(xié)議,對(duì)應(yīng)于這兩種協(xié)議有流式套接字和數(shù)據(jù)報(bào)套接字。該系統(tǒng)使用了UDP廣播消息和建立TCP連接進(jìn)行數(shù)據(jù)傳輸?shù)姆绞健?/P>

  多線程的并行處理可以提高程序的吞吐量,多任務(wù)的相互獨(dú)立性也使程序在運(yùn)行時(shí)間效率方面得到提高。網(wǎng)絡(luò)通信中任務(wù)繁雜,因此將網(wǎng)絡(luò)通信機(jī)制與多線程并行處理機(jī)制結(jié)合是一種有效的解決方案。該系統(tǒng)的通信任務(wù)主要通過3個(gè)線程并行完成,分別為:

  (1)負(fù)責(zé)收發(fā)廣播的線程:該線程通過收發(fā)廣播消息的形式,獲得內(nèi)使用該系統(tǒng)的計(jì)算機(jī)信息。將局域網(wǎng)內(nèi)使用該系統(tǒng)的計(jì)算機(jī)信息添加進(jìn)本地鏈表;將局域網(wǎng)內(nèi)退出該系統(tǒng)的計(jì)算機(jī)信息從本地鏈表中刪除。本地鏈表維護(hù)了局域網(wǎng)內(nèi)所有使用該系統(tǒng)的計(jì)算機(jī)的信息,為系統(tǒng)其他功能的實(shí)現(xiàn)提供數(shù)據(jù)。

  (2)負(fù)責(zé)監(jiān)聽端口建立連接的線程:該線程的功能類似于客戶機(jī)/服務(wù)器模型中的服務(wù)器端,對(duì)局域網(wǎng)中的連接請(qǐng)求進(jìn)行監(jiān)聽,對(duì)于新的連接請(qǐng)求建立新的Socket用于連接,并且對(duì)于不同的連接請(qǐng)求創(chuàng)建新的數(shù)據(jù)接收線程,用于處理連接后的消息傳遞以及文件傳輸?shù)裙δ堋?/P>

  (3)負(fù)責(zé)處理外部終端控制命令的線程:該線程用于該系統(tǒng)與用戶的交互,處理外部終端的控制命令,并對(duì)于不同的命令實(shí)現(xiàn)相應(yīng)的功能。

  系統(tǒng)結(jié)構(gòu)如圖1所示。

  

  3 系統(tǒng)實(shí)現(xiàn)具體流程

  3.1 發(fā)送和接收廣播的線程設(shè)計(jì)流程

  廣播消息線程使用UDP套接口,他與TCP套接口的主要區(qū)別在于通信雙方不需要事先建立連接即可收發(fā)數(shù)據(jù)。該線程工作流程如下:

  (1)主機(jī)在局域網(wǎng)中廣播本機(jī)“上線”消息;

  (2)主機(jī)等待接收局域網(wǎng)中的廣播消息;

  (3)如果主機(jī)收到其他計(jì)算機(jī)“上線”廣播消息,則將發(fā)送該廣播消息的計(jì)算機(jī)信息添加進(jìn)本地鏈表,并且回復(fù)“確認(rèn)”廣播消息;如果主機(jī)收到“確認(rèn)”廣播消息,則對(duì)發(fā)送該廣播消息的計(jì)算機(jī)信息進(jìn)行判斷,如果鏈表中沒有記錄,則添加進(jìn)本地鏈表;如果主機(jī)收到“離線”廣播消息,則將發(fā)送該消息的計(jì)算機(jī)在本地鏈表中的信息刪除。

  3.2 監(jiān)聽端口建立連接的線程設(shè)計(jì)流程

  該線程監(jiān)聽TCP套接口,對(duì)于不同的連接請(qǐng)求創(chuàng)建新的數(shù)據(jù)接收線程并發(fā)處理。工作流程如下:

  (1)創(chuàng)建本地Socket,并監(jiān)聽局域網(wǎng)中的連接請(qǐng)求;

  (2)如果有連接請(qǐng)求進(jìn)人,接收連接請(qǐng)求,并創(chuàng)建新的Socket和數(shù)據(jù)接收線程用于該連接的數(shù)據(jù)通信功能的實(shí)現(xiàn)。

  因?yàn)樵撓到y(tǒng)提供文件傳輸功能,所以在數(shù)據(jù)接收線程接收到數(shù)據(jù)包后,需要判斷該數(shù)據(jù)包中的信息是否為文件傳輸開始標(biāo)志。如果是文件傳輸開始標(biāo)志,表明信息發(fā)送方將傳輸文件,則主機(jī)進(jìn)入文件接收工作程序;如果不是文件傳輸開始標(biāo)志,則主機(jī)在終端上顯示接收到的消息。

  3.3 命令處理線程的主要控制命令及其設(shè)計(jì)流程

  (1)局域網(wǎng)在線計(jì)算機(jī)查詢命令:順序讀取主機(jī)鏈表中所維護(hù)的所有的節(jié)點(diǎn)信息,終端顯示局域網(wǎng)中所有在線計(jì)算機(jī)情況,包括其主機(jī)名、IP地址等;

  (2)主機(jī)離線命令:廣播“離線”消息,斷開Socket連接,結(jié)束進(jìn)程。

  (3)發(fā)起連接命令:通過查詢系統(tǒng)維護(hù)的計(jì)算機(jī)信息鏈表,獲得想要與之建立連接的計(jì)算機(jī)的信息,發(fā)起連接,若連接成功,創(chuàng)建數(shù)據(jù)發(fā)送線程用于處理連接后的命令操作以及數(shù)據(jù)通信,并且阻塞命令處理線程,直到數(shù)據(jù)發(fā)送線程結(jié)束返回。

  數(shù)據(jù)發(fā)送線程對(duì)終端輸入進(jìn)行讀取和判斷,如果是文件傳輸命令,則進(jìn)入文件發(fā)送工作程序;否則,直接發(fā)送消息。

  該系統(tǒng)的文件發(fā)送與接收流程如圖2所示。

  

  4 系統(tǒng)實(shí)現(xiàn)主要代碼

  

  

  5 結(jié) 語

  本文基于網(wǎng)絡(luò)Socket通信原理與多線程技術(shù),給出了在環(huán)境下不需要服務(wù)器支持的網(wǎng)絡(luò)通信系統(tǒng)的設(shè)計(jì)與算法實(shí)現(xiàn),此實(shí)現(xiàn)方法使局域網(wǎng)的計(jì)算機(jī)間通信效率得到了提高并且該系統(tǒng)使用非常方便,適用于局域網(wǎng)計(jì)算機(jī)間的即時(shí)數(shù)據(jù)通信。如何在此系統(tǒng)框架的基礎(chǔ)上添加更多的數(shù)據(jù)通信功能以及如何加快文件傳輸速度將是進(jìn)一步的研究工作。

linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)


評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉