楊成義 陳科宏
摘? 要:通信軟件在公司、企業(yè)或學校等內部局域網中應用廣泛,實用性較高,可以用于文字溝通和文件傳輸,交互更加及時并且免費。使用C++網絡編程和Qt框架實現了一個局域網點對點通信軟件,集成了免賬號自動登錄、在線用戶搜索、文本通信、文件傳輸等功能,文章論述了軟件系統(tǒng)的設計過程,通過集成測試,驗證了軟件的基本功能,該軟件界面簡潔,操作人性化,能承擔日常工作所需的通信要求。
關鍵詞:C++;Qt框架;文本通信;文件傳輸
Abstract:Communication software is widely used in LAN of the company,enterprise or school with high practicability. It will be more convenient and free to be used for text communication and file transmission. Using C++ network programming and Qt framework to developing a point-to-point communication software in LAN,which integrates automatic login without account,online user search,text communication,file transmission and other functions. The article discusses the design process of the software system. Through the integration test,the basic functions of the software is verified. The interface of the software is simple,the operation is humanized,and it can meet the communication requirements of daily work.
Keywords:C++;Qt framework;text communication;file transmission
0? 引? 言
隨著計算機網絡的發(fā)展和多媒體應用的普遍發(fā)展,局域網通信軟件已經成為企業(yè)內部進行溝通交流、信息發(fā)布和管理不可或缺的應用平臺。同時,對于一些對安全性要求比較高的企事業(yè)單位來說,信息的流動具有保密的要求,所以內網不能與互聯網進行連接。為了更快、更高效地解決企業(yè)在線辦公,降低溝通成本,同時兼顧信息安全的要求,以最小的代價來獲得最大的安全保護,設計出一款界面簡潔、容易上手、運行穩(wěn)定的局域網通信軟件是有實際應用價值的,可以方便企事業(yè)單位員工之間的交流與溝通,同時也可用于文件資源的傳送,由于使用的是內部網絡,可有效降低通信內容被竊聽的風險,能夠滿足一定的保密需求。作者設計和開發(fā)的這款軟件已經用于廣東理工學院的部分機房中,可以用于局域網內教師和學生之間的相互交流,并方便教師進行作業(yè)的發(fā)布。
1? 系統(tǒng)的需求分析
局域網點對點通信軟件能提高溝通的效率和準確性,節(jié)省人力、物力。軟件在功能及性能上主要有以下需求:
(1)軟件安裝簡便,啟動快,能迅速打開聊天界面,省去注冊登錄等麻煩步驟,使操作更簡單。以主機名作為登錄名,使界面更加簡潔。軟件上線的同時能發(fā)現局域網內部已在線的其他用戶名單。有用戶上線時,也能及時進行通知,并實時更新用戶列表,同時,列表能詳細顯示用戶IP地址、主機名等相關信息。
(2)軟件應能夠對其他用戶請求作出提示,方便用戶準確進行選擇,能將消息傳輸到選定的某個用戶。同時,當某個用戶進行下線操作時,軟件及時將通信信號斷開,避免占用網絡資源,并將下線提示通知在線的其他用戶。
(3)在用戶進行點對點私聊的情況下,聊天界面能實現背景、文字風格等個性化設置。同時,軟件除了提供文字交流的功能,還應能進行文件的發(fā)送和接收。局域網內本地用戶所有的聊天信息都應記錄儲存到本地磁盤。
(4)軟件退出迅速,無彈窗。可以應用在各種局域網環(huán)境,無須服務器,大大減少了對網絡帶寬的占用,同時也節(jié)省能耗。
2? 系統(tǒng)設計
根據以上對軟件的功能需求,設計了四大功能模塊:
(1)用戶列表模塊:剔除了添加用戶,刪除用戶的功能。只要打開這個軟件,軟件就自動搜索局域網并添加其他在線用戶。
(2)通知模塊:主要用于監(jiān)控用戶上線和下線事件,記錄相關的時間信息,并以提醒的方式通知其他用戶。
(3)私聊模塊:該模塊所采用的協議是UDP協議,能在一定程度上節(jié)省網絡資源,私聊內容其他用戶不可見,做到一定程度上的保密性。為了信息的備份,軟件能夠保存聊天記錄到本地磁盤上,后期開發(fā)可以延伸到云端。
(4)接收發(fā)送文件模塊:選擇TCP協議進行文件的發(fā)送和接收,盡量保證在傳輸過程中文件主體的完整性。接收端顯示已接收文件的比例,剩余時間等相關參數。
3? 系統(tǒng)的實現
在Qt框架中,可以通過可視化設計進行界面的自動生成,UI中的元素對應XML語言標簽的映射,和HTML類似。圖標通過setWindowIcon()方法直接進行修改。在聊天框中,提供文字的個性化設置,控件會監(jiān)聽鼠標左鍵的單擊事件,調用messageTextEdit這個基類中的內置函數setFontWeight(),來完成字體加粗的設置。相應的,setFont Style()、setFontItalic()、setFontUnderline()這三個方法,分別用于設置聊天文字的常用字體、傾斜效果和下劃線效果。而更改默認字體顏色,則使用getColor()方法獲取用戶選擇的顏色,接著調用setTextColor()方法來實現顏色的設置。這些相關設置完成后,才會調用messageTextEdit()方法將所設置的全部樣式應用到接下來要進行的聊天文字上。
3.1? 用戶列表功能實現
軟件的用戶列表,如圖1所示,在聊天軟件界面右邊是正在線的用戶,用戶名是電腦主機的賬戶名,而主機名則是電腦名,IP地址就是局域網私有地址。在網絡傳輸過程中,當有用戶接入,軟件將對其監(jiān)控,并加入相關數據,設置的通訊串口為45454。一般情況下,不能更改電腦名稱和IP的地址,用戶名稱在設計上,沒有進行長度的固定,而是自動適應。
通過對用戶選擇的對象進行判斷,如果用戶選擇的getUserName和getIP的對應值和本機上傳的賬戶名index.row()和本機IPindex.row()一樣,將判斷為選擇用戶自己,則不能進行聊天并且會有彈窗警告。通過Qt中的類QTable WidgetItem,完成新存儲變量的聲明,將其本地主機名、IP地址、用戶連接端口進行綁定。通過對界面基類userTable Widget屬性進行修改,設置用戶名、主機名和IP地址列表行的顯示。這樣,當用戶更改自己的用戶名或主機名時,將同步顯示在聊天界面中。在該控件中,用戶名默認使用登錄機器的賬戶名,用戶可以進行重命名操作。
3.2? 通知功能實現
軟件時刻監(jiān)控用戶接入情況,通過udpSocket->hasPending Datagrams()獲取用戶連接數,判斷其值是否大于等于1,若成立,將用戶名、主機名和IP地址:userName,localHost Name,ipAddress屬性進行獲取,并在用戶行控件上進行顯示。用戶連接成功,會對userName.time進行記錄并顯示。同樣,在用戶下線離開時,將對斷開時刻進行記錄,使用udpSocket()進行套接字的關聯,同時利用userNumLabel-> setText傳遞的值進行實時在線人數的刷新,實現效果如圖2所示。
3.3? 私聊功能實現
如圖3所示,私聊過程中,文字信息的發(fā)送和接收正常。字體、大小、顏色等個性化設置均能實現。當用戶選擇對象進行私聊后,將與接收用戶進入同一個新的私聊窗口,該窗口會顯示對象用戶的電腦名稱和IP地址,在該窗口中,還可以選擇進行文件的傳輸。
在用戶選擇聊天對象后,軟件將把IP數據和端口數據進行傳遞,ui->TableWidget->text,port,觸發(fā)私聊的窗口Chat->show,將IP數據和端口數據在這個新窗口進行記錄。軟件接著對用戶進行初始化,使用setPolicy對傳送過來的數據進行處理,并定義端口為45456。確認后,對雙方的IP地址和套接字串口進行綁定,聊天內容由textBrowser進程進行記錄。當用戶下線時,userName.time進行時間的顯示,并關閉私聊窗口。
用戶單擊保存聊天記錄按鈕時,如果ui->textBrowser-> cument->Empty的值為空,會進行彈窗提示用戶:QMessage:: warn(0,tr("彈窗提示"),tr("保存出錯,聊天為空,無法觸發(fā)保存進程!"),QMessage::Ok);若不為空,則觸發(fā)保存彈窗:QStringfileName=QFile::getFileName(this,tr("觸發(fā)保存聊天進程"),tr("聊天記錄進程"),tr("文本(*.txt);All File(* . *)")),創(chuàng)建TXT格式的記事本文件,并要求用戶選擇存放的目錄位置。
3.4? 文件傳輸功能實現
在文件被發(fā)送前,利用selectedItems()進行發(fā)送對象的綁定,設置需發(fā)送文件的編碼格式為UTF-8,接收者使用6666端口進行監(jiān)聽,確認接收并選擇接收目錄后,觸發(fā)彈出框??蛑惺褂胋ytesReceived顯示文件已接收的大小,speed屬性記錄文件傳輸的速度,而useTime顯示已經使用的時間。計算已接受的數據量占文件總容量TotalBytes的比例,并實時進行可視化的進度條的更新。最后估算剩余所需時間并顯示,如圖4所示。
4? 結? 論
經過對界面和4個功能模塊的反復測試,本聊天軟件能自動搜索局域網內的用戶,無須添加,支持在線的點對點私聊,同時支持任何格式的文件的傳輸和接收,軟件安裝便利、界面簡潔、上手輕松,同時利用軟件進行消息的傳輸速度快,幾乎不占用的網絡寬帶資源。主要不足之處:該軟件未實現加解密功能,消息傳輸過程中的安全性有待提高;軟件的應用場景有限,只能在一般企事業(yè)單位的局域網內部進行使用,后續(xù)版本可根據企業(yè)的實際需求,增加離線留言、用戶分組、文件在線編輯等功能。
參考文獻:
[1] 王維波,粟寶鵑,侯春望.Qt 5.9 C++開發(fā)指南 [M].北京:人民郵電出版社,2018.
[2] 陸文周.Qt 5 開發(fā)及實例:第3版 [M].北京:電子工業(yè)出版社,2017.
[3] 霍亞飛.Qt Creator快速入門:第1版 [M].北京:北京航空航天大學出版社,2012.
[4] 代勇,李偉,楊宏德,等.Visual C++網絡通信編程技術詳解 [M].北京:機械工業(yè)出版社,2011.
[5] 軟件開發(fā)技術聯盟.Visual C++開發(fā)實例大全(基礎卷) [M].北京:清華大學出版社,2016.
作者簡介:楊成義(1985.09—),男,漢族,湖北孝感人,講師,碩士研究生,研究方向:群決策支持系統(tǒng);陳科宏(1995. 09—),男,漢族,廣東茂名人,本科,學士學位,研究方向:軟件工程。