【正文】
和客戶端的狀態(tài)。 總體設(shè)計方案 為實現(xiàn)網(wǎng)絡(luò)聊天的功能,該軟件采用 Socket 編程,服務(wù)器與客戶端采用了TCP/IP 方式連接,在設(shè)計聊天方案時,實行將所有信息發(fā)往服務(wù)器端,再由服務(wù)器進行分別處理的思路,服務(wù)器端是所有信息的中心。無連接客戶程序使用數(shù)據(jù)報發(fā)送網(wǎng)絡(luò)服務(wù)請求,它不建立點到點連接。 Socket 執(zhí)行體接著告 訴傳輸層某個特定協(xié)議端口已被使用,并將其收到的所有數(shù)據(jù)傳送給 Socket API。在 TCP/IP 網(wǎng)絡(luò)應(yīng)用中,多數(shù)網(wǎng)絡(luò)應(yīng)用程序是使用客戶 /服務(wù)器模型設(shè)計的。當(dāng)有錯誤發(fā)生時,我們應(yīng)該有一個很好的機制來保障錯誤能夠及時地被排除。 客戶端程序可以 顯示在線好友。所以,開發(fā)一個網(wǎng)絡(luò)里的 C/S 通訊軟件是十分必要的。 GDB 主要能做四件事 (包括為了完成這些事而附加的功能 ),幫助 用戶 找出程序中的錯誤。也許這是以后桌面應(yīng) 用程序開發(fā)的一個方向。Gnome 的一些新特性,如 popt 參數(shù)分析,保存應(yīng)用程序設(shè)置等也是 Gtk+構(gòu)件所沒有的??梢杂盟鼈儊順?gòu)造非常豐富的用戶界面。以后借助于 Inter 網(wǎng)絡(luò),并經(jīng)過全世界各地計算機愛好者的共同努力下,現(xiàn)已成為今天世界上使用最多的一種UNIX 類操作系統(tǒng),并且使用人數(shù)還在迅猛增長。雖然 TCP 協(xié)議 中植入了各種 安全 保障功能,但是在實際執(zhí)行的過程中會占用大量的系統(tǒng)開銷,無疑使速度受到嚴重的影響。 UDP 協(xié)議 從問世至今已經(jīng)被使用了很多年,雖然其最初的光彩已經(jīng)被一些類似 協(xié)議 所掩蓋,但是即使是在今天, UDP 仍然不失為一項非常實用和可行的網(wǎng)絡(luò)傳輸層 協(xié)議 。 TCP 的可靠機制允許設(shè)備處理丟失、刪除及讀錯的包。這一過程是通過使用 TCP 的 “ 端口號 ” 完成的??梢员4嬗脩舻膫€人信息或個人簡介,供人查看。但對很多習(xí)慣于 Windows 操作系統(tǒng)的人來說, Linux 的操作不夠人性化、交互界面不夠美觀,這給 Linux 操作系統(tǒng)的普及帶來了很大的阻礙。 20 客戶端功能模塊的設(shè)計與實現(xiàn) 15 服務(wù)器數(shù)據(jù) 存儲的方法 15 服務(wù)器消息處理模塊的設(shè)計與實現(xiàn) 12 客戶端消息發(fā)送和接收流程 11 客戶端操作流程 10 4 軟件流程 8 消息標識的定義 8 客戶端功能模塊劃分 8 服務(wù)器功能模塊劃分 6 錯誤處理需求 5 2 軟件需求分析 程序設(shè)計路線這一章節(jié)對該軟件的各個功能模塊和操作處理流程進行了詳細的劃分和設(shè)計,并且運用各種圖表清晰的展現(xiàn)了軟件的模塊信息和總體結(jié)構(gòu)。 本文闡述了如何使用 GTK+圖形開發(fā)庫和 C 語言編寫一個基于 Linux 平臺運行的聊天軟件的過程。 關(guān)鍵詞 : Linux 系統(tǒng); C/S 結(jié) 構(gòu) ; TCP/IP 協(xié)議;網(wǎng)絡(luò)編程;圖形用戶界面 Design and Implementation of Chat Software on the Platform of Linux Operating System Abstract Nowadays the work technology develops very rapidly, the chat program as a cheap and quick means of munication has been adopted by more and more people in the world. This disquisition expounds how to use the GTK+ and C cord a chat program based on the Linux platform, and the paper is divided into four parts. The first part is to deal with the development of this product and the background and significance of developing of this software. On this basis it goes on to describe the demand for this product. The third part introduces the choice about the circumstance of this development. With such knowledge in hand, we have a general idea of the developing program of this software. And the design idea will be determined through the analysis and summingup of the preparatory design. In the section dealing with the program design, all the function modes and their operation flow of this software give an account of the detailed division and design. In addition, all the charts show the information of the modes and their whole structures. Finally, the paper points out the shortings in the design of the software. And it is hoped that further efforts will be made in the design. Key words: Linux Operating System。 6 本章小結(jié) 14 5 詳細設(shè)計 伴隨著網(wǎng)絡(luò)的誕生,網(wǎng)絡(luò)聊天軟件也隨之而來。實際所稱的 TCP/IP協(xié)議包括了在國際互聯(lián)網(wǎng)絡(luò)應(yīng)用的一組協(xié)議,互聯(lián)網(wǎng)協(xié)議族是此協(xié)議族的另一個名字。 TCP 服務(wù)提供了數(shù)據(jù)流傳輸、可靠行、有效流控制、全雙工操作和多路復(fù)用技術(shù)等。當(dāng)向發(fā)送者返回發(fā)送確認響應(yīng),接收 TCP 進程就會暗示最高序列號,它能接收并保證不會發(fā)生溢出。 UDP 協(xié)議 的主要作用是將網(wǎng)絡(luò)數(shù)據(jù)流量壓縮成數(shù)據(jù)報的形式。多個 TCP連接或多個應(yīng)用程序進程可能需要通過同一個 TCP 協(xié)議端口傳輸數(shù)據(jù)。 在 Linux 平臺上運行的軟件都是免費使用的,且你可以隨意的改動代碼部分,只要他們是完全基于 GNU 的。這些構(gòu)件都是 Gtk+構(gòu)件庫的補充,它們提供了許多 Gtk+構(gòu)件沒有的功能。它向用戶提供可視化的界面設(shè)計環(huán)境,并以 XML 文件的格式進行保存。因為 Gtk+ 和 Gnome 是用 C語言編寫的,所以在開發(fā) Linux 下的 GUI 程序時使用 C 語言是非常方便的。 當(dāng)程序停止時,讓 用戶 檢查發(fā)生了什么 。對需求的深入理解是開發(fā)工作獲得成功的前提條件,它對目標項目提出完整、準確、清晰、具體的要求。 服務(wù)器模型一般分為循環(huán)服務(wù)器和并發(fā)服務(wù)器 ,循環(huán)服務(wù)器一次只能處理一個連接,也就是說同一時間只能由一個用戶連接到服務(wù)器進行消息處理,這種情況是不被允許的。上面已經(jīng)總體上列出該聊天程序的基本功能需求,接下來的工作就是如何將這些功能開發(fā)的盡量完善,使得界面清晰簡單,方便易用。雖然基于連接的服務(wù)是設(shè)計客戶 /服務(wù)器應(yīng)用程序的標準,但有些服務(wù)也是可以通過數(shù)據(jù)報 Socket 提供的。例如,無連接和連接服務(wù)器程序必須在協(xié)議端口偵聽客戶請求。也就是說,類似服務(wù)器程序,無連接客戶程序告訴 Socket 執(zhí)行體使用哪個協(xié)議端口進行數(shù)據(jù)傳輸。 針對這些操作,服務(wù)器做了如下的模塊劃分: 處理登陸信息模塊:檢查登陸信息是否正確,并向客戶端返回登陸信息,如信息正確。 界面顯示模塊:將在線好友顯示在好友列表中,并顯示其當(dāng)前狀態(tài)。 unsigned int reserved。 用戶聯(lián)系人信息結(jié)構(gòu): typedef struct _user_contacts_t { char loginid[20]。 char message[1024]。 服務(wù)器消息處理流程 第 12 頁 共 26 頁 服務(wù)器運行后即處于監(jiān)聽狀態(tài),當(dāng)監(jiān)聽到有連接 請求時服務(wù)器進入消息處理流程,因為服務(wù)器為并發(fā)服務(wù)器,所以可以同時對多個請求做出相應(yīng)。在 中我們敘述了服務(wù)器的消息處理流程,而最后的消息處理部分就是由這 7個模塊來完成的。如果用戶不在線則將消息標識設(shè)定為離線消息,并將該消息寫入被指定用戶的離線消息文件中。 在線用戶數(shù)據(jù)文件: 該文件中保存了當(dāng)前在線用戶的 loginid 和 socket 信息。 Contact’ s id:填寫要添加的好友的 loginid 號 OK: GIF_ADD_CONTACTS_MSG 同時向服務(wù)器發(fā)送消息請求 第 19 頁 共 26 頁 圖 49 添加好友窗口 系統(tǒng)消息窗口: 當(dāng)用戶的操作成功或者失敗的時候,系統(tǒng)會顯示一條消息給用戶,以便提示用戶操作是否成功。 GtkListStore *offline_temp_store:定義一個離線消息數(shù)據(jù)管理類型。 gtk_widget_set_sensitive(widget, TRUE):設(shè)置指定控件的敏感度 TRUE 可以點擊 FALSE 則不能點擊。 該模塊在登陸窗口中收集服務(wù)器的 IP 地址和用戶的用戶名和密碼。 將視圖添加到指定的容器中 gtk_container_add (GTK_CONTAINER (scrolledwindow1), tree)。parent_iter,CONTACTS_COLUMN_TEXT, Available, 1) iterator 是系統(tǒng)提供的一種訪問一個容器( container)對象中各個元素,而又不需暴露該對象的內(nèi)部細節(jié)的方法。 離線消息: 如果接收到的消息類型為 GIF_OFFLINE_MSG,程序會按照界面顯示模塊中對樹視圖的創(chuàng)建步驟那樣, 創(chuàng)建一個顯示離線消息的視圖用來顯示離線消息。欠缺之處在于沒有實現(xiàn)系統(tǒng)托盤,用戶使用時只能通過點擊任務(wù)欄的標簽對軟件進行顯示或隱藏,這一部分的功能將會進一步的完善。 [6]宋國偉 . GTK+ [M].北京: 清華大學(xué)出版社 , 2020。 ( 3)學(xué)??梢詫W(xué)術(shù)交流為目的復(fù)制、贈送和交換學(xué)位論文。s praise occupied the chief of it. Her many attractions were again dwelt on, and Caroline boasted joyfully of their increasing intimacy, and ventur ed to predict the acplishment of the wishes which had been unfolded in her former letter. She wrote also with great pleasure of her brother39。s regard had really died away, or were suppressed by his friends39。 she can have no idea of the pain she gives me by her continual reflections on him. But I w ill not repine. I t cannot last long. He will be fot, and we shall all be as we were before.39