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

正文內(nèi)容

畢業(yè)設(shè)計-基于net_20的局域網(wǎng)即時通信-閱讀頁

2024-12-23 19:20本頁面
  

【正文】 換為對象。 序列化使其他代碼可以查看或修改那些不序列化便無法訪問的對象實例數(shù)據(jù)。在默認策略下,通過 Inter 下載的代碼或 Intra 代碼不會授予該權(quán)限;只有本地計算機上的代碼才被授予該權(quán)限。這樣,能夠解釋該格式的代碼有可能能夠確定這些數(shù)據(jù)的值,而不依賴于該成員的可訪問性。 對于任何可能包含重要的安全性數(shù)據(jù)的對象,如果可能,應(yīng)該使該對象不可序列化。如果無法實現(xiàn)這一點,則應(yīng)注意該數(shù)據(jù)會被公開給任何擁有序列化權(quán)限的代碼,并確保不讓任何惡意代碼獲得該權(quán)限。 兩種序列化技術(shù) 二進制序列化保持類型保真度,這對于在應(yīng)用程序的不同調(diào)用之間保留對象的狀態(tài)很有用。您可以將對象序列化到流、磁盤、內(nèi)存和網(wǎng)絡(luò)等等。 XML 序列化僅序列化公共屬性和字段,且不保持類型保真度。由于 XML 是一個開放式標準,因此,對于通過 Web 共享數(shù)據(jù)而言,這是一個很好的選擇。 多線程 線程 每個正在系統(tǒng)上運行的程序都是一個進程。進程也可能是整個程序或者是部分程序的動態(tài)執(zhí)行。也可以把它理解為代碼運行的上下文。通常由操作系統(tǒng)負責多個線程的調(diào)度和執(zhí)行。線程是在同一時間需要完成多項任務(wù)的時候被實現(xiàn)的。在這種情況下我們可以釋放一些珍貴的資源如內(nèi)存占用等等。單線程模型 在這種線程模型中,一 個進程中只能有一個線程,剩下的進程必須等待當前的線程執(zhí)行完。 在這里,每個線程被分為進程里一個單獨的塊。程序規(guī)定了每個塊中線程的執(zhí)行時間。這種模型比單線程模型的好處在于,可以響應(yīng)同一時刻的多個用戶請求的任務(wù)而不 只是單基于 .NET 12 個用戶請求。 這單個塊控制著多個線程而不是單個線程。這樣的程序比單線程模型和 STA 的執(zhí)行速度都要塊,因為降低了系統(tǒng)的負載,因而可以優(yōu)化來減少系統(tǒng) idle 的時間。這里有必 要提供一個鎖機制。 多線程在 .NET 中的工作方式 在本質(zhì)上和結(jié)構(gòu)來說, .NET 是一個多線程的環(huán)境。一般來說,你可以 手動 為長時間運行的任務(wù)創(chuàng)建一個新的線程,另外對于短時間運行的任務(wù)尤其是經(jīng)常需要開 始的那些,進程池是一個非常好的選擇。對于資源緊缺需要進行同步的情況來說,它可以限制某一時刻只允許一個線程訪問資源。線程的基類是 。 基于 .NET 13 3 系統(tǒng) 設(shè)計 系統(tǒng)結(jié)構(gòu) 和功能 設(shè)計 系統(tǒng)結(jié)構(gòu)設(shè)計 基于以上的分析和研究 ,本文設(shè)計實現(xiàn)一個基于 .NET 平臺的局域網(wǎng)通信系統(tǒng) 。 系統(tǒng)結(jié)構(gòu)如 圖 31 所示。本系統(tǒng)使用 Microsoft SQL Server 2021 作為后臺數(shù)據(jù)庫。用戶注冊表的實體 ER 圖如圖 32 所示。 如果注冊信息文件損壞,可以重新進行注冊。 ( 3) 即時聊天 : 在客戶端界面可以看到已經(jīng) 在服務(wù)器上注冊的用戶列表,以及當前各用戶的在線狀態(tài)。 對于接收方,在已登錄的客戶端上接受到一個由服務(wù)器轉(zhuǎn)發(fā)的數(shù)據(jù)包,通過反序列化分析出內(nèi)容,并且激活對應(yīng)用戶的聊天窗口,并顯示接收到的即時信息。接收到的文件被存放在指定的文件夾內(nèi),方便用戶查看。 類庫中所封裝的類主要有以下幾個方面。 同時,因為客戶端和服務(wù)器端都會使用到這個控件,考慮到服務(wù)器端的需求,可能有暫停服務(wù)的需求,在控件的公共屬性上,封裝了狀態(tài),可以方便的通過設(shè)置狀態(tài)屬性來開啟或停止 Socket 端口的監(jiān)聽。如果不使用多線程,那么在打開端口監(jiān)聽后,整個程序就會進入一個假死的狀態(tài),直至關(guān)閉監(jiān)聽。 UserInfo 類用于記錄當前客戶端用戶的編號、 IP 地址、端口號、用戶名稱以及用戶狀態(tài),并且對該類進行序列化,以便于將其實例在局域網(wǎng)絡(luò)中傳輸。這樣當用戶注冊或者登錄時,可以將該列表中的信息群發(fā)給當前在線的所有用戶,以改變在各已登錄的客戶端中顯示狀態(tài)。 圖 33 BaseInfo、 UserInfo 和 Users 類視圖 Message、 FileDeitals 類 基于 .NET 16 Message 類主要是用枚舉型的元素值指定消息發(fā)送的命令、消息類型、消息發(fā)送的狀態(tài)等,并用 [Serializable]對類進行序列化,當序列化后,序列化引擎將跟蹤所有已序列化的引用對象,以確保對象不被序列化多次。 OptionData 類 該類將服務(wù)器端對數(shù)據(jù)庫的操作進行了封裝,通過對該類中方法的調(diào)用,可以對數(shù)據(jù)表進行添加、修改以及讀取的操作。該方法用戶用戶登錄時,對用戶名和密碼進行匹配查詢。 客戶端設(shè)計 客戶端,作為本系統(tǒng)的主體部分,主要有 以下幾個基本的功能。 注冊模塊設(shè)計 注冊模塊主要是在客戶端用戶第一次運行時或者是無法檢測到正確的本地注冊信息文件時所執(zhí)行的,對當前用戶進行注冊,并將注冊的信息發(fā)送給服務(wù)器端進行數(shù)據(jù)庫寫入。 創(chuàng)建的 INI 文件存放在 C:\Windows 路徑下,文件名為 。該模塊主要是將用戶名和密碼發(fā)送到服務(wù)器端,當服務(wù)器端有該用戶時,將返回一個登陸成功的消息,通過該消息,將關(guān)閉登錄窗口,進入客戶端主窗體。 在窗體中將使用 InnerList 列表記錄當前已注冊用戶的信息,并將 InnerList 列表中的信息添加到 TreeView 控件中。 主模塊在加載前首先要去加載登陸模塊,如果登陸模塊返回正確登陸的信息則再去加載主模塊。 并通過調(diào)用文件發(fā)送模塊進行點對點的文件發(fā)送。 Read()方法的語法格式如下: //將二進制流存儲到內(nèi)存流中 MemoryStream stream = new MemoryStream(data)。 buffer:存儲在當前流中讀取的字節(jié)塊 offset:讀取字節(jié)塊的起始位置 count:讀取字節(jié)塊長度 當需要發(fā)送的消息內(nèi)容過大時,則需要將信息以塊的形式 進行讀取然后進行發(fā)送操作, 分塊讀取的代碼設(shè)計如下: //將控件中的內(nèi)容轉(zhuǎn)成二進制流 byte[] data=()。 //設(shè)置 信息 每塊發(fā)送的長度 int sendlen=1024。 //設(shè)置 信息 發(fā)送的起始位置 int offset=0。 //如果 信息 沒有讀取完 if(sunlen=sendlen) //將長整型轉(zhuǎn)換成整型 sendlen=(sunlen)。 //將字節(jié)塊讀取到內(nèi)存流中,以便進行其他的 操作 (msgdata,offset,sendlen)。 } 基于 .NET 20 服務(wù)器端控制臺模塊 設(shè)計 本模塊是客戶端與遠程客戶端相互通信的一個中轉(zhuǎn)站,并且在控制臺窗體上顯示已注冊的所有用戶信息。 因為作為中轉(zhuǎn)站 ,以及接收網(wǎng)絡(luò)上客戶端傳來的各種信息,在本模塊中需要使用BinaryFormatter 對象,該對象是以二進制格式將對象或整個連接對象序列化或反序列化。 BinaryFormatter 對象中的 Serialize()方法是將對象序列化成流。 graph:對象。 BinaryFormatter 對象中的 Deserialize()方法是將指定的流反序列化為對象。 serializationStream:二進制流。 序列化與反序列化的具體代碼實現(xiàn)如下: string pp = 對象 。 //定義一個 BinaryFormatter BinaryF = new ()。 //就對象序列化為內(nèi)存流 (MemoryS,obj)。 //將內(nèi)存流反序列化為對象 object newobj = (MemoryS)。 附加功能模塊的 設(shè)計 基于 .NET 21 在實現(xiàn)了基本的即時聊天功能后,作為擴展功能主要完成了文件的傳輸。 整個傳輸?shù)倪^程分為三個階段: 首先,發(fā)送端向接收端發(fā)送一個文件發(fā)送請求,接收端在收到請求后,使用多線程去執(zhí)行文件接收,等待發(fā)送端的第一個數(shù)據(jù)包。通過這些信息為馬上要接受的文件準備內(nèi)存空間。 文件發(fā)送和文件接受的流程圖如圖 3 38 所示: 獲 取 傳 入 參 數(shù)根 據(jù) 參 數(shù)讀 取 文 件 信 息發(fā) 送 文 件 信 息 到 指定 遠 程 端 口分 塊 發(fā) 送 文 件 圖 37 文件發(fā)送流程 基于 .NET 22 監(jiān) 聽 端 口接 收 到 第 一 個 數(shù) 據(jù)包 、 解 包獲 取 文 件 信 息讀 取 成 功接 收 分 塊 信 息遇 到 異 常 結(jié) 束 文 件 接 收Y e sY e sN o接 收 完 畢Y e sN o 圖 38 文件接收流程 基于 .NET 23 4 系統(tǒng)實現(xiàn)與測試 系統(tǒng) 開發(fā)平臺和 實現(xiàn)環(huán)境 系統(tǒng)開發(fā)平臺 本系統(tǒng) 采用 Visual Studio 2021 作為開發(fā) 工具 , C 作為開發(fā)語言, 使用了 .NET 作為開發(fā)平臺 。 Visual Studio 是微軟公司推出的開發(fā)環(huán)境。 2021 年,微軟發(fā)布了 Visual Studio 2021。它同時也能開發(fā)跨平臺的應(yīng)用程序,如開發(fā)使用微軟操作系統(tǒng)的手機的程序等。 ? Visual C C是微軟開發(fā)的一種面向?qū)ο蟮木幊陶Z言,是微軟 .NET 開發(fā)環(huán)境的重要組成部分。C 簡單、功能強大、類型安全,而且是面向?qū)ο蟮摹? Visual 包含 Visual C,這是通過功能齊全的代碼編輯器、項目模板、設(shè)計器、代碼向?qū)?、功能強大且易于使用的調(diào)試器以及其他工具實現(xiàn)的。 ? .NET Framework .NET Framework 是支持生成和運行下一代應(yīng)用程序和 XML Web services 的內(nèi)部 Windows 組件。 提供一個將軟件部署和版本控制沖突最小化的代碼執(zhí)行環(huán)境。 提供一個可消除腳本環(huán)境或解釋環(huán)境的性能問題的代碼 執(zhí)行環(huán)境。 基于 .NET 24 系統(tǒng)運行平臺 首先運行的平臺都需要安裝有 .NET Framework 以上的版本 。 客戶端運行在 Windows XP 下。所以使用了 VMware Workstation 來搭建調(diào)試平臺。虛擬機是獨立運行主機操作系統(tǒng)的離散環(huán)境。你可以在運行于桌面上的多臺虛擬機之間切換,通過一個網(wǎng)絡(luò)共享虛擬機 (例如一個公司局域網(wǎng) ),掛起和恢復(fù)虛擬機以及退出虛擬機 — 這一切不會影響你的主機操作和任何操作系統(tǒng)或者它正在運行的應(yīng)用程序。 類庫的實現(xiàn) 在類庫中主要封裝了 Socket 控件、消息命令類已經(jīng)對于數(shù)據(jù)庫類。然后在控件上制作需要使用的 3 個屬性, localHost、 localPort、 active 屬性,以及 DataArrival 事件。 消息命令類 BaseInfo 類中,封裝了各種信息的字段以及一個獲取服務(wù)器端所有 IP 地址的方法,它的結(jié)構(gòu)如 圖 42 所示 : 圖 42 BaseInfo 類 UserInfo 類,是一個可以被序列化的類,它是在用戶進行注冊、登陸或者下線等操作時,向服務(wù)器發(fā)送的一個對象,因此,其中包含了用戶編號、 IP 地址、端口號、用戶名以及 當前狀態(tài)等字段。 TextBox 用于輸入注冊時需要的信息, Socket 控件用于將注冊信息以二進制流的形式發(fā)送給服務(wù)器端 。在填寫完了所有信息后,點擊確認進行注冊。 圖 410 注冊模塊 基于 .NET 29 登錄模塊實現(xiàn) 登錄模塊中 使用一個 Windows 窗體,主要用于實現(xiàn)用戶的登錄功能。 在登錄模塊加載的時候,首先在 Windows 目錄中查找 文件,當該文件不存在時,則先去調(diào)用之前實現(xiàn)的注冊模塊;否則,在 ini 文件中讀取到所注冊的服務(wù)器的 IP 和端口號。 如果用戶名密碼正確,并且服務(wù)器端工作成長,則會收到服務(wù)器端發(fā)送的登錄成功命令信息。 圖 411 登錄流程 主窗體模塊實現(xiàn) 主窗體工 加載時的實現(xiàn)代碼如圖 412 所示。 在獲取了所有注冊用戶的信息后,再根據(jù)他們的當前狀態(tài)設(shè)置他們各自在主窗體上顯示的狀態(tài)。 主窗體的 Socket 控件 在主窗體加載后就處于異步監(jiān)聽狀態(tài),通過 GetMsg()方法獲取遠程客戶端發(fā)送的信息,根據(jù)信息容量的大小,以不同的接受方式存儲信息,并在接收到信息后,便利窗體列表,當窗體列表中有相應(yīng)的接受窗體時,將信息添加到窗體的顯示控件;否在,重新調(diào)用消息發(fā)送窗體,新建一個消息發(fā)送窗體的實例,并將接收到的信息顯示在控件上。 在此模塊中主要需要注意的是,當發(fā)送的 信息大小超過 1024 時,需要將消息進行分塊發(fā)送。 基于 .NET 31 圖 414 信息發(fā)送 服務(wù)器端 實現(xiàn) 服務(wù)器控制臺,主要的操作比較簡單,設(shè)置服務(wù)端參數(shù)、開啟或停止服務(wù)。 主要有: ( 1)注冊用戶 ,實現(xiàn)如圖 415 所示 圖 415 用戶注冊 基于 .NET 32 ( 2) 用戶登錄,實現(xiàn)如圖 416 所示: 圖 416 用戶登錄 ( 3) 轉(zhuǎn)發(fā)信息 ( 4) 群發(fā)用戶狀態(tài) 附加功能模塊 實現(xiàn) 附件功能模塊實現(xiàn)的是文件傳輸功能,主要由文件發(fā)送和文件接收兩個子模塊組成。 首先通過完成路徑獲取需要發(fā)送文件的詳細信息,主要有文件類型和文件大小,并和傳入的文件名一起存放進 FileDetials 類的實例中 ,以便一起發(fā)送給接
點擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1