王維++陳偉++聶維


摘要:本文基于Linux系統,使用socket技術和TCP協議編程實現了聊天系統。該系統由服務器與客戶端組成,數據庫選用MySQL,其中服務器使用Linux的C語言編寫,客戶端使用Linux的QT編寫。該系統可以支持多用戶在線聊天,能夠實現截圖、文件發送等復雜功能。
關鍵詞:Linux;TCP;socket;聊天系統
中圖分類號:TP316.81 文獻標識碼:A 文章編號:1007-9416(2017)10-0154-02
近幾年隨著信息的高速發展,人們越來越傾向于借助網絡通過聊天工具進行交流。當前聊天系統的開發技術越來越成熟,大多數聊天系統使用的協議是TCP/IP協議和UDP/IP協議[1],并且大多基于Windows平臺。本文主要研究基于Linux操作系統的socket通信技術的聊天系統。
1 聊天系統的設計與實現
本系統采用C/S架構,使用ububtu14.04 操作系統,基于TCP協議[2],使用MySQL14.14數據庫存儲用戶的相關信息、聊天記錄等。其中客戶端主要完成用戶的登錄、注冊、信息管理、聊天等功能,使用跨平臺的C++圖形用戶界面應用程序框架QT實現[3];服務器端主要完成服務器端的初始化及監聽、消息的存儲和轉發、系統消息的發送和信息管理等功能,使用Linux下的C語言實現[4],其總體功能模塊圖如圖1所示。以下部分對部分模塊的實現進行介紹。
1.1 截圖模塊
該模塊實現截圖區域任意大小的選擇,同時調整選擇區域及對選定區域的重選及保存,具體算法如:(1)調用updateMoveControlMouseShape(controlValue)函數改變8個控制點的鼠標狀態,以順時針方向編號完成坐標的初始化并顯示。(2)選取區域的高度和寬度,調用QPixmap::grabWindow()抓取當前屏幕圖片,將當前狀態beginControl設置為finishControl,確定選定區域后發送finishPixmap信號。
1.2 文件發送模塊
文件發送借助Linux文件系統相關的系統調用實現。文件發送分為發送方和接收方。首先介紹發送方:(1)檢測發送方是否在線,并返回提示信息。(2)使用open()函數打開文件,同時設置打開方式為只讀。(3)設定每次只發送1K(1024字節)大小的文件,先發送文件頭,再發送文件體,同時增加延時處理避免粘包,同時提示用戶文件是否發送成功。
接收方:(1)如果接收文件頭,以“wb”方式創建文件;如果接收文件體,以“ab”方式打開文件;(2)使用函數write((char *)msg->body,1,rc-4,fp),將接收的文件寫入已經打開的文件,使用函數flush(fp)刷新緩沖區;(3)檢測是否接收成功:即接收的總字節數與被打開的文件字節數是否相等。
2 測試
經過測試,該聊天系統能夠正常運行,其中局部截圖、文件發送分別如圖2、圖3所示。
3 結語
本文基于Linux操作系統,使用TCP的socket編程實現了聊天系統。該系統使用QT開發了客戶端,使用C語言開發了服務器端,同時使用MySQL數據庫存儲用戶的相關信息,極大的方便了用戶之間的交流。在下一步的工作中,我們將嘗試將該聊天系統移植到ARM平臺。
參考文獻
[1]曾宏安,馮利美.嵌入式應用程序設計綜合教程[M].北京:人民郵電出版社,2014.
[2]李淑梅,王志彬.Socket在局域網聊天系統中的應用[J].吉林師范大學學報:自然科學版,2014,(1):71-73.
[3]陳爽.Linux與Qt程序設計[M].北京:清華大學出版社,2011.
[4]賈明,嚴世賢.Linux下的C編程[M].北京:人民郵電出版社,2001.endprint