1 引 言
客戶機/服務器模型中,發起連接的計算機被稱為客戶機,接收并建立連接的計算機被稱為服務器。根據此模型,計算機網絡通信也多采用架設服務器并通過服務器轉發的方式進行客戶機之間的數據通信,然而,這種網絡通信方式存在一定的缺點,主要在于:
(1)如果網絡中各主機間需要通信,就必須先要架設服務器,使用非常不方便。
(2)各個網絡主機之間的通信數據必須先由源客戶機發給服務器,再通過服務器轉發至目的客戶機,因此數據并沒有在客戶機之間直接傳遞,通信效率較低。
本文就是針對以上問題,以客戶機/服務器模型為基礎,設計出一種不需要服務器支持的局域網通信系統,使局域網內不同計算機問的通信不再需要通過服務器中轉,實現了不同計算機問的數據的直接傳輸。
2 系統框架設計
ISO的OSI七層模型中,傳輸層有TCP和UDP兩種協議,對應于這兩種協議有流式套接字和數據報套接字。該系統使用了UDP廣播消息和建立TCP連接進行數據傳輸的方式。
多線程的并行處理可以提高程序的吞吐量,多任務的相互獨立性也使程序在運行時間效率方面得到提高。網絡通信中任務繁雜,因此將網絡通信機制與多線程并行處理機制結合是一種有效的解決方案。該系統的通信任務主要通過3個線程并行完成,分別為:
(1)負責收發廣播的線程:該線程通過收發廣播消息的形式,獲得局域網內使用該系統的計算機信息。將局域網內使用該系統的計算機信息添加進本地鏈表;將局域網內退出該系統的計算機信息從本地鏈表中刪除。本地鏈表維護了局域網內所有使用該系統的計算機的信息,為系統其他功能的實現提供數據。
(2)負責監聽端口建立連接的線程:該線程的功能類似于客戶機/服務器模型中的服務器端,對局域網中的連接請求進行監聽,對于新的連接請求建立新的Socket用于連接,并且對于不同的連接請求創建新的數據接收線程,用于處理連接后的消息傳遞以及文件傳輸等功能。
(3)負責處理外部終端控制命令的線程:該線程用于該系統與用戶的交互,處理外部終端的控制命令,并對于不同的命令實現相應的功能。
3 系統實現具體流程
3.1 發送和接收廣播的線程設計流程
廣播消息線程使用UDP套接口,他與TCP套接口的主要區別在于通信雙方不需要事先建立連接即可收發數據。該線程工作流程如下:
(1)主機在局域網中廣播本機“上線”消息;
(2)主機等待接收局域網中的廣播消息;
(3)如果主機收到其他計算機“上線”廣播消息,則將發送該廣播消息的計算機信息添加進本地鏈表,并且回復“確認”廣播消息;如果主機收到“確認”廣播消息,則對發送該廣播消息的計算機信息進行判斷,如果鏈表中沒有記錄,則添加進本地鏈表;如果主機收到“離線”廣播消息,則將發送該消息的計算機在本地鏈表中的信息刪除。
3.2 監聽端口建立連接的線程設計流程
該線程監聽TCP套接口,對于不同的連接請求創建新的數據接收線程并發處理。工作流程如下:
(1)創建本地Socket,并監聽局域網中的連接請求;
(2)如果有連接請求進人,接收連接請求,并創建新的Socket和數據接收線程用于該連接的數據通信功能的實現。
因為該系統提供文件傳輸功能,所以在數據接收線程接收到數據包后,需要判斷該數據包中的信息是否為文件傳輸開始標志。如果是文件傳輸開始標志,表明信息發送方將傳輸文件,則主機進入文件接收工作程序;如果不是文件傳輸開始標志,則主機在終端上顯示接收到的消息。
3.3 命令處理線程的主要控制命令及其設計流程
(1)局域網在線計算機查詢命令:順序讀取主機鏈表中所維護的所有的節點信息,終端顯示局域網中所有在線計算機情況,包括其主機名、IP地址等;
(2)主機離線命令:廣播“離線”消息,斷開Socket連接,結束進程。
(3)發起連接命令:通過查詢系統維護的計算機信息鏈表,獲得想要與之建立連接的計算機的信息,發起連接,若連接成功,創建數據發送線程用于處理連接后的命令操作以及數據通信,并且阻塞命令處理線程,直到數據發送線程結束返回。
數據發送線程對終端輸入進行讀取和判斷,如果是文件傳輸命令,則進入文件發送工作程序;否則,直接發送消息。
4 系統實現主要代碼
5 結 語
本文基于網絡Socket通信原理與多線程技術,給出了在Linux環境下不需要服務器支持的網絡通信系統的設計與算法實現,此實現方法使局域網的計算機間通信效率得到了提高并且該系統使用非常方便,適用于局域網計算機間的即時數據通信。如何在此系統框架的基礎上添加更多的數據通信功能以及如何加快文件傳輸速度將是進一步的研究工作。
責任編輯:gt
-
計算機
+關注
關注
19文章
7536瀏覽量
88643 -
服務器
+關注
關注
12文章
9304瀏覽量
86067 -
局域網
+關注
關注
5文章
761瀏覽量
46396
發布評論請先 登錄
相關推薦
CC3200可以同時控制局域網和廣域網嗎?
客戶labview與服務器SQL連接,客戶機需要裝SQL數據庫嗎?
labview OPC UA是否只能在局域網中使用
使用TCP/IP軟件協議棧以實現局域網或者廣域網中的通信
NTP網絡時間服務器在大型局域網的同步技術
使用服務器和客戶機及java進行網絡通信的程序和流程圖免費下載
![使用<b class='flag-5'>服務器</b>和<b class='flag-5'>客戶機</b>及java進行網絡<b class='flag-5'>通信</b>的程序和流程圖免費下載](https://file.elecfans.com/web1/M00/95/37/pIYBAFz0l4SAEphBAAEzzL_Owhc413.png)
【局域網通信】NodeMCU之間的通信(二)
![【<b class='flag-5'>局域網通信</b>】NodeMCU之間的<b class='flag-5'>通信</b>(二)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論