【正文】
k, the LAN access to instant messaging and will be the same universal introduction of the system. NET as a development platform, Mysql database storing user information and chats with a socket connection client and server, and send a message packet socket. The system uses C / S mode of construction, from the client and serverside ponent. Simply fill out the client server IP address and munications port number, and through the distribution of the account, you can log in and use. Mysql database server and can be deployed in the same work segment at any node, by receiving the request of the client different additions and deletions to the database search operation, This can be convenient for maintenance and to ensure that the same local area work information security and make full use of work resources and ensure maximum safety of the database. The system can be used for general exchange of text, query chats, and online user functions. [Key words] .NET Framework。 Thread。 TCP/IP。從 WIN95 開(kāi)始微軟把網(wǎng)絡(luò)功能融進(jìn)了它的操作系統(tǒng),使得應(yīng)用程序網(wǎng)絡(luò)通信能力更為普及。 一般采用 TCP/IP 協(xié)議的應(yīng)用程序只實(shí)現(xiàn)了單用戶(hù)與服務(wù)器間點(diǎn)對(duì)點(diǎn)的連接,而本文在 的環(huán)境下,運(yùn)用了了多線(xiàn)程以及共享數(shù)據(jù)結(jié)構(gòu)技術(shù), 不僅實(shí)現(xiàn)了多用戶(hù)與服務(wù)器間的連接,而且解決了多用戶(hù)間信息互發(fā)問(wèn)題 依靠服務(wù)器的轉(zhuǎn)發(fā)功能。 借助微軟 Visual Studio2021 .NET 開(kāi)發(fā)平臺(tái),與其自帶的 組件,使開(kāi)發(fā)效率大大提速。 即時(shí)通信在互聯(lián)網(wǎng)領(lǐng)域的應(yīng)用取得了巨大的成功,但是在 學(xué)校、 企業(yè) 等 內(nèi)部 網(wǎng)絡(luò) 的應(yīng)用仍遠(yuǎn)未普及。在這種前提下,一款可以即時(shí)收發(fā)消息用來(lái)收發(fā)通知,可查詢(xún)歷史消息的通信軟件的需求成為了必然。 開(kāi)發(fā)平臺(tái)簡(jiǎn)介 .NET Framework 是微軟的幾個(gè)開(kāi)發(fā)團(tuán)隊(duì)一起努力發(fā)展的成果,最主要用來(lái)產(chǎn)生一個(gè)可以用來(lái)快速開(kāi)發(fā)、部署網(wǎng)站服務(wù)及應(yīng)用程序的開(kāi)發(fā)平臺(tái)。 .Net Framework 是以一種類(lèi)似于 Java 系統(tǒng)的虛擬機(jī)方式運(yùn)行和管理的編程平臺(tái),通過(guò) CLR 為基礎(chǔ),支持多種語(yǔ)言( C、 、 C++、 Python 等)的開(kāi)發(fā)。它在繼承 C 和 C++強(qiáng)大功能的同時(shí)去掉了一些它們的復(fù)雜特性(例如沒(méi)有宏和模版,不允 許 多重繼承)。 在 Visual Studio 2021 的 C++語(yǔ)言當(dāng)中, MFC 可以支持 Vista 的通用控件。新的 Vista SDK 中包含大量的非托管 API。 使用 Visual Studio 2021 可以高效開(kāi)發(fā) Windows 應(yīng)用。同時(shí) Visual Studio 2021 支持項(xiàng)目模板、調(diào)試器和部署程序。 LINQ 是一種用來(lái)進(jìn)行數(shù)據(jù)訪(fǎng)問(wèn)的編程模型,使得 .NET 語(yǔ)言可以直接支持?jǐn)?shù)據(jù)查詢(xún)。 LINQ 可以用統(tǒng)一的方法訪(fǎng)問(wèn)不同類(lèi)型的數(shù)據(jù),可以將數(shù)據(jù)作為對(duì)象使用,能夠更好地與編程模型集成,可以在 Visual Studio 中進(jìn)行智能提示。 C則是應(yīng)用的面向?qū)ο蟮某绦蛟O(shè)計(jì)方法 (OOP),提供了可視化的設(shè)計(jì)方法,它把程序和數(shù)據(jù)封裝起來(lái)作為一個(gè)對(duì)象,并為每個(gè)對(duì)象賦予應(yīng)有的屬性,使對(duì)象成為實(shí)在的東西。只要按設(shè)計(jì)要求的屏幕布局,用系統(tǒng)提供的工具,在屏幕上畫(huà)出各種“部件”,即圖形對(duì)象,并設(shè)置這些圖形對(duì)象的屬性,就可以輕松完成任務(wù)了。 : C是在 C/C++語(yǔ)言的基礎(chǔ)上發(fā)展起來(lái)的,具有高級(jí)程序設(shè)計(jì)語(yǔ)言的語(yǔ)句結(jié)構(gòu),接近于自然語(yǔ)言和人類(lèi)的邏輯思維方式。 C是面向?qū)ο笮驼Z(yǔ)言,在輸入代碼的同時(shí),解釋系統(tǒng)將高級(jí)語(yǔ)言分解翻譯成計(jì)算機(jī)可以識(shí)別的機(jī)器指令,并判斷每個(gè)語(yǔ)句的語(yǔ)法錯(cuò)誤。 : C通過(guò)事件來(lái)執(zhí)行對(duì)象的操作。例如,命令按鈕是一個(gè)對(duì)象,當(dāng)用戶(hù)單擊該按鈕時(shí),將產(chǎn)生一個(gè)“單擊”(CLICK)事件,而在產(chǎn)生該事件時(shí)將執(zhí)行一段程序,用來(lái)實(shí)現(xiàn)指定的操作。這些過(guò)程分別面向不同的對(duì)象,由用戶(hù)操作引發(fā)某個(gè) 事件來(lái)驅(qū)動(dòng)完成某種特定的功能,或者由事件驅(qū)動(dòng)程序調(diào)用通用過(guò)程來(lái)執(zhí)行指定的操作,這樣可以方便編程人員,提高效率。同時(shí), C還能直接編輯和訪(fǎng)問(wèn)其他外部數(shù)據(jù)庫(kù),如: DATABASE, FoxPro, Paradox等,這些數(shù)據(jù)庫(kù)格式都可以用 C 編輯和處理。在應(yīng)用程序中,可以使用結(jié)構(gòu)化查詢(xún)語(yǔ)言 SQL 數(shù)據(jù)標(biāo)準(zhǔn),直接訪(fǎng)問(wèn)服務(wù)器上的數(shù)據(jù)庫(kù),還提供了簡(jiǎn)單的面向?qū)ο蟮膸?kù)操作指令和多用戶(hù)數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)的加鎖機(jī)制和網(wǎng)絡(luò)數(shù)據(jù)庫(kù)的 SQL 的編程技術(shù),為單機(jī)上運(yùn)行的數(shù)據(jù)庫(kù)提供了 SQL 網(wǎng)絡(luò)接口,可以在分布式環(huán)境中快速而有效地實(shí)現(xiàn)客戶(hù) /服務(wù)器(client/server)方案。當(dāng)原始數(shù)據(jù)變化時(shí),可以自動(dòng)更新鏈接的數(shù)據(jù)。 (OLE)功能: 對(duì)象的鏈接與嵌入 (OLE)將每個(gè)應(yīng)用程序都看作是一個(gè)對(duì)象 (object),將不同的對(duì)象鏈接 (link)起來(lái),再嵌入 (embed)某個(gè)應(yīng)用程序中,從而可以得到具有聲音、影像、圖像、動(dòng)畫(huà)、文字等各種信息的集合式的文件 。 Visual Basic就采用了 OLE 技術(shù)。但它可以通過(guò)動(dòng)態(tài)鏈接庫(kù)技術(shù)將 C/C++或匯編語(yǔ)言編寫(xiě)的程序加入到 C 應(yīng)用程序中,可以像調(diào)用內(nèi)部函數(shù)一樣調(diào)用其他語(yǔ)言編寫(xiě)的函數(shù)。 主要設(shè)計(jì)功能 本程序需要具備以下功能: 用戶(hù)密碼驗(yàn)證功能; 與在線(xiàn)用戶(hù)進(jìn)行即時(shí)通信交流; 保存與離線(xiàn)好友交流文字信息功能; 顯示所有好友在線(xiàn)和離線(xiàn)功能; 查詢(xún)聊天記錄功能; 數(shù)據(jù)庫(kù)設(shè)計(jì) 在 Mysql 中建立名稱(chēng)為 client 的數(shù)據(jù)庫(kù),并在此數(shù)據(jù)庫(kù)中創(chuàng)建 chatlog、 class、 user三個(gè)數(shù)據(jù)表分別用來(lái)存放聊天記錄、存放班級(jí)信息和存放用戶(hù) 信息。 class 表簡(jiǎn)介 class 數(shù)據(jù)表設(shè)計(jì)視圖如表 21 所示: 表 21 class 表 classBM classNAME 0541 文通 0541 0542 文通 0542 0441 文通 0441 0442 文通 0442 0431 文通 0431 如上 表 所示, class 表共有 classBM、 classNAME 兩個(gè)字段,分別存放班級(jí)編碼和班級(jí)名稱(chēng),并且必須一一對(duì)應(yīng)。在好友列表顯示時(shí),可根據(jù)學(xué)生所屬班級(jí)進(jìn)行 方便快速的查找。此表由服務(wù)器所在電腦維護(hù)。 id字段為此數(shù)據(jù)表主鍵,不允許重復(fù),作為用戶(hù)的唯一標(biāo)示。 name 字段為學(xué)生的姓名信息,可通過(guò)它登錄系統(tǒng)。在系統(tǒng)登錄時(shí),填寫(xiě)的姓名與密碼必須同時(shí)驗(yàn)證成功才能正確的登錄系統(tǒng)。 chatlog 表簡(jiǎn)介 chatlog 表視圖如表 23所示: 表 23 chatlog 表 FROMUSER TOUSER DATETIMEN LOGS Key 張三 09053003234351 你好 張三 Key 09053005234521 哈嘍 Tom 王二 09053008443213 測(cè)試 1 Tom 張三 09053008452313 測(cè)試 2 王二 Key 09053009553234 測(cè)試 3 Yuki 王二 09053002113452 測(cè)試 4 張三 Tom 09053001235252 測(cè)試 5 chatlog 表共有 FROMUSER、 TOUSER、 DATETIMEN、 LOGS 四字段,分表存放聊天記錄的發(fā)送方、接 收方、時(shí)間、內(nèi)容。 TOUSER 字段為聊天記錄接收方姓名,與表 2 中 name 字段外鍵關(guān)系,所以必須為 user中用戶(hù)名稱(chēng)一致。 LOGS 此字段用以存放聊天記錄,字段數(shù)據(jù)類(lèi)型為 TEXT,所以可輕松用于可進(jìn)行大數(shù)據(jù)編輯。無(wú)論機(jī)器上安裝了哪一個(gè) DLL,只要函數(shù)的名字,參數(shù)含義以及最終的功能是相同的,應(yīng)用程序就可以調(diào)用這些函數(shù)。 局域網(wǎng)內(nèi) 的每一個(gè)站點(diǎn)都有一個(gè)數(shù)字地址稱(chēng)為 IP 地址,通常是由 “ .” 分開(kāi)的四個(gè)數(shù)。多數(shù) 端 口的工作是基于連接的:兩個(gè)程序在每一端用一個(gè) 端 口形成一個(gè)連接,然后沿著該連接收發(fā)數(shù)據(jù)。 實(shí)際上是作為 WinSock 應(yīng)用程序和 TCP/IP 協(xié)議棧之間的中間層。但是重要的事情是用戶(hù)必須注意用戶(hù)使用的 必須和 TCP/IP 的版本號(hào)一致。由于這次課程設(shè)計(jì) 是實(shí)現(xiàn)點(diǎn)到點(diǎn)的可靠連接,所以在此使用 TCP 連接方式。 客戶(hù)機(jī)一方, TCP/IP 應(yīng)用程序功能如下: ( 1) 打開(kāi)通信信道(申請(qǐng)一套接字),并連接到服務(wù)器在主機(jī)的保留端口,該端口對(duì)應(yīng)服務(wù)器的 TCP/IP 進(jìn)程。 ( 3) 從服務(wù)器方收到最終應(yīng)答結(jié)果,或在不再請(qǐng)求時(shí)關(guān)閉信道并終止客戶(hù)機(jī)進(jìn)程。 ( 2) 等待客戶(hù)請(qǐng)求到達(dá)指定端口。 ( 4) 繼續(xù)等待客戶(hù)機(jī)請(qǐng)求。 綜上所述, TCP/IP 應(yīng)用中的服務(wù)器程序必須先于客戶(hù)機(jī)進(jìn)程啟動(dòng),直到對(duì)客戶(hù)機(jī)的響應(yīng)結(jié)束或強(qiáng)迫終止。 圖 21 C/S 模式 二者的結(jié)合( DBA) C 的連接 : C 提供了與底層數(shù)據(jù)庫(kù)系統(tǒng)緊密的連接。 C 連接數(shù)據(jù)庫(kù)的方式有兩種: 方式一, 通過(guò)使用 C 的 DATA 控件 ;方式二, 通過(guò)使用由 C 提供的專(zhuān)用的直接與數(shù)據(jù)庫(kù)相連的接口 。 DATA 在數(shù)據(jù)庫(kù)中的信息與將信息顯 示給用戶(hù)看的 C 程序之間架起了一座橋梁。缺省情況下, DATA控件根據(jù)數(shù)據(jù)庫(kù)中的一個(gè)或多個(gè)數(shù)據(jù)表建立一個(gè) dynasettype(動(dòng)態(tài)集合)類(lèi)型的記錄集合。 DATA 控件還提供了用來(lái)瀏覽不同記錄的各種跳轉(zhuǎn)按鈕。 客戶(hù)端安裝在與服務(wù)器同一局域網(wǎng)的任意一臺(tái)計(jì)算機(jī)上,用戶(hù)通過(guò)正確用戶(hù)名與密碼便可登錄,并進(jìn)行與服務(wù)器或者其他客戶(hù)端的即時(shí)通信。 連接服務(wù)器 使用類(lèi): 為 TCP 網(wǎng)絡(luò)服務(wù)提供客戶(hù)端連接,類(lèi): 提供用于網(wǎng)絡(luò)訪(fǎng)問(wèn)的基礎(chǔ)數(shù)據(jù)流。//與服務(wù)器的連接 (客戶(hù)端 ) private NetworkStream stream。代碼如下: tcpCli = new TcpClient()。//連接遠(yuǎn)程服務(wù)器 其中 IP文本框內(nèi)容 。 開(kāi)啟新線(xiàn)程用于接收服務(wù)器發(fā)回的消息 在計(jì)算機(jī)的同一線(xiàn)程內(nèi)同時(shí)處理發(fā)出與接收的消息是沒(méi)有保證的,所以編寫(xiě) Incept()函數(shù)來(lái)接受服務(wù)器的請(qǐng)求。聲明新線(xiàn)程,并啟動(dòng),代碼如下: ThreadStart incept = new ThreadStart()。 ()。 創(chuàng)建字符串,以“ CON”作為前綴,并以“ |”符號(hào)將用戶(hù)名與密碼隔開(kāi),以便服務(wù)器進(jìn)行分析,代碼如下: string userName = ()。 消息格式為:“ CON|用戶(hù)名 |密碼 |”。 (outbytes, 0, )。 接收服務(wù)器發(fā)回的指令 在新的線(xiàn)程內(nèi),啟動(dòng)接收函數(shù),接收服務(wù)器發(fā)回的不同信息,并判斷、處理。 接收發(fā)回的原始消息并還原 因?yàn)榉?wù)器發(fā)回的指令同樣為字符編碼數(shù)組,所以先聲明一個(gè) Byte 類(lèi)型的數(shù)組,用以接收服務(wù)器的原始信息: byte[] buff = new byte[10000000]。//消息長(zhǎng)度 len = (buff, 0, )。 分析處理服務(wù)器發(fā)回的指令 因?yàn)榉?wù)器發(fā)回的消息與客戶(hù)端發(fā)出的消息類(lèi)似,都是以指令名稱(chēng)作為前綴,并以“ |”符號(hào)作 為分隔符,所以,聲明一個(gè)字符串型數(shù)組,并把消息內(nèi)以“ |”符號(hào)隔開(kāi)的各字符串放入此數(shù)組中: string[] token = (new Char[] { 39。 })。這樣,可以通過(guò)對(duì) token[0]內(nèi)字符串的判斷達(dá)到分析指令的目的??蛻?hù)端接收此消息,處理后,一 個(gè)字符串?dāng)?shù)