【正文】
ResultSet rsMessage=(JNUM)。 ResultSet rs=(JNUM)。i()。 } } 服務(wù)端單線程上線處理代碼 下邊是服務(wù)器端上的單線程的處理代碼,主要通過(guò)網(wǎng)絡(luò)流來(lái)讀取客戶端發(fā)送的消息,然后將消息分解,用來(lái)區(qū)分消息的類型,譬如是群消息還是個(gè)人消息等。 } } Catch(IOException e) { (Erro:+e)。i++) //陌生人的信息 { jchatExist=(JICQChatFrame).get(i)。 } } if(isExistFrame==0)//聊天窗口沒(méi)有打開(kāi),新建一個(gè)窗口 { JICQChatFrame jchat=new JICQChatFrame(p,this)。 else p=null。下邊是用戶交互的用例圖。 提交注冊(cè)資料注冊(cè)服務(wù)器驗(yàn)證結(jié)果JI C Q 使用者注冊(cè) JI C Q號(hào)碼用例 圖 6 注冊(cè)用例交互圖 下邊 是用戶注冊(cè)的活動(dòng)圖。 。 系統(tǒng)配置要求 推薦配置如下 : CPU2G 以上 , 內(nèi)存 512 以上 ,運(yùn)行平臺(tái)基于 Windows 平臺(tái)。幸運(yùn)的是, Eclipse 附帶了一個(gè)標(biāo)準(zhǔn)的插件集,包括 Java 開(kāi)發(fā)工具( Java Development Tools, JDT)。 SWING 界面設(shè)計(jì): java 的擴(kuò)展包,其中包括眾多的控件以及豐富的控件操作功能,使用戶可以簡(jiǎn)單的利用它畫(huà)出應(yīng)用程序的界面,結(jié)合 帶的絕對(duì)定位類包,可以設(shè)計(jì)出非常好看的用戶界面。通過(guò) TCP 協(xié)議傳輸,得到的是一個(gè)順序的無(wú)差錯(cuò)的數(shù)據(jù)流。在這種情況下,一個(gè) TCP連接只能和固定的連接方通訊,而 UDP應(yīng)用本身就可以 接受不同數(shù)據(jù)來(lái)源的數(shù)據(jù)包,所以在 NAT轉(zhuǎn)換的時(shí)候能夠完成兩個(gè)客戶端之間的通訊,從而達(dá)到了客戶端直接通訊的目的。其根本原因是 OICQ使用了 UDP協(xié)議,這樣用戶之間的通訊自己完成就減少了服務(wù)器的負(fù)擔(dān)。當(dāng)你和你的 OICQ伙伴進(jìn)行聊天時(shí),如果你和對(duì)方的連接比較穩(wěn)定,你和他的聊天內(nèi)容都是以 UDP的形式,在計(jì)算機(jī) 之間傳送。 該系統(tǒng)設(shè)計(jì)的意義 伴隨著 當(dāng)今互聯(lián)網(wǎng)迅速 發(fā)展 ,網(wǎng)上通訊成為一種必不可少的 通訊 習(xí)慣,該系統(tǒng)的設(shè)計(jì) 就 是為了實(shí)現(xiàn) 在 互聯(lián)網(wǎng)上的即時(shí)通訊,它是利用當(dāng)今最為流行的java 編程語(yǔ)言來(lái) 實(shí)現(xiàn) 即時(shí)通訊工具的雛形,同時(shí) 在系統(tǒng)開(kāi)發(fā)過(guò)程中所用的 都是java 常用的技術(shù)或者難點(diǎn),比如用 java 的 swing 怎么去做一個(gè)界面美觀的應(yīng)用程序、 java 的網(wǎng)絡(luò)編程技術(shù) 的原理與應(yīng)用 、以及 如何根據(jù) J2EE 規(guī)范 去 開(kāi)發(fā)一個(gè)基于 Jsp 和 Servlet 的 Web 應(yīng)用 等關(guān)鍵技術(shù)。運(yùn)行時(shí)系統(tǒng)在方法的調(diào)用棧中查找,從生成例外的方法開(kāi)始進(jìn)行回朔,直到找到包含相應(yīng)例外處理的方法為止,這一個(gè)過(guò)程稱為捕獲 (catch)一個(gè)例外。 該系統(tǒng)具有 相對(duì) 比較漂亮的界面以及類似于 的很多功能,比如可以和好友進(jìn)行交流以及離線發(fā)送與好友管理、可以加入不同的群,即時(shí)發(fā)送、即時(shí)回復(fù)等功能 。力圖使 系統(tǒng)具有安全、高效、實(shí)用、支持 在不同系 統(tǒng)平臺(tái)運(yùn)行 等特點(diǎn)。 關(guān)鍵詞 : 即時(shí)通訊 ; 多線程 ; SOCKET 編程; JSP Design and Development of a Simple Instant Communication Tool Abstract Instant Message is currently the most popular way to municate on the Inter,so various Instant Messaging software are continuously appearing。 技術(shù) 背景 技術(shù)上采用 sun 公司的 java 語(yǔ)言,該語(yǔ)言有很多有點(diǎn),比如多線程、網(wǎng)絡(luò)流概念、異常捕獲處理、安全性以及速度與性能等方面,并且具有可以一次編寫(xiě)、到處運(yùn)行的跨平臺(tái)優(yōu)點(diǎn)。 所以, java 的例外處第 2 頁(yè) 共 30 頁(yè) 理使非常方便的。通過(guò)設(shè)計(jì)和開(kāi)發(fā)該系統(tǒng), 使自己所學(xué)的理論 知識(shí) 得到實(shí)踐應(yīng)用, 也對(duì)即時(shí)通訊軟件的通訊原理有了比較深刻的認(rèn)識(shí),大大的提高了自己的動(dòng)手能力和解決問(wèn)題的能力, 為今后工作打下堅(jiān)實(shí)的基礎(chǔ)。如果你和對(duì)方的連接不是很穩(wěn)定 , 服務(wù)器將為你們的聊天內(nèi)容進(jìn)行 “中轉(zhuǎn) ”。那么到底原理是什么樣的,為什么 TCP應(yīng)用就不能達(dá)到這一要求。 總的來(lái)說(shuō), OICQ 的應(yīng)用在客戶端方面符合即時(shí)通訊系統(tǒng)的模型。發(fā)送方和接收方的成對(duì)的兩個(gè) socket 之間必須建立連接,以便在 TCP 協(xié)議的基礎(chǔ)上進(jìn)行通信,當(dāng)一個(gè) socket(通常都是 server socket)等待建立連接時(shí),另一個(gè) socket 可以要求進(jìn)行連接,一旦這兩個(gè) socket 連接起來(lái),它們就可以進(jìn)行第 4 頁(yè) 共 30 頁(yè) 雙向數(shù)據(jù)傳輸,雙方都可以進(jìn)行發(fā)送或接收操作。 JSP與 SERVLET技術(shù): JSP和 SERVLET是在 j2ee平臺(tái)下開(kāi)發(fā) WEB應(yīng)用的基礎(chǔ), JSP是由 SUN公司倡導(dǎo) 眾多公司參與一起建立的一個(gè)動(dòng)態(tài)網(wǎng)頁(yè)標(biāo)準(zhǔn)技術(shù), JSP技術(shù)為建立具有動(dòng)態(tài)生成內(nèi)容的 WEB應(yīng)用提供了一種簡(jiǎn)便而且功能強(qiáng)大的途徑,它可以快速開(kāi)發(fā)出與平臺(tái)無(wú)關(guān)的基于 WEB的應(yīng)用 , JSP是更高級(jí)的 SERVLET,在運(yùn)行的時(shí)候 JSP先被轉(zhuǎn)化為 SERVLET。 雖然大多數(shù)用戶很樂(lè)于將 Eclipse 當(dāng)作 Java IDE 來(lái)使用,但 Eclipse 的目標(biāo)不僅 限于此。 客戶端需要安裝 java 虛擬機(jī), 同時(shí) 還 要 有 JICQ 的客戶端程序。 : 。 第 10 頁(yè) 共 30 頁(yè) 圖 7 用戶注冊(cè)活動(dòng)圖 登錄模塊設(shè)計(jì) 該模 塊主要給注冊(cè)成功的用戶提供一個(gè)登錄界面,用戶根據(jù)自己注冊(cè)的帳號(hào)信息可以與服務(wù)器交互, 如果提供的信息通過(guò)服務(wù)器的驗(yàn)證便可以 成功的登錄系統(tǒng), 成功 登錄系統(tǒng)之后,可以進(jìn)行一些操作,比如和好友聊天等, 使用該模塊之前必須安裝一個(gè)客戶端。 JI C Q 用戶之間信息交互好友申請(qǐng)好友添加驗(yàn)證JI C Q 用戶 A發(fā)送信息JI C Q 用戶 B驗(yàn)證 圖 11 用戶交互用例圖 第 13 頁(yè) 共 30 頁(yè) 用戶之間聊天的信息主要通過(guò)聊天服務(wù)器進(jìn)行中轉(zhuǎn),用戶之間聊天內(nèi)容主要存儲(chǔ)在客戶端的一些文件中,可以通過(guò)查看聊天功能來(lái)進(jìn)行對(duì)這些聊天信息的讀取。 } if(p!=null) //隊(duì)列中 有 該好友 { JICQChatFrame jchatExist=null。 (jchat)。 if ((hisJICQ)) { isExistFrame=1。 (1)。 While(true) { line=()。i++) {PersonThread tt=(PersonThread)(i)。 ArrayList flist=new ArrayList(50)。 if(rsMessage!=null) while(()) { int FriendJICQ=(FriendJICQ)。 (Allmsg,JNUM)。 Statement st = null。 //設(shè)定編碼方式,從 配置文件中獲取該參數(shù) = (encoding)。 (encoding)。 難點(diǎn)之一,在注冊(cè)模塊遇到數(shù)據(jù)庫(kù)連接不成功的問(wèn)題,通過(guò)請(qǐng)教老師,成功解決問(wèn)題。該系統(tǒng)可以 運(yùn)行在互聯(lián)網(wǎng)或者局域網(wǎng)上,使用戶可以很方便的進(jìn)行信息的交流。 [6] 核心研究室 .深入淺出 Java Swing 程序設(shè)計(jì) [M].北京:中國(guó)鐵道出版社 ,2020。除非另有說(shuō)明,本文的工作是原始性工作。 the fly sat upon the axletree of the chariot wheel, and said. What a dust do I raise? So are there some vain persons, that whatsoever goeths indeed! They could tell us something worth hearing, if they only knew how to talk. It39。 for all bravery stands upon parisons. They must needs be violent, to make good their own vaunts. Neithe r can they be secret, and therefore not effectual。 beaucoup de bruit, peu de fruit: much bruit, little fruit Yet certainly there is use of this quality, in civil affairs. Where there is an opinion, and fame to be created, either of virtue, or greatness, these men are good trumpeters. Again, as Titus Livius noteth, in the case of Antiochus, and the Aetolians。s eve I was reading the book, and had lost myself in it so pletely, that I fot my usual New Year39。 ( 2)學(xué)??梢圆捎糜坝?、縮印或其他復(fù)制方式保存學(xué)位論文。 [8] 哈羅德 [美 ].java網(wǎng)絡(luò)編程 [M].劉東華譯 .北京:中國(guó)電力出版社 ,2020。即時(shí)通訊的發(fā)展速度和應(yīng)用可以說(shuō)是 Inter乃至整個(gè)世界的一個(gè)奇跡,我真誠(chéng)的希望能有更多的科學(xué)工作者和專家加入到這一領(lǐng)域的研究中來(lái) 。解決的方法是下載 sql server2020 的 sp3 補(bǔ)丁包,如果沒(méi)有打該補(bǔ)丁包,就會(huì)出現(xiàn)連接數(shù)據(jù)庫(kù)不成公的問(wèn)題。 } //銷毀該字符過(guò)濾器 public void destroy() { =null。 if(value==null)=true。 //創(chuàng)建數(shù)據(jù)庫(kù)的連接 Conn=(jdbc:seName=JICQ,sa, sa)。 } } 系統(tǒng)運(yùn)行的效果圖 登錄界面 該界面提供用戶輸入自己注冊(cè)號(hào)碼和相應(yīng)的密碼,然后 登錄系統(tǒng),如果還沒(méi)有注冊(cè)帳號(hào),可以點(diǎn)“申請(qǐng)”進(jìn)行帳 號(hào)的申請(qǐng)。 String msgHead=(MessageHead)。 } for(int i=0。 (i)。 //將讀取的信息按照特定格式進(jìn)行拆分 StringTokenizer stk=new StringTokenizer(line,)。 PersonThread you。 } } } 服務(wù)器端監(jiān)聽(tīng)與轉(zhuǎn)發(fā)消息代碼 下邊 是服務(wù)器端的監(jiān)聽(tīng)程序,如果發(fā)現(xiàn)有 socket 連接,就創(chuàng)建一個(gè)與該連接所對(duì)應(yīng)的一個(gè)線程 ,該線程主要用來(lái)處理用戶之間的信息交互 。 } else {//在聊天窗口中顯示該信息 (headmsg,msg)。//判定聊天窗口是否已經(jīng)打開(kāi) for(int i=0。 圖 14 數(shù)據(jù)庫(kù)物理模型 第 15 頁(yè) 共 30 頁(yè) 數(shù)據(jù)字典 下邊是關(guān)系數(shù)據(jù)庫(kù)中每個(gè)表所對(duì)應(yīng) 的字段的詳細(xì) 信息 表 1 JUSERS(用戶表 )用來(lái)存放用戶注冊(cè)時(shí)的基本信息