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

正文內(nèi)容

基于vc的網(wǎng)絡通信系統(tǒng)的設計與實現(xiàn)(編輯修改稿)

2025-01-12 09:25 本頁面
 

【文章內(nèi)容簡介】 關閉套接字CS,結(jié)束UDP會話 10 服務器 客戶機 圖 6 數(shù)據(jù) 套接字服務的工作流程示意圖 阻塞和非阻塞 Socket 調(diào)用有兩種基本模式:阻塞模式和非阻塞模式。所謂阻塞模式,就是說進程調(diào)用某一 Socket 函數(shù)后由于某種原因不能馬 上完成,這時調(diào)用進程就一直等待,直到函數(shù)返回為止。與此相應的非阻塞模式在調(diào)用 Socket 函數(shù)后馬上返回,等待調(diào)用完成時系統(tǒng)自動會以消息的方式通知調(diào)用進程。絕大部分 Berkeley Socket 調(diào)用都是阻塞調(diào)用。由于 UNIX 是搶先式多任務操作系統(tǒng),在進程阻塞時,系統(tǒng)會將 CPU的使用權交給等待的其他進程。這樣不會阻塞其他進程的執(zhí)行。而 Windows 操作系統(tǒng)是非搶先式的,進程不會主動放棄對 CPU 的控制權,因此一個等待阻塞調(diào)用返回的進程會阻塞整個系統(tǒng)。Windows Socket 規(guī)范根據(jù) Windows 平臺的具體特點 ,在 BSD Socket 基礎上擴充了非阻塞的 Socket 調(diào)用模式,使 Socket 編程更加符合 Windows 系統(tǒng)消息驅(qū)動的特性。 3 需求分析 軟件開發(fā)方案 在開發(fā)本軟件之前 , 先確定整個軟件系統(tǒng)的綜合要求以及系統(tǒng)的數(shù)據(jù)要求, 對于本軟件希望能做到的要求和軟件特征如下 [10]: 創(chuàng)建流式套接字S 將S和本地地址和端口綁定 監(jiān)聽,等待連接請求 接受客戶連接,創(chuàng)建數(shù)據(jù)套接字ns 利用ns和客戶進程通信,提供服務(是否激活新進程依靠服務器類型) 關閉ns,如果是并發(fā)服務,還需該程序 關閉套接字S,停止服務 創(chuàng)建流式套接字cs 利用cs和遠程服務器建立連接 關閉套接字,cs結(jié)束 TCP會話 利用cs與服務器進程通信,完成數(shù)據(jù)傳輸 11 1. 本軟件是一個簡單的即時通信軟件,完成后能進行簡單的文本傳輸。 軟件分為兩部分, server 和 client,即服務器端和客戶端。 客戶端 能相互進行文本傳輸。 2. 服務器端能實現(xiàn)啟動和終止服務,具有主動權。 3. 服務器端能接受 并驗證客戶端連接。 4. 服務器端能動態(tài)管理在線用戶名單,為新登錄用戶提供本服務器在線人員名單,將在線人員變動信息(用戶上線、下線)及時傳給當前再線用戶。 ● 用戶上線 用戶上線功能分為兩部分: 第一: 開啟系統(tǒng)的時候,使用系統(tǒng)的用戶就要收到這個人的信息,知道他已經(jīng)上線。 第二: 系統(tǒng)在運行之中,它會不斷地進行心跳告訴其他人。這個功能是為了防止在系統(tǒng)啟動的時候發(fā)出的用戶信息沒有被其他的使用本地系統(tǒng)的人收到。使用心跳功能后,用戶的信息會不斷地通知在線的人,這樣有利于系統(tǒng)的穩(wěn)定。這個功能要采用網(wǎng)絡廣播來實現(xiàn)。 ● 用戶下線 當用戶退出本系統(tǒng)時,系統(tǒng)會自動發(fā)出下線的信息。凡是正在使用本系統(tǒng)的人都會得到通知,得到這個通知后,每個在線的人都會看到這個用戶的信息從自己的列表中刪除。 1. 客戶端可以 自由登錄( login)、登出( logout)指定的 Chat 服務器。 2. 客戶端可以 根據(jù)服務器上的在線人員變動信息(用戶上線、下線)修改本機保存的在線人員名單。 3. 客戶端可以 和其他用戶的即時通信(發(fā)送和接受文本信息)。 軟件的信息傳遞過程 客戶端發(fā)送請求,服務器根據(jù)請求是否建立連接 [11],用例圖 圖 7 表 示 12 客 戶 端客 戶 端聊 天 結(jié) 束 1* 結(jié) 束 2* 結(jié) 束 3* 結(jié) 束 4* 圖 7 信息傳遞過程 用活動圖 圖 8 表 示 [ 消 息 窗 口 ] 接 收 到 消 息 內(nèi) 容輸 入 消 息 內(nèi) 容發(fā) 送 消 息 內(nèi) 容保 存 消 息 內(nèi) 容顯 示 消 息 信 息 結(jié) 束 1* 結(jié) 束 2* 結(jié) 束 3* 結(jié) 束 4* 結(jié) 束 5* 結(jié) 束 6*{ } 圖 8 信息傳遞過程 13 系統(tǒng)初始化 C C l i e n t A p p C C l i e n t D l g啟 動 狀 態(tài)查 看 系 統(tǒng) 是 否 已 經(jīng) 運 行結(jié) 束 結(jié) 束 3* 結(jié) 束 4*標 記 系 統(tǒng) 已 經(jīng) 運 行準 備 w i n d o w s 環(huán) 境裝 載 系 統(tǒng) 配 置 文 件創(chuàng) 建 主 窗 口加 載 用 戶 的 配 置 信 息廣 播 自 己 上 線 信 息在 線 狀 態(tài)設 置 廣 播 自 己 在 線 狀 態(tài) 的 定 時 器啟 動 聊 天 接 收 服 務就 緒 狀 態(tài)[ 否 ] [ 是 ] 圖 9 系統(tǒng)初始化 用戶上下線動態(tài)管理 服務器端能 動態(tài)管理在線用戶名單 , 為新登錄用戶提供本服務器在線人員名單 , 將在線人員變動信息(用戶上線、下線)及時 傳給 當前 在 線 用戶,用 用例圖 圖 10 表 示 14 客 戶 端上 線下 線廣 播 報 文客 戶 端 u s e s u s e s [ 1 n ] [ 1 n ] 圖 10 用戶上下線 用戶上線(活動圖 圖 11 表 示 ) 讀 取 系 統(tǒng) 配 置 信 息讀 取 個 人 配 置 信 息生 成 用 戶 報 文廣 播 報 文等 待 服 務 器 報 文 狀 態(tài)收 到 用 戶 上 線 報 文生 成 用 戶 報 文加 入 到 鏈 表 中[ 沒 有 找 到 ] [ 找 到 ] 圖 11 用戶上線 15 4 系統(tǒng)的概要設計 系統(tǒng)整體結(jié)構 Chat 系統(tǒng)的結(jié)構 [12]如圖 12 所示。 Chat 的客戶端通過實際的通信鏈路和 Chat 服務器建立 TCP 連接。 圖 12 整體結(jié)構圖 通信協(xié)議和報文格式 通信協(xié)議指的是由應用程序定義的數(shù)據(jù)信息的解釋機制,是通信進程交流和溝通的“語言 ”。 TCP/IP 協(xié)議是 “低級語言 ” ,它定義的是接入 Inter 的主機、路由器之間的信息溝通的方法。 TCP/IP 各層對數(shù)據(jù)是逐級封裝,每一層都包括本層的數(shù)據(jù)和報文頭兩部分。例如 UDP 數(shù)據(jù)報。 UDP、 TCP 數(shù)據(jù)報的數(shù)據(jù)部分是高層應用需要傳輸?shù)臄?shù)據(jù),這些數(shù)據(jù)的內(nèi)容需要應用程序之間定義的 “語言 ”即協(xié)議來解釋并執(zhí)行相應的操作。 Chat 的通信協(xié)議比較簡單,且數(shù)據(jù)報文都具有如 表 2 所示的形式。 下面詳細論述 Chat 中定義的各個命令及主要的通信時序。 表 2 Chat 數(shù)據(jù)包格式 成員變量 描述 2 Byte Chat 數(shù)據(jù)報類型 chat 數(shù)據(jù) 用戶登錄命令 它是客戶端命令 ,該命令是用戶用于向服務器發(fā)送登錄信息的命令。它的數(shù)據(jù)包中的數(shù)據(jù)部分是一個包含用戶登錄信息的結(jié)構(詳 細 介紹在 后面的 “結(jié)構、類型和宏 ” 部分)。這里定義的登錄信息僅包括用戶名和密碼兩部分 。 客戶端 Inter 客戶端 服務器端 16 用戶登出命令 它是客戶端命令 ,該命令用于通知服務器用戶登出,服務器在收到此命令后向該客戶端發(fā)送一個包含此命令且沒有數(shù)據(jù)的確認數(shù)據(jù)包。客戶端在收到此確認數(shù)據(jù)包后便可關閉連接了。它的數(shù)據(jù)包中的數(shù)據(jù)部分是一個包含用戶信息的結(jié)構(詳見后面的 “結(jié)構、類型和宏 ”部分)。這里定義的用戶信息包括用戶名、用戶的 IP 地址和端口號三個字段。 字符串消息 它是客戶端命令 ,該命令指示在 CHAT 數(shù)據(jù)包部分的數(shù)據(jù)是一個以 “/0”結(jié)尾的字符串。事實上, 102 號命令僅用于 CHAT 客戶端之間的通信 。服務器和客戶端相互發(fā)送字符串消息的功能 CHAT 中并沒有定義。這里規(guī)定,發(fā)送的字符串長度不能超過 4KB。 用戶信息列表命令 它是服務器端命令 ,該命令指示數(shù)據(jù)包中的數(shù)據(jù)是一個用戶信息的列表。數(shù)據(jù)包在新用戶登錄并通過驗證后,由服務器端發(fā)送到新用戶的客戶端。該命令的數(shù)據(jù)包格式如下 表 3 所示 表 3 用戶數(shù)據(jù)列表數(shù)據(jù)包格式 成員變量 描述 2 Byte Chat 數(shù)據(jù)報類型 用戶信息個數(shù) N, 用戶信息 1…… .用戶信息 N 新用戶加入命令 它是服務器端命令 ,該命令指示數(shù)據(jù)包中的數(shù)據(jù)是新增加的用戶信息。用于在新的用戶登錄驗證后,通知其他在線用戶該用戶已上線,客戶端在收到該命令后應把數(shù)據(jù)包的新用戶添加到自己的用戶列表中。其結(jié)構和用戶登出命令結(jié)構相同。 用戶退出命令 它是服務器端命令 ,該命令指示數(shù)據(jù)包中的內(nèi)容時離開本服務器的用戶信息。在用戶向服務器發(fā)出登出請求時,服務器以此用戶的信息通知其他在線用戶從用戶列表中刪除此用戶信息。其結(jié)構和用戶登出命令結(jié)構相同。 確認用戶登出命令 它是服務器端命令。該命令無數(shù)據(jù)部分,用于在收到用戶的登出命令時發(fā)送給用戶以示確認,然后可以關閉連接。 服務器關閉命令 它是服務器端命令 ,該命令無數(shù)據(jù)部分。它用于在服務器即將關閉時通知當前在線用 17 戶服務器將停止服務,并要求客戶端斷開連接。 用戶登錄時序 用戶登錄時序如圖 13 所示。 客戶端先向服務器發(fā)出登錄命令( 100),服務器相應客戶端的命令,向該客戶端發(fā)回當前在線用戶列表( 200),并同時向其他客戶端發(fā)出用戶上線命令( 201)。 100 200 201 圖 13 用戶登錄時序 用戶登出時序 用戶登出時序如圖 14 所示。 客戶端先向服務器發(fā)出命令( 101),服務器確認用戶的登出( 203),并通知向其他客戶端該用戶離開( 202)。 101 203 202 圖 14 用戶登出時序 結(jié)構、類型和宏 Chat 的 Client 和 Server 共同使用一個定義了 Chat 程序間通信所需的結(jié)構、類型和 客戶端 服務器端 其它客戶端 客戶端 服務器端 其它客戶端 18 宏的頭文件 [13], 下面是它的內(nèi)容 : // 定 義了程序所需要的數(shù)據(jù)結(jié)構和宏 include “” ifndef COMMON_H_ define COMMON_H_ //用戶登錄信息 //定義一個 tagloginInfo 結(jié)構體,變量名是 LOGIN_INFO, //其數(shù)據(jù)成員為:名字和密碼 Typedef struck tagloginInfo { Char name [32]。 Char password [32]。 } LOGIN_INFO。 //用戶信息 //定義一個 taguserInfo 結(jié)構體,變量名是 USER_INFO, //其數(shù)據(jù)成員是:名字, IP 地址和端口號 Typedef struck taguserInfo { Char name [32]。 U_long addr。 U_short port。 } USER_INFO。 //char 數(shù)據(jù)包命令的取值如下 define PACKAGE_LOGIN 100 //用戶登錄 define PACKAGE_LOGOUT 101 //用戶登出 define PACKAGE_MESSAGE 102 //字符串消息 define PACKAGE_USERLIST 200 //用戶信息列表 define PACKAGE_USERADD 201 //新用戶加入 define PACKAGE_USERDEL 202 //用戶退出 define PACKAGE_LOGOUTCONFIRM 203 //確認用戶登出 define PACKAGE_SERVERCLOSE 204 //關閉服務器 endif //COMMON_H_ 用字符數(shù)組表示用戶名和密碼雖然為用戶帶來了些限制,但可以簡化程序設計。為 19 了增強程序的可讀性和可維護性,這里把 Chat 的通信命令定義成一系列具有PACKAGE——XXX 形式的宏,它們都是 WORD 類型的常量。 Chat
點擊復制文檔內(nèi)容
研究報告相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1