freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于udp的局域網(wǎng)聊天系統(tǒng)。(編輯修改稿)

2024-12-16 03:25 本頁面
 

【文章內(nèi)容簡介】 用時序圖 客戶 /服務(wù)器程序的介紹 客戶機(jī) /服務(wù)器 [16]模型也是一種網(wǎng)絡(luò)模型,但與其他的模型不同,它并不是定義了網(wǎng)絡(luò)的層次結(jié)構(gòu),而是描述了一種網(wǎng)絡(luò)程序運行的方式。 客戶及 /服務(wù)器模型將網(wǎng)絡(luò)應(yīng)用程序分為客戶和服務(wù)器兩部分??蛻舴綄Ψ?wù)器方發(fā)送信息請求,服務(wù)器方對其做出相應(yīng)回答,提供服務(wù)。在 TCP/IP 網(wǎng)絡(luò)應(yīng)用中,多數(shù)網(wǎng)絡(luò)應(yīng)用程序是使用客戶 /服務(wù)器模型設(shè)計的。服務(wù)程序通常在一個眾所周知的地址監(jiān)聽對服務(wù)的請求,也就是說,服務(wù)進(jìn)程一直處于休眠 狀態(tài),直到一個客戶程序提出了請求信息。此時,服務(wù)程序被 驚醒 并且為客戶提供服務(wù),對客戶的請求作出適當(dāng)?shù)姆磻?yīng)。雖然基于連接的服務(wù)是設(shè)計客戶 /服務(wù)器應(yīng)用程序的標(biāo)準(zhǔn),但有些服務(wù)也是可以通過數(shù)據(jù)報 Socket 提供的。 [5] 青島理工大學(xué)畢業(yè)設(shè)計(論文) 13 通常,網(wǎng)絡(luò)應(yīng)用程序包含兩個獨立的應(yīng)用程序:客戶程序和服務(wù)器程序。但是,也可以設(shè)計同時完成這兩種功能的程序,例如,一些服務(wù)器程序如果不能完成一個服務(wù)請求時,它將轉(zhuǎn)而充當(dāng)客戶程序,向其它服務(wù)器程序請求信息。這方面的一個典型例子就是提供 Inter 從域名到 IP 地址映射服務(wù)的 DNS 服務(wù)器。 [6] 開發(fā)環(huán)境的選擇 根據(jù)總體設(shè)計,為使系統(tǒng)發(fā)揮最大的性能,同時也為了使系統(tǒng)具有較好的性能和高可移植性,選擇好的工具將十分重要。 系統(tǒng)開發(fā)工具的選擇 本系統(tǒng)的可視化開發(fā)選擇環(huán)境選擇了 Visual C++ [4], 我們通常所說的Visual C++實際上是一個完善的、非常強(qiáng)大的 C++程序開發(fā)環(huán)境,它的名字是 Microsoft Developer Studio 。二者之間的細(xì)小差別并不重要,通常這兩個術(shù)語可以互換。但如果你不圍繞 Developer Studio 來進(jìn)行學(xué)習(xí),就 不能有效地使用Visual C++( Developer Studio 聽起來很像 Visual Studio , 但它們之間沒有關(guān)系)。它包含: C++編譯器、調(diào)試器、應(yīng)用程序框架生成器、項目管理器、設(shè)計和實現(xiàn)菜單等資源的編輯器等 。 數(shù)據(jù)庫系統(tǒng)的選擇 要建立一個以數(shù)據(jù)庫為基礎(chǔ)的 C/S 聊天 應(yīng)用系統(tǒng),其開發(fā)主要包括后臺數(shù)據(jù)庫的建立和維護(hù)及 客戶端 的設(shè)計實現(xiàn)三個方面。對于前者要求建立起數(shù)據(jù)一致性和完整性強(qiáng)、數(shù)據(jù)安全性好的數(shù)據(jù)庫。 ( 1) 服務(wù)器 數(shù)據(jù)庫 系統(tǒng) 的選擇 MySQL 是一個小型關(guān)系型數(shù)據(jù)庫管理系統(tǒng) [14],開 發(fā)者為瑞典 MySQLAB 公司, MySQL被廣泛地應(yīng)用在 Inter 上的中小型網(wǎng)站中。由于其體積小、速度快、青島理工大學(xué)畢業(yè)設(shè)計(論文) 14 總體擁有成本低,尤其是開放源碼這一特點,許多中小型網(wǎng)站為了降低網(wǎng)站總體擁有成本而選擇了 MySQL 作為網(wǎng)站數(shù)據(jù)庫 。 本系統(tǒng)選擇了 MySQL 數(shù)據(jù)庫管理系統(tǒng),是因為 MySQL 數(shù)據(jù)庫管理系統(tǒng)在針對輕量級開發(fā)的時候,會體現(xiàn)出它易用靈活的特點,提供了可靠的安全性,又能保存較多的信息量。較之 SQL Server 數(shù)據(jù)庫管理系統(tǒng)有著更好的移植性,適合跨平臺開發(fā)和應(yīng)用。 [7] ( 2) 客戶端 數(shù)據(jù)庫 系統(tǒng) 的選擇 Berkeley DB 是由美國 Sleepycat Software 公司開發(fā)的一套開放源碼的嵌入式數(shù)據(jù)庫的程序庫( database library),它為應(yīng)用程序提供可伸縮的、高性能的、有事務(wù)保護(hù)功能的數(shù)據(jù)管理服務(wù)。 Berkeley DB 為數(shù)據(jù)的存取和管理提供了一組簡潔的函數(shù)調(diào)用 API 接口。 客戶端之所以選擇 Berkeley DB 是因為客戶端需要對好友資料及其聊天記錄進(jìn)行管理,而 Berkeley DB 具有的主要特點正符合各方面的要求。 它是一個經(jīng)典的 Clibrary 模式的 toolkit,為程序員提供廣泛豐富的函數(shù)集,是為應(yīng) 用程序開發(fā)者提供工業(yè)級強(qiáng)度的數(shù)據(jù)庫服務(wù)而設(shè)計的。其主要特點如下: (1) 嵌入式( Embedded):它直接鏈接到應(yīng)用程序中,與應(yīng)用程序運行于同樣的地址空間中,因此,無論是在網(wǎng)絡(luò)上不同計算機(jī)之間還是在同一臺計算機(jī)的不同進(jìn)程之間,數(shù)據(jù)庫操作并不要求進(jìn)程間通訊。 (2) 輕便靈活( Portable):它可以運行于幾乎所有的 UNIX 和 Linux 系統(tǒng)及其變種系統(tǒng)、 Windows 操作系統(tǒng)以及多種嵌入式實時操作系統(tǒng)之下。一旦 Berkeley DB被鏈接到應(yīng)用程序中,終端用戶一般根本感覺不到有一個數(shù)據(jù)庫系統(tǒng)存在。 (3) 可伸縮( Scalable): Database library 本身是很精簡的(少于 300KB 的文本空間),但它能夠管理規(guī)模高達(dá) 256TB 的數(shù)據(jù)庫。它支持高并發(fā)度,成千上萬個用戶可同時操縱同一個數(shù)據(jù)庫。 青島理工大學(xué)畢業(yè)設(shè)計(論文) 15 技術(shù)選取及搭配 本聊天系統(tǒng)將采用 C/S ( Client/Server) 結(jié)構(gòu),即客戶機(jī)和服務(wù)器結(jié)構(gòu)。通過 C/S 結(jié)構(gòu)可以充分利用兩端硬件環(huán)境的優(yōu)勢,將任務(wù)合理分配到 Client 端和Server 端來實現(xiàn),降低了系統(tǒng)的通訊開銷,傳統(tǒng)的兩層客戶 /服務(wù)器模式比較適合于小規(guī)模、用戶較少、單一數(shù)據(jù)庫且在安全、快速的網(wǎng)絡(luò)環(huán)境下 (例如局域網(wǎng) )運行 [6]。其特點如下 : ( 1)采用 Intra 技術(shù),適用于局域網(wǎng)環(huán)境,可連接的用戶數(shù)有限,當(dāng)用戶數(shù)量增多時,性能會明顯下降 。 ( 2)每個客戶端都要安裝應(yīng)用程序,部署復(fù)雜 。 ( 3)代碼可重用性差 。 ( 4) 開發(fā)費用較低,開發(fā)周期較短。 數(shù)據(jù)庫的設(shè)計 根據(jù)上述的原理,欲實現(xiàn)權(quán)限管理,必須設(shè)計好數(shù)據(jù)庫,根據(jù)需求分析的要求,現(xiàn)設(shè)計數(shù)據(jù)庫如下: ( 1)用戶基本信息表( basic_tbl):存儲用戶的基本信息。 序號 字段名 數(shù)據(jù)類型 長度 允許為空 是否主鍵 說明 1 uin Int 10 否 是 用戶 id 2 passwd Char 16 否 否 用戶密碼 3 pic TinyInt 3 否 否 頭像索引 4 nick Char 16 是 否 用戶昵稱 5 age TinyInt 3 是 否 年齡 6 gender TinyInt 3 是 否 性別 7 country Char 16 是 否 國家 8 province Char 16 是 否 省份 9 city Char 20 是 否 城市 青島理工大學(xué)畢業(yè)設(shè)計(論文) 16 10 Char 30 是 否 Email 表 ( basic_tbl) ( 2) 用戶擴(kuò)展信息表( ext_tbl):存儲用戶的擴(kuò)展信息。 序號 字段名 數(shù)據(jù)類型 長度 允許為空 是否為主鍵 說明 1 uin Int 10 否 是 用戶 id 2 address Char 64 是 否 地址 3 zipcode Char 16 是 否 郵編 4 tel Char 32 是 否 電話 5 name Char 32 是 否 姓名 6 blood TinyInt 3 是 否 血型 7 college Char 64 是 否 大 學(xué) 8 profession Char 16 是 否 職業(yè) 9 homepage Char 64 是 否 個人主頁 10 intro TinyText 是 否 自我介紹 表 用戶擴(kuò)展信息表( ext_tbl) ( 3) 好友關(guān)系表( friend_tbl):存儲用戶之間關(guān)系。 序號 字段名 數(shù)據(jù)類型 長度 允許為空 是否為主鍵 說明 1 uin1 Int 10 否 否 用戶 1 2 uin2 Int 10 否 否 用戶 2 表 好友關(guān)系表( friend_tbl) 青島理工大學(xué)畢業(yè)設(shè)計(論文) 17 ( 4)離線 消息轉(zhuǎn)發(fā)表( message_tbl):存儲離線消息。 序號 字段名 數(shù)據(jù)類型 長度 允許為空 是否為主鍵 說明 1 dst Int 10 否 否 接收 id 2 src Int 10 否 否 發(fā)送 id 3 type TinyInt 3 否 否 消息類型 4 time Int 10 否 否 發(fā)送時間 5 msg TinyText 是 否 消息內(nèi)容 表 離線消息轉(zhuǎn)發(fā)表( message_tbl) 青島理工大學(xué)畢業(yè)設(shè)計(論文) 18 第 4 章 系統(tǒng)詳細(xì)設(shè)計及實現(xiàn) 采用客戶端 —— 服務(wù)器模型 ,使用封裝的 UdpSession 類進(jìn)行實現(xiàn) 底層通訊,底層利用 UDP 數(shù)據(jù)報協(xié)議進(jìn)行通訊,這樣,便于客戶端之間的直接通訊,也可以高效的傳送消息。因為使用 UDP 協(xié)議進(jìn)行通訊,所以要自己控制其可靠性。每發(fā)送一個數(shù)據(jù),接受方接受到數(shù)據(jù)后,會發(fā)回一個響應(yīng)信息,發(fā)送方在一個超時時間內(nèi),收到響應(yīng)信息,就表示發(fā)送數(shù)據(jù)成功,若沒有收到,就表示發(fā)送失敗,會按用戶指定的次數(shù) N,重試 N次,如果 N 次都失敗,就返回發(fā)送數(shù)據(jù)失敗。當(dāng)然,發(fā)回來的確認(rèn)信息也可能丟失,但確認(rèn)信息很短,相對來說,丟失的機(jī)率會小一些。 為了保存用戶信息和好友信息及一些相關(guān)數(shù)據(jù),服務(wù)器使用到數(shù)據(jù)庫技術(shù)。服務(wù) 器的數(shù)據(jù)庫采用的是 MySQL 數(shù)據(jù)庫,服務(wù)器訪問數(shù)據(jù)庫,用的是封裝在UdpSession 中的相應(yīng)方法,因為,對數(shù)據(jù)庫的操作簡單,服務(wù)器端為后臺運行,著重的是功能和穩(wěn)定性,不需繁瑣的界面,所以界面的設(shè)計上只提供了簡單的日志顯示列表和服務(wù)器運行控制工具欄。而對數(shù)據(jù)庫的操作上,基本上都是對表的簡單操作,所以使用 Sql 語句直接訪問數(shù)據(jù)庫,已經(jīng)足夠滿足要求了。 服務(wù)端運行后,開啟服務(wù),則服務(wù)器開始偵聽用戶請求,如有信息發(fā)送過來,首先,發(fā)送回確認(rèn)信息,然后,處理接收到的數(shù)據(jù)。按照接受 到數(shù)據(jù)的類別,進(jìn)行相應(yīng)的處理,如有需要,會向用戶發(fā)送處理的結(jié)果,或成功或失敗的消息,處理結(jié)束后,關(guān)閉與客戶端的連接。這樣,可以實時接受每個用戶的請求,不會因為處理一個用戶的請求,而忽略了其它用戶。 服務(wù)器端主要是為用戶存儲必要的信息,協(xié)調(diào)用戶之間的通訊,服務(wù)器端的設(shè)計,主要在功能上面。服務(wù)器端的設(shè)計和底層通訊的方法,將是服務(wù)器端的重青島理工大學(xué)畢業(yè)設(shè)計(論文) 19 點。服務(wù)器端用戶界面如圖 所示。 圖 服務(wù)器端用戶界面 服務(wù)器端的構(gòu)成 類名稱 說明 CIcqServerApp 應(yīng) 用程序類 CIcqServerDlg 主界面類 CAboutDlg 關(guān)于對話框類 CServerLog 服務(wù)器日志類,用于顯示,保存日志 UdpSession 服務(wù)器 UDP 通訊類,為服務(wù)器端核心部分 青島理工大學(xué)畢業(yè)設(shè)計(論文) 20 UdpInPacket UPD 接收封包類 UdpOutPacket UPD 發(fā)送封包類 UDP_HEADER UPD 包頭結(jié)構(gòu)體 SessionHash HASH 類 IcqPacket 數(shù)據(jù)包類 IcqList 雙向鏈表類 IcqListItem 鏈表節(jié)點類 BROADCAST_MSG 廣播 消息結(jié)構(gòu)體 服務(wù)器端的主要功能實現(xiàn) UdpSession 類為服務(wù)器端的核心部分,負(fù)責(zé)管理數(shù)據(jù)和客戶端通信 [8],其聲明為: class UdpSession { friend class SessionHash。 public: UdpSession()。 ~UdpSession()。 接收數(shù)據(jù) bool onReceive(UdpInPacket amp。)。 初始化連接 static bool initialize()。 銷毀并且釋放資源 static void cleanUp()。 接收數(shù)據(jù) static bool onReceive()。 檢查發(fā)送數(shù)據(jù)的隊列 static time_t checkSendQueue()。 檢查連接是否還存活 static time_t checkKeepAlive()。 青島理工大學(xué)畢業(yè)設(shè)計(論文) 21 發(fā)送消息 static inline void sendMessage(uint8 type, uint32 dst, uint32 src, UdpSession *dstSession, time_t when, const char *text)。 廣播消息 static void broadcastMessages()。 private: 直接發(fā)送 UPD數(shù)據(jù)包 void sendDirect(UdpOutPacket *p) 。 創(chuàng)建數(shù)據(jù)包 void createPacket(UdpOutPacket amp。out, uint16 cmd, uint16 ackSeq)。 UdpOutPacket *createPacket(uint16 cmd, uint16 ackSeq = 0)。 發(fā)送數(shù)據(jù)包 voi
點擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1