Linux環(huán)境下局域網(wǎng)通信系統的設計與實(shí)現
1 引 言
客戶(hù)機/服務(wù)器模型中,發(fā)起連接的計算機被稱(chēng)為客戶(hù)機,接收并建立連接的計算機被稱(chēng)為服務(wù)器。根據此模型,計算機網(wǎng)絡(luò )通信也多采用架設服務(wù)器并通過(guò)服務(wù)器轉發(fā)的方式進(jìn)行客戶(hù)機之間的數據通信,然而,這種網(wǎng)絡(luò )通信方式存在一定的缺點(diǎn),主要在于:
(1)如果網(wǎng)絡(luò )中各主機間需要通信,就必須先要架設服務(wù)器,使用非常不方便。
(2)各個(gè)網(wǎng)絡(luò )主機之間的通信數據必須先由源客戶(hù)機發(fā)給服務(wù)器,再通過(guò)服務(wù)器轉發(fā)至目的客戶(hù)機,因此數據并沒(méi)有在客戶(hù)機之間直接傳遞,通信效率較低。
本文就是針對以上問(wèn)題,以客戶(hù)機/服務(wù)器模型為基礎,設計出一種不需要服務(wù)器支持的局域網(wǎng)通信系統,使局域網(wǎng)內不同計算機問(wèn)的通信不再需要通過(guò)服務(wù)器中轉,實(shí)現了不同計算機問(wèn)的數據的直接傳輸。
2 系統框架設計
ISO的OSI七層模型中,傳輸層有TCP和UDP兩種協(xié)議,對應于這兩種協(xié)議有流式套接字和數據報套接字。該系統使用了UDP廣播消息和建立TCP連接進(jìn)行數據傳輸的方式。
多線(xiàn)程的并行處理可以提高程序的吞吐量,多任務(wù)的相互獨立性也使程序在運行時(shí)間效率方面得到提高。網(wǎng)絡(luò )通信中任務(wù)繁雜,因此將網(wǎng)絡(luò )通信機制與多線(xiàn)程并行處理機制結合是一種有效的解決方案。該系統的通信任務(wù)主要通過(guò)3個(gè)線(xiàn)程并行完成,分別為:
(1)負責收發(fā)廣播的線(xiàn)程:該線(xiàn)程通過(guò)收發(fā)廣播消息的形式,獲得局域網(wǎng)內使用該系統的計算機信息。將局域網(wǎng)內使用該系統的計算機信息添加進(jìn)本地鏈表;將局域網(wǎng)內退出該系統的計算機信息從本地鏈表中刪除。本地鏈表維護了局域網(wǎng)內所有使用該系統的計算機的信息,為系統其他功能的實(shí)現提供數據。
(2)負責監聽(tīng)端口建立連接的線(xiàn)程:該線(xiàn)程的功能類(lèi)似于客戶(hù)機/服務(wù)器模型中的服務(wù)器端,對局域網(wǎng)中的連接請求進(jìn)行監聽(tīng),對于新的連接請求建立新的Socket用于連接,并且對于不同的連接請求創(chuàng )建新的數據接收線(xiàn)程,用于處理連接后的消息傳遞以及文件傳輸等功能。
(3)負責處理外部終端控制命令的線(xiàn)程:該線(xiàn)程用于該系統與用戶(hù)的交互,處理外部終端的控制命令,并對于不同的命令實(shí)現相應的功能。
系統結構如圖1所示。

3 系統實(shí)現具體流程
3.1 發(fā)送和接收廣播的線(xiàn)程設計流程
廣播消息線(xiàn)程使用UDP套接口,他與TCP套接口的主要區別在于通信雙方不需要事先建立連接即可收發(fā)數據。該線(xiàn)程工作流程如下:
(1)主機在局域網(wǎng)中廣播本機“上線(xiàn)”消息;
(2)主機等待接收局域網(wǎng)中的廣播消息;
(3)如果主機收到其他計算機“上線(xiàn)”廣播消息,則將發(fā)送該廣播消息的計算機信息添加進(jìn)本地鏈表,并且回復“確認”廣播消息;如果主機收到“確認”廣播消息,則對發(fā)送該廣播消息的計算機信息進(jìn)行判斷,如果鏈表中沒(méi)有記錄,則添加進(jìn)本地鏈表;如果主機收到“離線(xiàn)”廣播消息,則將發(fā)送該消息的計算機在本地鏈表中的信息刪除。
3.2 監聽(tīng)端口建立連接的線(xiàn)程設計流程
該線(xiàn)程監聽(tīng)TCP套接口,對于不同的連接請求創(chuàng )建新的數據接收線(xiàn)程并發(fā)處理。工作流程如下:
(1)創(chuàng )建本地Socket,并監聽(tīng)局域網(wǎng)中的連接請求;
(2)如果有連接請求進(jìn)人,接收連接請求,并創(chuàng )建新的Socket和數據接收線(xiàn)程用于該連接的數據通信功能的實(shí)現。
因為該系統提供文件傳輸功能,所以在數據接收線(xiàn)程接收到數據包后,需要判斷該數據包中的信息是否為文件傳輸開(kāi)始標志。如果是文件傳輸開(kāi)始標志,表明信息發(fā)送方將傳輸文件,則主機進(jìn)入文件接收工作程序;如果不是文件傳輸開(kāi)始標志,則主機在終端上顯示接收到的消息。
3.3 命令處理線(xiàn)程的主要控制命令及其設計流程
(1)局域網(wǎng)在線(xiàn)計算機查詢(xún)命令:順序讀取主機鏈表中所維護的所有的節點(diǎn)信息,終端顯示局域網(wǎng)中所有在線(xiàn)計算機情況,包括其主機名、IP地址等;
(2)主機離線(xiàn)命令:廣播“離線(xiàn)”消息,斷開(kāi)Socket連接,結束進(jìn)程。
(3)發(fā)起連接命令:通過(guò)查詢(xún)系統維護的計算機信息鏈表,獲得想要與之建立連接的計算機的信息,發(fā)起連接,若連接成功,創(chuàng )建數據發(fā)送線(xiàn)程用于處理連接后的命令操作以及數據通信,并且阻塞命令處理線(xiàn)程,直到數據發(fā)送線(xiàn)程結束返回。
數據發(fā)送線(xiàn)程對終端輸入進(jìn)行讀取和判斷,如果是文件傳輸命令,則進(jìn)入文件發(fā)送工作程序;否則,直接發(fā)送消息。
該系統的文件發(fā)送與接收流程如圖2所示。

4 系統實(shí)現主要代碼


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