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

正文內(nèi)容

基于vc++socket的多線程網(wǎng)絡(luò)聊天系統(tǒng)開發(fā)與設(shè)計(jì)-全文預(yù)覽

2024-12-08 03:24 上一頁面

下一頁面
  

【正文】 的 連 接接 受 并 驗(yàn) 證 信 息 返 回 驗(yàn) 證 信 息定 時(shí) 發(fā) 送 信 息 以確 認(rèn) 自 己 在 線等 待 接 收 客 戶 端 在線 信 息 , 維 護(hù) 在 線用 戶 列 表接 收 在 線 用 戶 列表 并 更 新發(fā) 送 在 線 用 戶 列 表等 待 客 戶 端 信 息或 向 目 的 地 i p 發(fā)送 信 息i n i t i a l i z eS e v i pC h e c k在線用戶列表 圖 客戶端與服務(wù)器端的信息交換流程圖 在本系統(tǒng)中,整個(gè)系統(tǒng)主要分為服務(wù)器端和客戶端,服務(wù)器端最重要的作用就是相當(dāng)于一個(gè)橋梁,既與系統(tǒng)數(shù)據(jù)庫相連接,又與各個(gè)客戶端相連接;而客戶端則具有雙重身份,其不但具有客戶端 本身的作用,而且還可以作為服務(wù)器端,以實(shí)現(xiàn)多點(diǎn)通信的作用。 基于 VC++ Socket 的多線程網(wǎng)絡(luò)聊天系統(tǒng)開發(fā)與設(shè)計(jì) 21 然后客戶端啟動(dòng)定時(shí) 器 ,定時(shí)發(fā)送信息到服務(wù)器,以告知服務(wù)器自己在線,然后服務(wù)器返回在線用戶列表,服務(wù)器依靠客戶端發(fā)送的信息來更新維護(hù)在線用戶列表。假定我是 1000 這個(gè)用戶, 1001 已經(jīng)連接到我的機(jī)器,并和我聊天,這時(shí)如果我還想和 1002 聊天,就開啟第 5 個(gè)線程發(fā)送 “ chat 1000\t\n” 到 1002的信息服務(wù)器端(端口 4001,每個(gè) msg 客戶端都有信息服務(wù)器端),如果還想和 1003 聊天,就開啟第 6 個(gè)線程發(fā)送命令 “ chat 1000\t\n” 到 1003 的信息服務(wù)器端請求連接,這樣每個(gè)客戶端都可以實(shí)現(xiàn)多點(diǎn)通訊。如果接收到連接就開啟第三個(gè)線程接受對(duì)方的信息。以下 1000 表示 id(即 ) 號(hào),發(fā)送 “ USER 1000” 和 ” PASS password” 命令要求登陸服務(wù)器。因?yàn)榉?wù)器任何時(shí)候都可能發(fā)送信息到客戶端,因此,客戶端和服務(wù)器一旦建立連接,必須能讓服務(wù)器在以后發(fā)送中尋找定位到這個(gè)連接 ,這是整個(gè)系統(tǒng)實(shí)現(xiàn)過程中非常重要的一個(gè)環(huán)節(jié) 在本系統(tǒng)中,信息的交流主要出現(xiàn)在客戶端與服務(wù) 器端、客戶端和客戶端,本系統(tǒng)具體的通信流圖如圖 所示: 基于 VC++ Socket 的多線程網(wǎng)絡(luò)聊天系統(tǒng)開發(fā)與設(shè)計(jì) 20 圖 通過注冊來獲得用戶號(hào)碼。 在 基于 Socket 的聊天系統(tǒng) 中, 客戶端和服務(wù)器必須保持隨時(shí)隨地的連接。 用戶信息的實(shí)體 ER 圖如圖 所示: 局域網(wǎng)聊天系統(tǒng) 服務(wù)器 客戶端 獲取用戶列表 保存用戶信息 實(shí)現(xiàn) 文字傳送 查看好友信息 用戶注冊登陸 用戶 修改信息 實(shí)現(xiàn) 文件傳輸 刪 除 聊 天 記錄 基于 VC++ Socket 的多線程網(wǎng)絡(luò)聊天系統(tǒng)開發(fā)與設(shè)計(jì) 16 圖 用戶信息的實(shí)體 ER圖 好友關(guān)系信息的實(shí)體 ER 圖如圖 所示: 圖 好友關(guān)系信息的實(shí)體 ER圖 群組關(guān)系信息的實(shí)體 ER 圖如圖 所示: 圖 群關(guān)系信息的實(shí)體 ER圖 系統(tǒng)具有以上描述的三個(gè)數(shù)據(jù)實(shí)體,各實(shí)體之間的實(shí)體關(guān)系如圖 所示: 群 群組人數(shù) 群組編號(hào) 群所屬者 群組名稱 好 友 群組 編號(hào) 用戶 號(hào)碼 好友關(guān)系編號(hào) 好友 號(hào)碼 用 戶 用戶 號(hào)碼 用戶昵稱 登陸密碼 基于 VC++ Socket 的多線程網(wǎng)絡(luò)聊天系統(tǒng)開發(fā)與設(shè)計(jì) 17 圖 ER圖 本數(shù)據(jù)庫中包含三個(gè)表,用戶信息表 (UserInf),群組信息表 (GroupInf),好友關(guān)系信息表 (FriendList),三個(gè)表的具體描述如下表 所示: 表 聊天系統(tǒng)數(shù)據(jù)庫設(shè)計(jì)表 表名稱: UserInf 用途:保存用戶基本信息 主鍵: cNum 字段 類型 描述 空 說明 cUserName char(10) 用戶昵稱 Y 如: caro cNum char(8) 用戶 號(hào)碼 自動(dòng)增加 vcQuserPwd char(50) 登錄密碼 表名稱: GroupInf 用途:保存群組信息 主鍵: iGroupId 字段 類型 描述 空 說明 iGroupId int(4) 群組編號(hào) cGroupName char(10) 群組名稱 如:我的好友 GroupOwner char(8) 群組所屬者 用 戶 群組編號(hào) 用戶QQ號(hào)碼 群 好友關(guān)系 成員關(guān)系 m n 1 1 基于 VC++ Socket 的多線程網(wǎng)絡(luò)聊天系統(tǒng)開發(fā)與設(shè)計(jì) 18 表 (續(xù)) 表名稱: FriendList 用途:保存好友關(guān)系 主鍵: iFriendId 字段 類型 描述 空 說明 cNum char(8) 用戶 號(hào)碼 自動(dòng)增加 cFriendNum char(8) 好友 號(hào)碼 iGroupId int(4) 群組編號(hào) iFriendId int(4) 好友關(guān)系編號(hào) 自動(dòng)增加 基于 VC++ Socket 的多線程網(wǎng)絡(luò)聊天系統(tǒng)開發(fā)與設(shè)計(jì) 19 4 系統(tǒng)詳細(xì)設(shè)計(jì)與實(shí)現(xiàn) 經(jīng)過系統(tǒng)的總體設(shè)計(jì)之后,系統(tǒng)的需求分析以及大致的設(shè)計(jì)方向已經(jīng)確定,本章將會(huì)從系統(tǒng)的通信方式,客戶端與服務(wù)器端的設(shè)計(jì),數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì),以及服務(wù)器端和客戶端的實(shí)現(xiàn)幾個(gè)方面深層次的介紹系統(tǒng)所 涉及 的關(guān)鍵技術(shù),通過這些技術(shù)的實(shí)現(xiàn),系統(tǒng)的設(shè)計(jì)階段將會(huì)告一段落。在此套接字被關(guān)閉后,服務(wù)器將再次處于阻塞狀態(tài),以等待下一個(gè)客戶端的連接請求并重復(fù)上述過程。服務(wù)器只有在調(diào)用了 accept()函數(shù)進(jìn)入等待狀態(tài)之后才可以接受來自客戶端的請求。 提取線程的循環(huán)體內(nèi)設(shè)置 (object obj)進(jìn)行中斷等待,加入對(duì)象后,執(zhí)行 (object obj) ,這樣提取線程將中斷等待,從 Queue 中Socket 底層 接口層 聊天、游戲等應(yīng)用系統(tǒng) 隊(duì)列 Queue 加入 提取 基于 VC++ Socket 的多線程網(wǎng)絡(luò)聊天系統(tǒng)開發(fā)與設(shè)計(jì) 14 讀取假如對(duì)象。 Queue 模式是處理消息通信的基本辦法,如圖 所示。 在本系統(tǒng)中,客戶端需要將用戶輸入的聊天信息發(fā)往服務(wù)器,那么建立一個(gè)線程一直實(shí)現(xiàn)發(fā)送功能,由于客戶端監(jiān)視用戶輸入也 有一個(gè)監(jiān)視線程在運(yùn)行。 本系統(tǒng)在架構(gòu)設(shè)計(jì)上將分 3 個(gè)層次,如圖 所示 基于 VC++ Socket 的多線程網(wǎng)絡(luò)聊天系統(tǒng)開發(fā)與設(shè)計(jì) 13 圖 本系統(tǒng)最底層是 Socket 通信層,將負(fù)責(zé)客戶端和服務(wù)器之間快速的數(shù)據(jù)交換,它通過接口層和最上面應(yīng)用層保持實(shí)時(shí)數(shù)據(jù)聯(lián)系。 系統(tǒng)設(shè)計(jì) 對(duì)于 C/S 模式的系統(tǒng)來說,一個(gè)號(hào)的系統(tǒng)設(shè)計(jì),將會(huì)從運(yùn)行速度以及效率等方面對(duì)一個(gè)有一個(gè)很大的提高。 ( 2) 易 操作性,程序簡單易懂,容易上手使用。首先,需啟動(dòng)服務(wù)器,進(jìn)行服務(wù)器的配置,進(jìn)行正確的服務(wù)器配置和數(shù)據(jù)庫連接并測試成功后,開啟服務(wù)器。 再者,所有的應(yīng)用程序在運(yùn)行過程中都會(huì)出現(xiàn)出錯(cuò) 的情況,這種錯(cuò)誤可能來自于程序本身,也可能是用戶操作的失誤所造成的。服務(wù)器模型一般分為循環(huán)服務(wù)器和并發(fā)服務(wù)器,循環(huán)服務(wù)器一次只能處理一個(gè)連接,也就是說同一時(shí)間只能由一個(gè)用戶連接到服務(wù)器進(jìn)行消息處理,這種情況是不被允許的。本章將開始著重分析系統(tǒng)的需求, 從系統(tǒng)功能和系統(tǒng)性能兩個(gè)方面 明確系統(tǒng)所要實(shí)現(xiàn)的 目標(biāo) , 為系統(tǒng)的開發(fā)做好鋪墊。該模式的建立基于以下兩點(diǎn) :非對(duì)稱作用和通信完全是異步的。由于服務(wù)器連接個(gè)數(shù)和數(shù)據(jù)通信量的限制,這種結(jié)構(gòu)的軟件適于在用戶數(shù)目不多的局域網(wǎng)內(nèi)使用。 C/S 模式(客戶機(jī) /服務(wù)器模式) C/S 模式 是大家熟知的客戶 機(jī)和服務(wù)器結(jié)構(gòu)。 端口是一個(gè)軟件結(jié)構(gòu),被客戶程序或服務(wù)進(jìn)程用來發(fā)送和接收信息。 兩個(gè)系統(tǒng)間的多重連接是這樣 相互確認(rèn)并協(xié)調(diào)一致 的, TCP 或 UDP 連接唯一地使用每個(gè)信息中的如下四項(xiàng)進(jìn)行確認(rèn): 源 IP 地址 : 發(fā)送包的 IP 地址。 TCP 數(shù)據(jù)包中包括序號(hào)和確認(rèn),所以未按照順序收到的包可以被排序,而損壞的包可以被重傳。 IP 數(shù)據(jù)包是不可靠的,因?yàn)?IP 并沒有做任何事情來確認(rèn)數(shù)據(jù)包是按順序發(fā)送的或者沒有被破壞。 IP 提供一種無連接的傳輸機(jī)制,這就意味著在網(wǎng)絡(luò)傳輸?shù)拿總€(gè)數(shù)據(jù)報(bào)都作為獨(dú)立的單元來對(duì)待。如果在一定時(shí)間之內(nèi),沒有接收到確認(rèn)消息,就認(rèn)為是這個(gè)數(shù)據(jù)在傳送時(shí)丟失了,接著,就會(huì)重新發(fā)送這個(gè)數(shù)據(jù)。它是通過一下步驟來實(shí)現(xiàn)可靠傳輸?shù)模?TCP 協(xié)議使用了一個(gè)叫積極確認(rèn)和重發(fā)送 (positive acknowledgement with retransmission)的技術(shù)來實(shí)現(xiàn)這一點(diǎn)的。所有的 TCP 連接均是全雙工的和點(diǎn)到點(diǎn)的。該函數(shù)返回線程的退出碼, 0 表示執(zhí)行成功,非 0 值用來標(biāo)識(shí)各種錯(cuò)誤。 重載該函數(shù)以控制用戶界面線程實(shí)例的初始化。 下面我們對(duì) CWinThread 類的數(shù)據(jù)成員及常用函數(shù)進(jìn)行簡要 的介紹: m_hThread:當(dāng)前線程的句柄; m_nThreadID:當(dāng)前線程的 ID; m_pMainWnd:指向應(yīng)用程序主窗口的指針; BOOL CWinThread::CreateThread(DWORD dwCreateFlags=0, UINT nStackSize=0,LPSECURITY_ATTRIBUTES lpSecurityAttrs=NULL)。如果 nStackSize 被設(shè)為 0,則線程的堆棧被設(shè)置成與父線程堆棧相同大??; dwCreateFlags:如果為 0,則線程在創(chuàng)建后立刻開始執(zhí)行。一般情況下,返回 0 表明執(zhí)行成功。 在 MFC 中,一般用全局函數(shù) AfxBeginThread()來創(chuàng)建并初始化一個(gè)線程的運(yùn)行,該函數(shù)有兩種重載形式,分別用于創(chuàng)建工作者線程和用戶界面線程 [9]。線程被分為兩種:用戶界面線程和工作線程(又稱為后臺(tái)線程)。 線程是一個(gè)獨(dú)立的執(zhí)行流,是進(jìn)程內(nèi)部的一個(gè)獨(dú)立的執(zhí)行單元,相當(dāng)于一個(gè)子程序,它對(duì)應(yīng)于 Visual C++中的 CwinThread 類對(duì)象。用戶界面可以更加吸引人,這樣比如用戶點(diǎn)擊了一個(gè)按鈕去觸發(fā)某些事件的處理,可以彈出一個(gè)進(jìn)度條來顯示處理的進(jìn)度; (6) 關(guān)閉套接字 多線程開發(fā)技術(shù) 多線程在構(gòu)建大型系統(tǒng) 的時(shí)候是需要重點(diǎn)關(guān)注的一個(gè)重要方面,特別是在效率(系統(tǒng)跑得多快? )和性能(系統(tǒng)工作正常?)之間做一個(gè)權(quán)衡的時(shí)候。 (2) 創(chuàng)建套接字 SOCKET socket(int af, int type, int protocol)。它們之間的關(guān)系如圖 所示 [5]: 應(yīng) 用 程 序 1網(wǎng) 絡(luò) 編 程 界 面 , 例 如 w i n d o w s S c o k e t s應(yīng) 用 程 序 2操 作 系 統(tǒng) , 例 如 w i n d o w s物 理 通 訊 介 質(zhì)網(wǎng) 絡(luò) 通 信 協(xié) 議 服 務(wù) 界 面 , 例 如 T C P / I P 圖 Windows Sockets 實(shí)現(xiàn)通訊工作的各層關(guān)系圖 Windows Sockets 編程的一般流程如下 : (1) Winsock 的初始化 [6] 每個(gè) Winsock 應(yīng)用都必須加載 Winsock DLL 的相應(yīng)版本。 Windows sockets 無疑是我們 進(jìn)行網(wǎng)絡(luò)編程的利器。 (4)能夠利用 Web 檢索和發(fā)布數(shù)據(jù),實(shí)現(xiàn)與 Inter 的連接。它具有界面友好、易學(xué)易用、開發(fā)簡單、接口靈活等特點(diǎn),是典型的新一代桌面數(shù)據(jù)庫管理系統(tǒng)。這才是 Visual C++和整個(gè) Visual Studio 的精華和靈魂,雖然我們很少能直接接觸到它 [2]。同時(shí),用 Visual C++編寫代碼也并不意味著一定要用 MFC,只要愿意,用 Visual C++來編寫 SDK 程序,或者使用STL, ATL, 一樣沒有限制。我們也知道, Developer Studio并不是專門用于 VC 的,它也同樣用于 VB, VJ, VID 等 Visual Studio 家族的其他同胞兄弟。 Visual C++ 由許多組件組成,包括編輯器、調(diào)試器以及程序向?qū)?AppWizard、類向?qū)?Class Wizard 等開發(fā)工具。 開發(fā)平臺(tái): Microsoft Visual C++ 網(wǎng)絡(luò):局域網(wǎng) 開發(fā)該系統(tǒng)應(yīng)盡可能采用高檔的硬件。 系統(tǒng)運(yùn)行環(huán)境 我所設(shè)計(jì)的是一個(gè)面向中小型機(jī)構(gòu)內(nèi)部通信需求的局域網(wǎng)即時(shí)信息軟件,要在短時(shí)間內(nèi)開發(fā)出來并且要滿足客戶要求,無論是硬件還是軟件都要選擇合適 ,要求如下:開發(fā)設(shè)備應(yīng)該完備;開發(fā)機(jī)器的性能必須穩(wěn)定;操作系統(tǒng)的選擇應(yīng)該適當(dāng);開發(fā)出的程序可以在盡可能多的平臺(tái)上運(yùn)行;要求運(yùn)行機(jī)配置盡可能低檔。第四部分詳細(xì)論述了所設(shè)計(jì)的基于Socket 的局域網(wǎng)聊天系統(tǒng)。 具體要實(shí)現(xiàn)的目標(biāo)如下: (1) 實(shí)現(xiàn)用
點(diǎn)擊復(fù)制文檔內(nèi)容
試題試卷相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1