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

正文內(nèi)容

畢業(yè)設(shè)計(jì)-基于net_20的局域網(wǎng)即時通信(文件)

2024-12-27 19:20 上一頁面

下一頁面
 

【正文】 43 及 44 所示 : 圖 43 UserInfo 類 基于 .NET 26 圖 44 UserInfo 類 Users 類也是一個可以序列化的類,它是用于服務(wù)器端向已經(jīng)登陸的客戶端發(fā)送最新的用戶和在線情況列表,具體實(shí)現(xiàn)如 圖 45 所示 : 圖 45 Users 類 Message 類 (如圖 46 所示)主要用到了發(fā)送類型(圖 47)、消息命令(圖 48)以及發(fā)送狀態(tài)(圖 49)這 3 個枚舉型 基于 .NET 27 圖 46 Message 類 圖 47 發(fā)送類型 圖 48 消息命令 基于 .NET 28 圖 49 發(fā)送 狀態(tài) 客戶端 實(shí)現(xiàn) 注冊模塊實(shí)現(xiàn) 注冊模塊中使用 一個 Windows 窗體,主要用于實(shí)現(xiàn)用戶的注冊功能,窗體中主要用到兩個控件 TextBox 以及自定義 Socket 控件 。然后,先判斷兩次密碼輸入是否一致, 如果不一致,則清空密碼和確認(rèn)密碼字段重新輸入,如果密碼輸入一致,則根據(jù)輸入的服務(wù)器 IP 和端口向該端口發(fā)送用戶名和密碼的基本信息的 UDP 數(shù)據(jù)包,如果服務(wù)器 IP 和端口正確并且服務(wù)器端工作正常,則不久就會收到從服務(wù)器端發(fā)來的注冊成功信息,觸發(fā)了 Socket 控件中的 DataArrival 事件,判斷是否收到的是注冊成功信息,如果是則向上級模塊(登陸模塊)返回一個 OK 的 DialogResult,并且將注冊信息 服務(wù)器 IP、端口以及用戶名寫入注冊信息文件中。 在用戶輸入了 用戶名和密碼后,點(diǎn)擊登錄后,向模塊加載時所獲取的服務(wù)端 IP 和端口,將用戶名和密碼以二進(jìn)制流的形式發(fā)送給服務(wù)器端。 客戶端主窗體在加載時,首先要調(diào)用登錄模塊,當(dāng)?shù)卿浤K驗(yàn)證成功后,發(fā)送消息給服務(wù)端,返回所有注冊的用戶信息。 基于 .NET 30 圖 412 客戶端加載 圖 413 信息到達(dá)后處理 消息發(fā)送模塊實(shí)現(xiàn) 該模塊主要實(shí)現(xiàn)的是顯示接收到的即時消息,以及發(fā)送即時消息給指定的用戶。 而服務(wù)器端實(shí)現(xiàn)的功能還是比較多的。然后通過IP 地址和 UdpClient 對象,向接收端發(fā)送一個文件信息的數(shù)據(jù)包,之后再將文件分塊進(jìn)。 文件發(fā)送模塊,一共需要傳入 3 個參數(shù),分別為接收端 IP 地址、發(fā)送文件本地的完整路徑、發(fā)送文件的文件名。 主要的實(shí)現(xiàn)代碼如圖 414 所示: 在該模塊上還增加了文件發(fā)送的功能,文件發(fā)送功能通過調(diào)用附加功能模塊的文件發(fā)送模塊來實(shí)現(xiàn),該功能作為一個 Menu 控件顯示在消息發(fā)送窗體上,當(dāng)點(diǎn)擊了MenuButton 后首先進(jìn)行需要發(fā)送文件的選擇,然后在獲取了本地文件的信息后,向遠(yuǎn)程客戶端發(fā)送文件發(fā)送命令,并調(diào)用文件發(fā)送模塊。 主窗體在加載完后便打開監(jiān)聽,隨時準(zhǔn)備接處理發(fā)送過來的信息,實(shí)現(xiàn)代碼如圖413 所示。并觸發(fā)了 Socket 控件的 DataArrival 事件,如果從服務(wù)端收到的信息是登錄成功則向上級模塊返回一個 OK 的 DialogResult。 主要功能的實(shí)現(xiàn)代碼如圖 411 所示 。 注冊模塊的 主要功能實(shí)現(xiàn)代碼如圖 410 所示 ,首先顯示注冊窗體,在窗體中可以清晰地看到需要填寫的信息字段:服務(wù)器 IP、端口號、用戶名、密碼和確認(rèn)密碼。 localHost 屬性用于設(shè)置服務(wù)器端的 IP 地址; localPort 屬性用于設(shè)置端口號; active屬性是一個 Bool 型,可以控制端口是否處于監(jiān)聽狀態(tài)。 同時通過 VMware Workstation 提供的虛擬路由器搭建起了虛擬的局域網(wǎng)環(huán)境。 VMware Workstation 允許操作系統(tǒng) (OS)和應(yīng)用程序 (Application)在一臺虛擬機(jī)內(nèi)部運(yùn)行。 服務(wù)器端運(yùn)行在 Windows Server 2021 下, 數(shù)據(jù)庫為 Microsoft SQL Server 2021。 提供一個可提高代碼(包括由未知的或不完全受信任的第三方創(chuàng)建的代碼)執(zhí)行安全性的代碼執(zhí)行環(huán)境。通過 .NET Framework 類庫,可以訪問多種操作系統(tǒng)服務(wù)和其他有用的精心設(shè)計(jì)的類,這些類可顯著加快開發(fā)周期。而 Microsoft Visual C 2021 是微軟開發(fā)的 C編程集成開發(fā)環(huán)境(同種產(chǎn)品還有 Borland公司的 C Builder),它是為生成在 .NET Framework 上運(yùn)行的多種應(yīng)用程序而設(shè)計(jì)的。 .NET 字眼從各種語言的名字中被抹去,但是這個版本的 Visual Studio 仍然還是面向 .NET 框架的(版本 )。 Visual C 是 Microsoft 公司的 Visual Studio 開發(fā)工具箱中的一個 C 程序開發(fā)包。 然后,發(fā)送端獲取 需要發(fā)送的文件的完整本地路徑 然后將文件類型、 文件名以及文件大小,將這些信息存放在 FileDetials 類的對象中,再序列化后發(fā)給接收端,接收端接收到第一個數(shù)據(jù)包后,按照 FileDetials 類進(jìn)行反序列化,獲取文件名和文件大小 。 ()。 //創(chuàng)建一個內(nèi)存流存儲區(qū) MemoryS = new ()。 返回值:反序列化后的對象。 serializationStream:二進(jìn)制流。如果想要對類進(jìn)行序列化,可以使用 [Serializable]進(jìn)行聲明,當(dāng)類中的某些元素不想被序列化時,可以用 [NonSerialized]屬性來屏蔽。 //記錄下一塊的起始位置 sunlen=sunlensendlen。 //分塊獲取信息 while(sunlen0) { sendlen=1024。 //將二進(jìn)制流存儲到內(nèi)存 流中 MemoryStream stream = new MemoryStream(data)。 在使用 Socket 發(fā)送消息時,只能以二進(jìn)制流的形式進(jìn)行發(fā)送,并且規(guī)定 Socket 發(fā)送的內(nèi)存流不能大于 1024,當(dāng)發(fā)送大容量的信息 時,要對 信息 進(jìn)行分流發(fā)送,可以使基于 .NET 19 用 MemoryStream對象的 Read()方法來讀取指定塊的信息。 InnerList 用于存儲項(xiàng)目的 ArrayList 對象,它是CollectionBase 對象中的一個屬性,可以通過該屬性的 Add()和 Remove()方法想列表中添加和 移除元素。 注冊模塊的主要工作流程如圖 34 所示: 基于 .NET 17 填 寫 注 冊 信 息判 斷 兩 次 密 碼輸 入 是 否 一 致向 服 務(wù) 端 發(fā) 送 注 冊命 令 以 及 注 冊 信 息注 冊 成 功返 回 D i a l o g R e s u l t寫 注 冊 文 件Y e sN oY e s 圖 34 注冊流程 登錄模塊設(shè)計(jì) 當(dāng)運(yùn)行客戶端時,檢測到本地的注冊信息文件或已完成注冊,則進(jìn)入到客戶端登錄界面。用戶注冊、用戶登錄、即時聊天以及文件發(fā)送等。 主要有兩個方法: 通過 SQL 語句,對指定數(shù)據(jù)表進(jìn)行查詢,并將記錄個數(shù)進(jìn)行返回。 這三個類的類視圖如圖 33 所示。 BaseInfo、 UserInfo 及 User 類 BaseInfo 類用于記錄服務(wù)端和客戶端的基本信息,并且通過方法來獲取服務(wù)器端的所有 IP 地址。 UDP Socket 控件 該控件講 UDP 協(xié)議中的 IP 地址和端口號以控件屬性的形式進(jìn)行設(shè)置,并自定義一基于 .NET 15 個數(shù)據(jù)到 達(dá)的 事件 ,用于對主機(jī)的端口號進(jìn)行監(jiān)聽,以獲取遠(yuǎn)程計(jì)算機(jī)發(fā)送的消息。 ( 4) 文件發(fā)送 : 在打開的即時聊天窗口上,添加有文件發(fā)送的 Button,通過點(diǎn)擊并選擇了所要發(fā)送的文件后,即可向?qū)Ψ桨l(fā)送文件。 ( 2) 用戶登錄 : 在檢測到本地的注冊信息文件之后,客戶端根據(jù)注冊信息文件,向相應(yīng)的服務(wù)器端發(fā)送登陸請求,服務(wù)器返回確認(rèn)后,進(jìn)入客戶端界面。 在局域網(wǎng)用戶登錄時,為了可以在服務(wù)器端返回所有注冊用戶的信息,可以在服務(wù)器端的數(shù)據(jù)庫中創(chuàng)建一個用戶注冊表,用于記錄注冊用戶的 IP 地址、在線狀態(tài)、用戶名和密碼等。該系統(tǒng)主要由客戶端和 服務(wù)器端兩部分組成。這種情況可以視為給線程實(shí)現(xiàn)了鎖機(jī)制。有兩種主要的多線程方法是 .NET所 提 倡 的 : 使 用 ThreadStart 來 開 始 你 自 己 的 進(jìn) 程 , 直 接 的 ( 使 用)或者間接的(比如 ,或者調(diào)用BeginInvoke)使用 ThreadPool 類。這些應(yīng)用程序一般比較復(fù)雜,因?yàn)槌绦騿T必須提供線程同步以保證線程不會并發(fā)的請求相同的資源,因而導(dǎo)致競爭情況的發(fā)生。多線程塊模型 多線程塊模型( MTA)在每個進(jìn)程里只有一個塊而不是多個塊。所有的請求通過 Windows 消息隊(duì)列進(jìn)行串行化,這樣保證了每個時刻只能訪問一個塊,因而只有一個單獨(dú)的進(jìn)程可以在某一個時刻得到執(zhí)行。塊線程模型 這種模型里,一個程序里可能會包含多個執(zhí)行的線程。 線程 模型 多線程 多線程是為了使得多個線程并行的工作 以完成多項(xiàng)任務(wù),以提高系統(tǒng)的效率。線程是一組指令的集合,或者是程序的特殊段,它可以在程序里獨(dú)立執(zhí)行。 SOAP 同樣是一個開放式標(biāo)準(zhǔn),這使它也成為一個頗具吸引力的選擇。遠(yuǎn)程處理使用序列化“通過值”在計(jì)算基于 .NET 11 機(jī)或應(yīng)用程序域之間傳遞對象。 序列化的目的 以某種存儲形式使自定義 對象持久化; 將對象從一個地方傳遞到另一個地方。類似地,反序列化從序列化的表示形式中提取數(shù)據(jù),并直接設(shè)置對象狀態(tài),這也與可訪問性規(guī)則無關(guān)。確切地說,代碼執(zhí)行序列化需要特殊的權(quán)限:即指定了 SerializationFormatter 標(biāo)志的 SecurityPermission。以后,可以通過從存儲區(qū)中讀取 或反序列化對象的狀態(tài),重新創(chuàng)建該對象。 其次,傳統(tǒng)的 C/S 結(jié)構(gòu)的軟件需要針對不同的操作系統(tǒng)系統(tǒng)開發(fā)不同版本的軟件,由于產(chǎn)品的更新?lián)Q代十分快,代價高和低效率已經(jīng)不適應(yīng)工作需要。在客戶服 務(wù)器架構(gòu)的應(yīng)用中,前臺程序不是非常“瘦小”,麻煩的事情都交給了服務(wù)器和網(wǎng)絡(luò)。一旦服務(wù)器程序被啟動,就隨時等待響應(yīng)客戶程序發(fā)來的請求;客戶應(yīng)用程序運(yùn)行在用戶自己的電腦上,對應(yīng)于數(shù)據(jù)庫服務(wù)器,可稱為客戶電腦,當(dāng)需要對數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行任何操作時,客戶程序就自動地尋找 服務(wù)器程序,并向其發(fā)出請求,服務(wù)器程序根據(jù)預(yù)定的規(guī)則作出應(yīng)答,送回結(jié)果,應(yīng)用服務(wù)器運(yùn)行數(shù)據(jù)負(fù)荷較輕。 C/S 架構(gòu)軟件的優(yōu)勢與劣勢 應(yīng)用服務(wù)器運(yùn)行數(shù)據(jù)負(fù)荷較輕。還有,系統(tǒng)軟件升級時,每一臺客戶機(jī)需要重新安裝,其維護(hù)和升級成本非常高。 缺點(diǎn)主要有以下幾個: 而隨著互聯(lián)網(wǎng)的飛速發(fā)展,移動辦公和分布式辦公越來越普及,這需要我們的系統(tǒng)具有擴(kuò)展性。目前大多數(shù)應(yīng)用軟件系統(tǒng)基于 .NET 9 都是 Client/Server 形式的兩層結(jié)構(gòu),由于現(xiàn)在的軟件應(yīng)用系統(tǒng)正在向分布式的 Web 應(yīng)用發(fā)展, Web 和 Client/Server 應(yīng)用都可以進(jìn)行同樣的業(yè)務(wù)處理,應(yīng)用不同的模塊共享邏輯組件;因此,內(nèi)部的和外部的用戶都可以訪問新的和現(xiàn)有的應(yīng)用系統(tǒng),通過現(xiàn)有應(yīng)用系統(tǒng)中的邏輯可以擴(kuò)展出新的應(yīng)用系統(tǒng)。使用計(jì)算機(jī)的人是計(jì)算機(jī)的“用戶”( user)而不是“客戶”( client)。 客戶軟件將插頭插到不同編號的插座,就可以得到不同的服務(wù)。 在 Inter 上有很多這樣的主機(jī),這些主機(jī)一般運(yùn)行了多個服務(wù)軟件,同時提供幾種服務(wù)。因 這臺主機(jī)沒有運(yùn)行 FTP服務(wù)軟件。服務(wù)器socket 半相關(guān)為全局所公認(rèn)非常重要。在網(wǎng)間網(wǎng)內(nèi)部,每一個 socket用一個半相關(guān)描述 :(協(xié)議,本地地址,本地端口 )一個完整的 socket有一個本地唯一的 socket號,由操作系統(tǒng)分配。 至此,我們對 socket進(jìn)行了直觀的描述。雙方通話的過程,是一方向電話機(jī) 發(fā)出信號和對方從電話機(jī)接收信號的過程,相當(dāng)于向 socket發(fā)送數(shù)據(jù)和從 socket接收數(shù)據(jù)。電話的通 話雙方相當(dāng)于相互通信的 2個進(jìn)程,區(qū)號是它的網(wǎng)絡(luò)地址;區(qū)內(nèi)一個單位的交換機(jī)相當(dāng)于一臺主機(jī),主機(jī)分配給每個用戶的局內(nèi)號碼相當(dāng)于 socket號。 Socket 協(xié)議 socket的英文原義是 “孔 ”或 “插座 ”。 基于 .NET 7 TCP/IP 協(xié)議 TCP/IP( Transmission Control Protocol/Inter Protocol 的簡寫,中文譯名為傳輸控制協(xié)議 /互聯(lián)網(wǎng)絡(luò)協(xié)議)協(xié)議是 Inter 最基本的協(xié)議,簡單地說,就是由網(wǎng)絡(luò)層的 IP協(xié)議和傳輸層的 TCP 協(xié)議組成的。 與 TCP 不同, UDP 并不提供對 IP 協(xié)議的可靠機(jī)制、流控制以及錯誤恢復(fù)功能等。這是通過使用 UDP 的 “端口號 ”完成的。是一個簡單的面向數(shù)據(jù)報(bào)的傳輸層協(xié)議, IETF RFC 768 是 UDP 的正式規(guī)范。這樣的協(xié)議通常稱為虛擬終端協(xié)議。 例如,網(wǎng)絡(luò)中一個微機(jī)用戶和一個大型主機(jī)的操作員進(jìn)行通信,由于這兩個數(shù)據(jù)終端所用字符集不同,因此操作員所輸入的命令彼此不認(rèn)識。 第 四 章是 系統(tǒng) 實(shí)現(xiàn) 和測試 , 介紹了 系統(tǒng)實(shí)現(xiàn) 的 環(huán)境和平臺 , 描述 了 類庫中的各組件、服務(wù)端的
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1