【正文】
些知識將會對該類軟件的開發(fā)流程有一個總體的認識。 Network Programming。 2 套接字簡介 6 采用 TCP方式連接 9 消息結(jié)構(gòu)體的設(shè)計 11 服務(wù)器消息處理流程 21 本章小結(jié) 23 結(jié) 論 24 致 謝 26 第 1 頁 共 26 頁 1 引言 課題的背景及意義 在網(wǎng)絡(luò)無所不在的今天,在 Inter 上,有 ICQ、 MSN、 Gtalk、 OICQ 等網(wǎng)絡(luò)聊天軟件,極大程度上方便了處于在世界各地的友人之間的相互聯(lián)系,也使世界 好像 一下子縮小了,不管你在哪里, 只要你上了網(wǎng),打開這些軟件,就可以給你的朋友發(fā)送信息,不管對方是否也同時在線,只要知道他有號碼。 現(xiàn)在也有很多在網(wǎng)絡(luò)上不使用服務(wù)器的通訊軟件,這種軟件小巧且方便,也能解決一部分問題。與 IP 協(xié)議相結(jié)合, TCP 代表了網(wǎng)絡(luò)協(xié)議的核心。 TCP 是面向連接的端到端的可靠協(xié)議 ,并保證傳送數(shù)據(jù)包的順序,而順序是用一個響應(yīng)序號來保證的,這個響應(yīng)序號告訴接收者發(fā)送者期望的下一個包。 UDP 協(xié)議 簡介 UDP 協(xié)議 是英文 User Datagram Protocol 的縮寫,即用戶數(shù)據(jù)報 協(xié)議 ,主要用來支持那些需要在計算機之間傳輸數(shù)據(jù)的網(wǎng)絡(luò)應(yīng)用。 既然 UDP 是一種不可靠的網(wǎng)絡(luò) 協(xié)議 ,那么還有什么使用價值或必要呢?其實不然,在有些情況下 UDP 協(xié)議 可能會變得非常有用。通過將這 3個 參數(shù)結(jié)合起來,與一個 Socket 綁定,應(yīng)用層就可以和傳輸層通過套接字接口,區(qū)分來自不同應(yīng)用程序進程或網(wǎng)絡(luò)連接的通信,實現(xiàn)數(shù)據(jù)傳輸?shù)牟l(fā)服務(wù) 開發(fā)平臺簡介 Linux 系統(tǒng)簡介 Linux 操作系統(tǒng)是 UNIX 操作系統(tǒng)的一種克隆系統(tǒng)。 Gtk+圖形庫使用一系列稱為“構(gòu)件”的對象來創(chuàng)建應(yīng)用程序的圖形用戶接口。雖然完全是用 C寫成的,但它仍然是用類和回調(diào)函數(shù) (指向函數(shù)的指針 )的方法實現(xiàn) 的。對于比較小型的項目,這種方法是比較適用的。 gcc 是可以在多種硬體平臺上編譯出可執(zhí)行程序的超級編譯器,其執(zhí)行效率與一般的編譯器相比平均效率要高20%~30% gcc 編譯器能將 C、 C++語言源程序、匯程式化序和目標程序編譯、連接成可執(zhí)行文件,如果沒有給出可執(zhí)行文件的名字, gcc 將生成一個名為 的文件。 用戶 可以用 GDB 來調(diào)試 C和 C++寫的程序。 客戶可以通過服務(wù)器轉(zhuǎn)發(fā),實現(xiàn)一對一 的 聊天 。 當(dāng)一個窗體出現(xiàn)問題時能夠及時的處理,讓主程序不受影響。 客戶及 /服務(wù)器模型將網(wǎng)絡(luò)應(yīng)用程序分為客戶和服務(wù)器兩部分。當(dāng)服務(wù)器配置 socket 接口時,它使用 bind()函數(shù)讓 socket 執(zhí)行體登記一個協(xié)議端口。 下面程序行顯示了一個典型的函數(shù)調(diào)用: result = bind ( socket_handle, local_structure socket_address, address_ length) 無連接客戶程序也對一個協(xié)議端口進行偵聽。采用 C/S結(jié)構(gòu)。 處理聊天信息模塊:轉(zhuǎn)發(fā)消息給指定的用戶。 配置信息模塊:提供基本的軟件配置操作。 char password[20]。 unsigned int status。 char dateserial[20]。當(dāng)用戶點擊離線用戶時便會觸發(fā)一個離線消息事件,該事件通過服務(wù)器轉(zhuǎn)發(fā)方式發(fā)送給離線用戶,當(dāng)對方上線時便可查看該離線消息。 服務(wù)器消息處理模塊的設(shè)計與實現(xiàn) 服務(wù)器的消息處理模塊主要由 7 部分組成,下面進行分別論述: 用戶登錄消息處理模塊: 當(dāng)服務(wù)器接收到用戶消息并判斷是登錄消息后,服務(wù)器將根據(jù)用戶所發(fā)送過來的用戶名和密碼到 表中進行匹配,如果匹配成功則把該用戶加入到 表中,設(shè)置用戶在線狀態(tài)為真的同時調(diào)用發(fā)送聯(lián)系人在線列表函數(shù),向添加該用戶為好友的用戶發(fā)送該用戶的上線信息。 刪除離線消息處理模塊: 如果客戶做出了刪除離線消息的動作,那么服務(wù)器端將會根據(jù)用戶的發(fā)送信息把該用戶的離線消息文件中的離線消息刪除。 離線消息存儲文件: 該文件中保存了其它用戶發(fā)給當(dāng)前用戶的離線消息。 離線消息可以查看當(dāng)用戶不在線時,有哪些用戶向該用戶發(fā)送了離線消息。 GtkCellRenderer *renderer:定義一個數(shù)據(jù)表現(xiàn)形式繪制類型。 在系統(tǒng)調(diào)用線程時為保證線程安全,需要前后分別調(diào)用 gdk_threads_enter ()和 gdk_threads_leave ()函數(shù)。如果登陸成功,則創(chuàng)建線程來維護和服務(wù)器的連接。 給列添加新的屬性, STATUS_COLUMN_PIXMAP 指定了行信息, ” pixbuf” 指定了繪制類型為圖像, renderer 指定了繪制方式 column = gtk_tree_view_column_new_with_attributes (Status, renderer, pixbuf, STATUS_COLUMN_PIXMAP, NULL)。該模塊主要處理以下幾種消息類型: 更新聯(lián)系人列表信息: 第 23 頁 共 26 頁 當(dāng)判斷接收到的消息為 GIF_ADDRLIST_MSG 時,程序?qū)β?lián)系人視圖進行刷新以便及時的顯示聯(lián)系人的當(dāng)前狀態(tài)。通過對本章的 分析理 解將會對整個軟件 的設(shè)計模式和編寫流程 有一個比較深入的了解。 第 24 頁 共 26 頁 參考文獻 [1] Stevens[美 ].TCP/IP詳解 卷 1:協(xié)議 [M].西安: 機械工業(yè)出版社 , 2020。在此向他們表示我最衷心的感謝! 在論文完成過程中,本人還得到了本系老師和同學(xué)的熱心幫助,本人向他們表示深深的謝意! 最后向在百忙之中評審本文的各位專家、老師表示衷心的感謝! 作者簡介: 姓 名:張曉韜 性別:男 出生年月: 1983 年 11 民族:漢族 Email: 第 26 頁 共 26 頁 聲 明 本論文的工作是 2020年 2月至 2020年 6月在成都信息工程學(xué)院網(wǎng)絡(luò)工程系完成的。 除非另有科研合同和其他法律文書的制約,本論文的科研成果屬于成都信息工程學(xué)院。s assertion of her brother39。s attachment, or whether it had escaped his observation。39。 ``indeed you have no reason. He may live in my memory as the most amiable man of my acquaintance, but that is all. I have nothing either to hope or fear, and nothing to reproach him with. Thank God! I have not that pain. A little time therefore. I shall certainly try to get the better.39。s situation remained the same, her peace equally wounded. A day or two passed before Jane had courage to spea k of her feelings to Elizabeth。 and much as she had always been disposed to like him, she could not think w ithout anger, hardly without contempt, on that easiness of temper, that want of proper resolution which now made him the slave of his designing friends, and led him to sacrifice his own happiness to the caprice of their inclinations. Had his own happiness, however, been the only sacrifice, he might have been allowed to sport with it in what ever manner he thought best。s letter arrived, and put an end to doubt. The very first sentence conveyed the assurance of their being all settled in London for the winter, and concluded with her brother39。除非另有說明,本文的工作是原始性工作。 [3] Stevens[美 ].UNIX 網(wǎng)絡(luò)編程 (卷 2:進程間通信 )第二版 [M].北京: 清華大學(xué)出版社 , 2020。 這款軟件目前所具備的功能已經(jīng)能夠滿足日常的聊天需 求。 聊天信息: 當(dāng)接收服務(wù) 器發(fā)送的消息的類型為 GIF_CHAT_MSG 時,程序首先要確定是誰發(fā)出的聊天請求,然后判斷聊天窗口是否開啟,如果未開啟則將開啟標識設(shè)為真,然后打開聊天窗口。 通過以上 3 個步驟一個視圖中就有了列,在進行相同的操作可創(chuàng)建多個列值,在用戶聯(lián)系人視圖中只建了兩個列分別顯示聯(lián)系人姓名和聯(lián)系人狀態(tài)。 界面顯示模塊: 當(dāng)用戶成功登陸后,在聯(lián)系人列表中將會顯示用戶的聯(lián)系人信息,在離線消息窗口中會顯示接收到 的離線消息,這兩個視圖均是用列表視圖來實現(xiàn)的。 gtk_widget_show(create_msgbox(error, Server Disconnected))。 上面的枚舉類型定義了用戶聯(lián)系人視窗中的列標識。 圖 412 聊天窗口 紅色顯示的是用戶自身,藍色為聯(lián)系人。 主窗體:該窗體中包含了所有的用戶操作按鈕和好友列表,用戶的操作都在這個窗體中完成。之所以采用這種發(fā)式是因為該服務(wù)器作為一個小型的聊天軟件的服務(wù)器,本身所要求保存的數(shù)據(jù)量并不大,且用戶數(shù)量也是比較有限的,在這種情況下采用文件方式對信息進行讀取在速度和開銷上都要有一些優(yōu)勢,且便于管理員管理用戶。 添加好友信息處理模塊: 當(dāng)服務(wù)器收到用戶請求加好友的消息時,服務(wù)器首先在 中查找要被添加的用戶是否存在,如果該用戶存在則把該用戶的信息存儲到當(dāng)前用戶的好友文件中,同時在被添加好友的用戶的 表中保存當(dāng)前用戶的信息。具體流程如下圖所示: 圖 46 管理 用戶流程圖 運行用戶管理程序 添加用戶 顯示用戶 刪除用戶 退出程序 第 15 頁 共 26 頁 5 詳細設(shè)計 該部分詳細講述了服務(wù)器和客戶端的界面和代碼,直觀地對該軟件進行設(shè)計說明,通過該部分將對軟件有一個全面的了解。 unsigned int length。 離線消息存儲時離線消息結(jié)構(gòu): typedef struct _offline_msgs_t { char sender[20]。 在線用戶信息結(jié)構(gòu): typedef struct _online_users_t { char loginid[20]。 unsigned int length。 發(fā)布系統(tǒng)消息模塊:將用戶上下線的消息發(fā)給各客戶端,并改寫用戶在服務(wù)器端