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

正文內(nèi)容

畢業(yè)設(shè)計_聊天系統(tǒng)的服務(wù)端的設(shè)計與實現(xiàn)-資料下載頁

2024-12-01 20:32本頁面

【導(dǎo)讀】evaluationofscientificdevelopment.Naturesecuritytype--naturesecurityistomaintenancepeopleofhealthvaluefortarget,throughstrengtheningsecuritybasedmanagement,andriskmanagement,andequipmentmanagementandtechnologysupervision,ensureproductioninthepeople,andreal,andsystem,andsystem,elementssecurityreliable,andharmonyunified,fulcontrolvariousagainstfactors,achievedthoughtnoslack,andmanagementnoemptydocum

  

【正文】 需知道輸入什么和輸出什么,而對類內(nèi)部進(jìn)行什么操作不必追究。封裝還使得一個對象可以像一個部件一樣用在各種程序中,而不用擔(dān)心對象的功能受到影響。 : 在面向?qū)ο蟮恼Z言中,可以從一個類派生另一個類。派生類(也稱之為子類)繼承了其父類和祖先類的數(shù)據(jù)成員和成員函數(shù)。派生類代表父類的一種改良,因為增加了新的屬性和新的操作。派生類一般通過聲明新的數(shù)據(jù)成員和成員函數(shù)來增加新的功能。另外,派生類在繼承的成開發(fā)工具以及技術(shù)介紹 第 4 頁 共 43 頁 員函數(shù)不合適時也可以棄之不用。 MFC MFC 微軟基礎(chǔ)類 (Microsoft Foundation Classes),實際上是微軟提供的 ,用于在 C++環(huán)境下編寫應(yīng)用程序的一個框架和引擎,其擁有的 所有類 庫 形成了建立應(yīng)用程序的框架 。 它具有以下特點。 :構(gòu)成 MFC 框架的是 MFC 類庫。 MFC 類庫是 c++類庫。這些類或者封裝了 Win32 應(yīng)用程序編程接口,或者封裝了應(yīng)用程序的概念,或者封裝了 OLE 特性,或者封裝了 ODBC 和 DAO 數(shù)據(jù)訪問功能。 : MFC 抽象出眾多類的共同特性,設(shè)計出一些基類作為實習(xí)其他類的基礎(chǔ)。在這些類中最重要的就是 CObject 和 CCmdTarget。CObject 是 MFC 的根類,絕大多數(shù) MFC 類是其派生的,它實現(xiàn)一些重要特性,包括動態(tài)類信息、動態(tài)創(chuàng)建、對象序列化、對程序調(diào)試的支持等。所有從 CObject 派生的類都具備或者可以具備 CObject 所擁有的特性。CCmdTarget 通過封裝一些屬性和方法,提供了消息處理的架構(gòu)。 MFC 中,任何可以處理消息的類都從 CCmdTarget 派生。針對每種不同的對象,MFC 都設(shè)計了一組類對這些對象進(jìn)行封裝,每一組類都有一個基類,從基類派生出眾多更具體的類。這些對象包括以下種類 :窗口對象,基類是 CWnd。應(yīng)用程序?qū)ο螅愂?CwniThraed。文檔對象,基類是Cdoeument,等等。程序員將結(jié)合自己的實際,從適當(dāng)?shù)?MFC 類中派生出自己的類,實現(xiàn)特定的功能,達(dá)到自己的編程目的。 TCP/IP 協(xié)議 TCP 協(xié)議介紹 TCP( Transmission Control Protocol) 傳輸控制協(xié)議 TCP 是一種面向連接(連接導(dǎo)向)的、可靠的、基于字節(jié)流的運(yùn)輸層( Transport layer)通信協(xié)議 ,在簡化的計算機(jī)網(wǎng)絡(luò) OSI 模型中,它完成第四層傳輸層所指定的功能。在因特網(wǎng)協(xié)議族( Inter protocol suite)中,TCP 層是位于 IP 層之上,應(yīng)用層之下的中間層。不同主機(jī)的應(yīng)用層之間經(jīng)常需要可靠的、像管道一樣的連接,但是 IP 層不提供這樣的流機(jī)制,而是提供不可靠的包交換。 TCP 所提供服務(wù)的主要特點 : (1)面向連接的傳輸; (2)端到端的通信; (3)高可靠性,確保傳輸數(shù)據(jù)的正確性,不出現(xiàn)丟失或亂序; (4)全雙工方式傳輸; (5)采用字節(jié)流方式,即以字節(jié)為單位傳輸字節(jié)序列; (6)緊急數(shù)據(jù)傳送功能 聊天系統(tǒng)服務(wù)端的設(shè)計與實現(xiàn) 第 5 頁 共 43 頁 TCP 連接的建立 TCP 協(xié)議通過三個報文段完成連接的建立,這個過程稱 為三次握手(threeway handshake),過程如下圖所示,其中 isn 為初始序號。 TCP 連接的終止 建立一個連接需要三次握手,而終止一個連接要經(jīng)過四次握手,這是由 TCP 的半關(guān)閉 (halfclose)造成的。具體過程如下圖所示。 TCP 提供可靠性的方式 應(yīng)用數(shù)據(jù)被分割成 TCP 認(rèn)為最適合發(fā)送的數(shù)據(jù)塊。這和 UDP 完全不同,應(yīng)用程序產(chǎn)生的數(shù)據(jù)報長度將保持不變。由 TCP 傳遞給 IP 的信息單位稱為報文段或段( segment) TCP 如何確定報文段的長度。 TCP 的建立 TCP 連接的終止 開發(fā)工具以及技術(shù)介紹 第 6 頁 共 43 頁 當(dāng) TCP 發(fā)出一個段后,它 啟動一個定時器,等待目的端確認(rèn)收到這個報文段。如果不能及時收到一個確認(rèn),將重發(fā)這個報文段。 當(dāng) TCP 收到發(fā)自 TCP 連接另一端的數(shù)據(jù),它將發(fā)送一個確認(rèn)。這個確認(rèn)不是立即發(fā)送,通常將推遲幾分之一秒。 TCP 將保持它首部和數(shù)據(jù)的檢驗和。這是一個端到端的檢驗和,目的是檢測數(shù)據(jù)在傳輸過程中的任何變化。 如果收到段的檢驗和有差錯, TCP 將丟棄這個報文段和不確認(rèn)收到此報文段(希望發(fā)端超時并重發(fā))。既然 TCP 報文段作為 IP 數(shù)據(jù)報來傳輸,而 IP 數(shù)據(jù)報的到達(dá)可能會失序,因此 TCP 報文段的到達(dá)也可能會失序。 如果必要, TCP 將對 收到的數(shù)據(jù)進(jìn)行重新排序,將收到的數(shù)據(jù)以正確的順序交給應(yīng)用層。既然 IP 數(shù)據(jù)報會發(fā)生重復(fù), TCP 的接收端必須丟棄重復(fù)的數(shù)據(jù)。 TCP 還能提供流量控制。 TCP 連接的每一方都有固定大小的緩沖空間。 TCP 的接收端只允許另一端發(fā)送接收端緩沖區(qū)所能接納的數(shù)據(jù)。這將防止較快主機(jī)致使較慢主機(jī)的緩沖區(qū)溢出。 C/S 模式 及 SOCKET C/S 模式 C/S( client/server)模式 。它是軟件系統(tǒng)體系結(jié)構(gòu),通過 Client 端和 Server端的 分配 完成指定 任務(wù) 。 C/S 模式也 是當(dāng)前數(shù)據(jù)庫應(yīng)用程序中 很 流行的一種 方式。尤其是網(wǎng)絡(luò)技術(shù)的發(fā)展 ,使得當(dāng)前很多系統(tǒng)都采用這種方式進(jìn)行構(gòu)造 ,其最大的優(yōu)點是將計算機(jī)工作任務(wù)分別由客戶端和服務(wù)器端來共同完成 ,這樣有利于充分合理的利用系統(tǒng)資源。另外它的服務(wù)器端還可以將信息集中起來,任何客戶機(jī)都可以通過訪問服務(wù)器而獲得所需的信息。 Client/Server 模型最終可歸結(jié)為一種“請求 /應(yīng)答 ”關(guān)系。一個請求總是首先被客戶發(fā)出 ,然后服務(wù)器總是被動地接收請求 ,返回客戶需要的結(jié)果。在客戶發(fā)出一個請求之前 ,服務(wù)進(jìn)程一直處于休眠狀態(tài)。一個客戶提出請求后 ,服務(wù)進(jìn)程被 “喚醒 ”并且為客戶提供服務(wù) ,對客戶的 請求做出所需要的應(yīng)答, 如圖所示。 聊天系統(tǒng)服務(wù)端的設(shè)計與實現(xiàn) 第 7 頁 共 43 頁 P2P P2P 作為一種點對點通訊 模型,它有別于傳統(tǒng)的 c/s 模型。 傳統(tǒng)的c/s 模型一般都有預(yù)定義的客戶機(jī)和服務(wù)器。而在 P2P 模型轉(zhuǎn)并沒有明確的客戶端和服務(wù)器,但其實在 P2P 模型中,每一臺計算機(jī)既可以看成是服務(wù)器,也可以看成是客戶機(jī)。在網(wǎng)絡(luò)中,傳統(tǒng)上的客戶機(jī) /服務(wù)器通訊模型中,發(fā)送服務(wù)請求或者發(fā)送數(shù)據(jù)的計算機(jī),一般稱為客戶機(jī);而接收、處理服務(wù)或接收數(shù)據(jù)的計算機(jī)稱為服務(wù)器。而在 P2P 網(wǎng)絡(luò)模型中,計算機(jī)不僅接收數(shù) 據(jù),還有發(fā)送數(shù)據(jù),不僅提出服務(wù)請求,還有接收對方的服務(wù)請求。 SOCKET —— socket() 功能:使用前創(chuàng)建一個新的套接字 —— bind() 功能:將套接字地址與所創(chuàng)建的套接字號聯(lián)系起來。 地址結(jié)構(gòu)說明: struct sockaddr_in { 客戶端 服務(wù)端 C/S 模式示意圖 通信 客戶端 A 客戶端 A 點對點通信 開發(fā)工具以及技術(shù)介紹 第 8 頁 共 43 頁 short sin_family。//AF_INET u_short sin_port。//16 位端口號,網(wǎng)絡(luò)字節(jié)順序 struct in_addr sin_addr。//32 位 IP 地址,網(wǎng)絡(luò)字節(jié)順序 char sin_zero[8]。 //保留 } —— connect()和 accept() 功能:共同完成連接工作 。 —— listen() 功能:用于面向連接服務(wù)器,表明它愿意接收連接。 —— send()與 recv() 功能:數(shù)據(jù)的發(fā)送與接收 。 參數(shù): buf:指向存有傳輸數(shù)據(jù)的緩沖區(qū)的指針。 —— select() 功能:用來檢測一個或多個套接字狀態(tài)。 —— closesocket() 功 能:關(guān)閉套接字 。 SOCKET 的建立 建立流程圖如圖所示為: 無連接套接口應(yīng)用程序流程圖 無套接口應(yīng)用程序流程 聊天系統(tǒng)服務(wù)端的設(shè)計與實現(xiàn) 第 9 頁 共 43 頁 面向連接套接口應(yīng)用程序流程圖: 實時消息傳送 服務(wù)端的創(chuàng)建 : 用 Socket()函數(shù)來創(chuàng)建一個在通信中使用的套接字 ,然后調(diào)用bind(),將套接字描述符和一個指針傳遞給一個地址結(jié)構(gòu),同時也傳遞地址結(jié)構(gòu)的長度。我們已經(jīng)創(chuàng)建了套接字,并且賦給了它一個地址,現(xiàn)在我們需要有一種方法來建立和客戶端的連接,為了做到這一點我們要使用 listen()函數(shù),它告訴套接字開始偵聽客戶端的連接請求 。一旦將套接字設(shè)置成了偵聽連接,實際的連接就可以由 accept()函數(shù)來完成。如果連接被成功地接收, accept()函數(shù)將返回一個新的套接字的描述符,這個新的套接字將用來處理新的連接;如果這里出現(xiàn)了一個錯誤,accept()函數(shù)將返回 INVALID_SOCKOET,這時我們需要調(diào)用WSAGetLastError()以得到更多的有關(guān)錯誤的細(xì)節(jié)。原來的套接字將繼續(xù)偵聽新的連接請求,而新請求可能會通過 accept()函數(shù)的再一次調(diào)用而獲得接受。 客戶端的創(chuàng)建 : 面向連接套接口應(yīng)用程序流程圖 面向連接套接口應(yīng)用程序流程圖 開發(fā)工具以及技術(shù)介紹 第 10 頁 共 43 頁 客戶端的創(chuàng)建比較簡單,首先創(chuàng)建一個空的套接字,然后調(diào) 用connect()函數(shù)向服務(wù)端發(fā)起一個請求,但是我們必須有服務(wù)端的 IP,不然我們就無法進(jìn)行連接,完成這些后我們就可以進(jìn)行和服務(wù)端的通信。 ADO 數(shù)據(jù)庫編程 ADO 相關(guān)介紹 ADO(Active Data Object,活動數(shù)據(jù)對象 )實際上是一種基于 COM(組件對象模型 )的自動化接口 (IDispatch)技術(shù),并以 OLE DB(對象連接和鑲?cè)氲臄?shù)據(jù)庫 )為基礎(chǔ),經(jīng)過 OLE DB 精心包裝后的數(shù)據(jù)庫訪問技術(shù),利用它可以快速的創(chuàng)建數(shù)據(jù)庫應(yīng)用程序。 ADO 提供了一組非常簡單,將一般通用的數(shù)據(jù)訪問細(xì) 節(jié)進(jìn)行封裝的對象。由于 ODBC 數(shù)據(jù)源也提供了一般 的 OLE DB Privider,所 以 ADO 不僅 可以 應(yīng)用 自身 的 OLE DB Privider,而且還可以應(yīng)用所有的 ODBC 驅(qū)動程序。 ADO 操作 Access 數(shù)據(jù)庫 首先,要用 import 語句來引用支持 ADO 的組件類型庫 (*.tlb),其中類型庫可以作為可執(zhí)行程序 (DLL、 EXE 等 )的一部分被定位在其自身程序中的附屬資源里,其中路徑名可以根據(jù)自己系統(tǒng)安裝的 ADO 支持文件的路徑來自行設(shè)定。當(dāng)編譯器遇到 import 語句時,它會為引用組件類型庫中的接口 生成包裝類, import 語句實際上相當(dāng)于執(zhí)行了 API 涵數(shù)LoadTypeLib()。 import 語句會在工程可執(zhí)行程序輸出目錄中產(chǎn)生兩個文件,分別為 *.tlh(類型庫頭文件 )及 *.tli(類型庫實現(xiàn)文件 ),它們分別為每一個接口產(chǎn)生智能指針,并為各種接口方法、枚舉類型, CLSID等進(jìn)行聲明,創(chuàng)建一系列包裝方法。語句 no_namespace 說明 ADO 對象不使用命名空間, rename (EOF, adoEOF)說明將 ADO 中結(jié)束標(biāo)志 EOF改為 adoEOF,以避免和其它庫中命名相沖突。 其次,在 程 序 初 始 過 程 中 需 要 初 始 化 組 件 , 一 般 可 以 用CoInitialize(NULL)。來實現(xiàn),這種方法在結(jié)束時要關(guān)閉初始化的 COM,可以用下面語句 CoUnInitialize()。來實現(xiàn)。在 MFC 中還可以采用另一種方法來實現(xiàn)初始化 COM,這種方法只需要一條語句便可以自動為我們實現(xiàn)初始化 COM 和 結(jié) 束 時 關(guān) 閉 COM 的 操 作 , 語 句 如 下 所 示 : AfxOleInit()。 接著,就可以直接使用 ADO 的操作了。我們經(jīng)常使用的只是前面用import 語句引用類型庫時,生成的包裝類 .tlh 中聲明的智能指針中的三個,它們分別是 _ConnectionPtr、 _RecordsetPtr 和 _CommandPtr。 ADO 數(shù)據(jù)庫操作有 3 個智能指針: _ConnectionPtr 智能指針,通常用于打開、關(guān)閉一個庫連接或用它的 Execute 方 法 來 執(zhí) 行 一 個 不 返 回 結(jié) 果 的 命 令 語 句 (用法和_CommandPtr 中的 Execute 方法類似。 聊天系統(tǒng)服務(wù)端的設(shè)計與實現(xiàn) 第 11 頁 共 43 頁 _RecordsetPtr 智能指針,可以用來打開庫內(nèi)數(shù)據(jù)表,并可以對表內(nèi)的記錄、字段等進(jìn)行各種操作。 CommandPtr 智能指針,可以使用 _ConnectionPtr或 _RecordsetPtr來執(zhí)行任 務(wù),定義輸出參數(shù),執(zhí)行存儲過程或 SQL 語句。 系統(tǒng)設(shè)計 第 12 頁 共 43 頁 第 三 章 系統(tǒng)設(shè)計 整體設(shè)計 消息響應(yīng)的設(shè)計 注冊信息的目的是添加新的用戶名, 在接到注冊請求的時候,客戶端會向數(shù)據(jù)庫發(fā)送一個插入操作的請求,在驗證用戶名可用的情況下,就可以執(zhí)行插入操作,這樣就可以添加新的記錄集。從而實現(xiàn)注冊的消息響應(yīng) 的實現(xiàn) 登陸實際上就是一個查詢數(shù)據(jù)庫的操作,當(dāng)服務(wù)端接收到客戶端發(fā)來的登陸請求時,服務(wù)端會通過查詢數(shù)據(jù)庫來驗證登錄信息的合法性,如果賬號密碼都正確的話,就會提示登陸成功,否者登錄失敗。 整體設(shè)計 開啟服務(wù)器 響應(yīng)消息請求 結(jié)束 等待消息 請求 客戶端 服務(wù)端 數(shù)據(jù)庫 注冊消息的響應(yīng) 聊天系統(tǒng)服務(wù)端的設(shè)計與實現(xiàn) 第 13 頁 共 43 頁 當(dāng)服務(wù)端接到文件傳送請求時,服務(wù)端會向目標(biāo)客戶端發(fā)送文件傳送請求,然后如果 目標(biāo)客戶端同意了請求的話,兩個客戶端就可以實現(xiàn)點對點文件傳送了,這就是文件傳送消息的響應(yīng)。 在本程序中,消息是通過轉(zhuǎn)發(fā)的形式來發(fā)送的。這是為了便于服務(wù)端來提取聊天記錄。此處的群聊,就是服務(wù)端在接到請求之后,會將要傳送的消息循環(huán)發(fā)送現(xiàn)有客戶端數(shù)的次數(shù),已達(dá)到群聊的目的。 私聊就是客戶端單獨(dú)給目標(biāo)客戶端發(fā)送消息, 當(dāng)客戶端向服務(wù)端發(fā)出了私聊請求時,服務(wù)端會將消息直接傳送給目標(biāo)客戶端。 請求 客戶端 服務(wù)端 數(shù)據(jù)庫 登陸 消息的響應(yīng) 文件傳送消息的響應(yīng) 客戶端 A 服務(wù)端 客戶端 B 群聊的實現(xiàn) 客戶端 A 客戶端 A 所有人 系統(tǒng)設(shè)計 第 14 頁 共 43 頁 當(dāng)服務(wù)端接到語音聊天請求時,服務(wù)端會向目標(biāo)客戶端 發(fā)送語音聊天請求,然后如果目標(biāo)客戶端同意了請求并摁下語音聊天按鈕的話,兩個客戶端就可以實現(xiàn)語音聊天了。 當(dāng)服務(wù)端接到的是查詢聊天系統(tǒng)或是好友資料的消息時,會向數(shù)據(jù)庫發(fā)送查詢操作的請求,查到之后,會將記錄集賦值給 字段,返回給客戶端,這樣就實現(xiàn)了查詢聊天記錄消息的響應(yīng) 請求 客戶端 服務(wù)端 數(shù)據(jù)庫 注冊消息的響應(yīng) 語音聊天 消息的響應(yīng) 請求 請求 客戶端 A 服務(wù)端 客戶端 B 私聊 的實現(xiàn) 客戶端 A 客戶端 A 客戶端 B 聊天系統(tǒng)服務(wù)端的設(shè)計與實現(xiàn) 第 15 頁 共 43 頁 第 四 章 數(shù)據(jù)庫功能具體設(shè)計 數(shù)據(jù)庫 的建立 數(shù)據(jù)庫的 建立 打開 Access,建立名為 的數(shù)據(jù)庫,其中包括 clientsql 和 ltjl 兩張表格, clientsql 表格成員有: 昵稱 ,年齡 ,性別 ,密碼 ,真實姓名 ,星座 ,血型 ,生肖 ,手機(jī) 。 定義昵稱為文本型,年齡為整數(shù)型,性別為文本型,密碼為文本型,手機(jī)號為數(shù)字型,其他的為文本型。定義為 clientsql 表 ,然后再建立 ltjl 表格,加入系統(tǒng)時間為時間, username 為文本型,并加入一個文本型變量用于記錄聊天內(nèi)容,建成的表格如下圖所示 : 建立表格 ,其中有成員 系統(tǒng)時間,會話雙方和會話內(nèi)容如下: 數(shù)據(jù)庫的操作 在做這些工作之前,我們需要 添加一個指向 Connection 對象的指針 : _ConnectionPtr m_pConnection。同時我們好需要 一個指向 Recordset 對象的指針 : Clientspl 表示意 Ltjl 表 示意 數(shù)據(jù)庫具體設(shè)計 第 16 頁 共 43 頁 _RecordsetPtr m_pRecordset。那么在初始化 OLE/COM 環(huán)境之后,就可以 連接上 指定的目錄下的數(shù)據(jù)庫了。 在本任務(wù)中,我需要數(shù)據(jù)庫能夠完成查詢以及其他的一些讀入讀出和修改等等任務(wù),在 中加入 _RecordsetPtramp。 GetRecordSet(_bstr_t bstrSQL)。和BOOL ExecuteSQL(_bstr_t bstrSQL)。以下分別為在 中為這兩個函數(shù)加的響應(yīng)。 ( 1) _RecordsetPtramp。 ADOConn::GetRecordSet(_bstr_t bstrSQL) {
點擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1