?

Linux環境下基于Socket的數據傳輸軟件設計

2020-11-23 12:02王璇王亮楊玻中國航空工業集團公司西安航空計算技術研究所
數碼世界 2020年11期
關鍵詞:服務器端網絡通信命令

王璇 王亮 楊玻 中國航空工業集團公司西安航空計算技術研究所

引言

隨著網絡通信在航空領域使用日趨廣泛,我們對于高可靠的網絡通信要求也是越來越高。因此操作系統中網絡的支持程度就顯得尤為重要。在現行眾多的操作系統中,Linux支持多用戶、多進程、多線程,實時性好,功能強大且穩定。在通信和網絡功能方面,Linux優于其它操作系統。其它操作系統不包含如此緊密的內核結合在一起的聯接網絡的能力,也沒有內置這些聯網特性的靈活性。而Linux為用戶提供了完善的、強大的網絡功能。

Socket作為UNIX的進程通信機制,通常也稱作“套接字”,用于描述IP地址和端口號,是一個通信鏈的句柄,可以用來實現不同虛擬機或不同計算機之間的通信。套接字通過調用系統提供的庫函數實現數據傳輸,不需要過多了解底層的細節,從而完成設備和網絡之間的通信。

1 Socket編程過程

Socket編程過程分為服務器端和客戶端編程,通信過程如圖1所示。

圖1 服務器端和客戶端Socket通信過程

Linux環境下的Socket編程是通過套接字的相關接口來實現的,應用程序可以通過Socket接口來收發數據。通信過程如下:

首先創建套接字socket(),然后服務器端綁定套接字bind(),即將本地主機的IP地址、端口號與創建的套接字相綁定。綁定完成后,服務器端監聽listen(),等待客戶端連接??蛻舳税l送連接請求connect()??蛻舳说恼埱髸|發服務器端和客戶端底層的三次握手,服務器端接受連接accept()。成功建立連接后,雙方就可以進行數據收發了。一般使用send()發送數據,使用recv()來接收數據。以上,Socket就連接了客戶端和服務器端的應用程序。在雙方不需要通信時,可以使用close()關閉連接。

2 數據傳輸軟件設計

上面介紹了Socket的網絡通信原理,現在我們就可以對數據傳輸軟件進行設計了。這是一個運行在Linux操作系統上基于Socket的客戶端程序,我們主要從軟件概述、Linux定時器使用、連接保持模塊、數據發送模塊和數據接收模塊等5個方面進行闡述。

2.1 軟件概述

本軟件運行在一個裝有Ubuntu Linux操作系統的航空設備上。該設備通過網線與數據庫服務器相連接,并將設備和服務器的IP地址設置在同一網段中。在客戶端與服務器端建立連接后,客戶端主動向服務器端請求上層應用軟件所需要的數據,服務器端接收到指令后找到相應數據返回給客戶端,供上層應用使用。由于上層應用隨時可能下發數據傳輸請求,故客戶端應周期性判斷與服務器端的連接狀態,保證在上層應用下發命令時客戶端和服務器端是通信正常的。

2.2 Linux定時器使用

Linux系統提供了毫秒級定時器itimerval,它是一個有兩個成員變量it_value和it_interval的結構體。it_value指定時器安裝后首次啟動的初始值,it_interval指定時器重啟動的間隔值。本軟件將它們都設置為1秒,即定時器啟動后將會以1秒為間隔周期觸發。接著使用setitimer()函數使方才設置的定時器生效,并使用signal()將中斷處理函數掛接入該定時器。這樣,系統每秒就能運行一次中斷處理函數,它包含連接保持模塊、數據發送模塊和數據接收模塊。

2.3 連接保持模塊

客戶端在Socket初始化完成后,會周期調用connect()與服務器端嘗試建立連接,如果建立連接成功,則會給服務器端發送連接保持命令字,如果在超時時間內服務器返回了相應命令字,說明連接保持。這時,上層應用就可以下發傳輸數據的命令了;如果連續三個周期服務器沒有在超時時間內回應命令字,則判定服務器下線,斷開并關閉其連接。下個周期繼續調用connect()嘗試與其建立連接。

2.4 數據發送模塊

在連接保持的狀態下,當上層應用下發數據傳輸命令,客戶端就可以使用send()函數來發送數據了。如果出現了小于發送長度的情況,就代表著數據有部分沒有發送完成,只是發送了一部分,這時就需要再次發送來完成數據發送。

2.5 數據接收模塊

當服務器端接收到客戶端所請求的數據時,服務器端就會回復數據,即客戶端使用recv()接收數據。由于服務器端不一定會立即回復數據,所以要設置超時時間。在超時時間內,客戶端接收到了足夠數量的數據,并進行累加和校驗,校驗成功,那么傳遞給上層應用;校驗失敗,則通知服務器端重傳。如果服務器端回復超時,則也需要服務器端重傳。

3 運行結果

程序采用C語言編寫,編譯Linux客戶端時需要執行如下編譯命令:gcc -o client client.c,然后運行此執行文件,命令如下:

在Linux系統下執行完上述命令后,設備就和數據庫服務器建立連接了。設備先向服務器發送請求數據命令,再接收服務器發來的數據,是典型的“主從模式”一發一收。

4 小結

Linux網絡具有較高的安全性,可以進行網絡資源的共享,完成網絡通信。它還包含著很多網絡協議,擁有開放的源代碼,我們可以利用Linux網絡進行基于Socket的網絡通信技術的開發。Socket作為其中的接口起著舉足輕重的作用,連接起了網絡設備和應用程序與下層協定,從而完成設備和網絡之間的網路通信。

猜你喜歡
服務器端網絡通信命令
管理Windows10的PowerShell命令行使用記錄
信息化時代網絡通信安全的背景和對策
疫情就是命令 防控就是責任
基于網絡通信的智能照明系統設計
5G網絡通信技術應用的前瞻性思考
基于Qt的安全即時通訊軟件服務器端設計
網絡通信中的數據信息安全保障分析
基于Qt的網絡聊天軟件服務器端設計
解析Windows10的內部命令
一種基于Java的IM即時通訊軟件的設計與實現
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合