国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

用JAVA編制Internet電子白板軟件

2019-11-18 13:26:33
字體:
來源:轉載
供稿:網友

  前言
    隨著Internet的迅速發(fā)展,在Email、WWW、FTP等傳統(tǒng)的非實時應用日趨成熟的同時,廣大網絡用戶對在線實時交流的需求不斷擴大,如網上會議、遠程教學、協(xié)同工作等。這方面的應用軟件也日益豐富起來。該類軟件主要分為兩類,一種是以目前BBS和主頁上的聊天室為代表的純文字型的交流工具;另一種就是本文要介紹的電子白板類交流工具。電子白板除了具備聊天室的全部功能外,更重要的是,它還引入了繪畫圖形交流功能,使網上交流的形象性和直觀性大大加強了,彌補了文字交流的不足。當分布在Internet不同位置的用戶用白板進行交流時,一個人在自己的白板上繪制的圖形可以馬上在別人的白板上顯示出來,好象大家都在同一塊白板上繪畫,彼此間的距離感大大縮短了。
  
    目前具有電子白板功能的軟件有微軟的Netmeeting等。此類軟件在使用前需要用安裝盤安裝(Netmeeting是Internet EXPlorer 4.0的選裝件),在設置完成后才能使用。相比而言,在主頁中用java Applet實現(xiàn)白板功能就顯得優(yōu)勢很大。因為它不需要傳統(tǒng)軟件的下載、安裝和設置的繁瑣步驟,只要用支持JAVA的瀏覽器連接到該Applet所在主頁,就可以使用白板。用于瀏覽器的普及性(大部分常用瀏覽器都支持JAVA,如InternetExploer3.0與Netscape Navigator 3.0及以上版本)使得這種電子白板的潛在客戶群是巨大的。此外,用JAVA編制電子白板軟件還有一個顯而易見的優(yōu)勢,就是整個軟件(尤其是白板服務器)無須重新修改編譯就可在NT、Unix、linux等支持JAVA的平臺上運行。
  
    目前基于瀏覽器和JAVA的電子白板正處于起步階段,筆者尚未在網上看到該類軟件。由于工作需要,筆者自行開發(fā)了一套此類電子白板軟件。這里想將開發(fā)中的一些經驗介紹給大家,以達到共同交流的目的。
  
  工作原理
    電子白板有兩種實現(xiàn)模型,一種是無白板服務器,因此僅支持兩個用戶直接連結;另一種是有白板服務器,原則上不限制同時上線人數(shù)和交談室個數(shù),具體實現(xiàn)上可視服務器性能和需要而定。本文要介紹屬于后者。
  
    當用戶需用白板與他人交流時,需要先用瀏覽器連到Applet所在主頁,Applet運行后會連接到該白板服務器,和服務器建立TCP連接。每個用戶可以在自己的白板上(嵌在Applet畫面中)繪制圖形和輸入文字,Applet會將這些信息通過已建立的網絡連接發(fā)往白板服務器,并不斷偵聽、接收來自白板服務器的圖形和文字信息,將其再現(xiàn)在用戶的白板中。白板服務器的作用是不斷偵聽、接收來自各Applet的信息,并將其轉發(fā)給其他用戶。
  
    由于瀏覽器對Java Applet的限制,使得Applet只能訪問發(fā)送該Applet的宿主主機,因此只能在該Applet所在主機上運行白板服務器,使得Applet能建立和遠程白板服務器的聯(lián)系。
  
  功能設計
    一個實用的電子白板系統(tǒng)應該具備以下基本功能:
  
  用戶在瀏覽到白板主頁時,需登錄后才能進行交流。這將提供交流時用的名字,必要時還可做權限檢查。
  
  用戶能夠根據(jù)交談室的交談主題選擇參加和退出現(xiàn)有的交談室,并且能建立新的交談室。可以根據(jù)該電子白板系統(tǒng)的應用領域和需要附加一些權限設置。
  
  用戶只能和在同一交談室中的用戶交流。一個交談室的信息對于別的交談室是不可見的。
  
  白板應至少具有一些如更換畫筆顏色、清除畫板(僅影響自己的白板)等方便用戶的功能。
  
  白板應具有一個操作提示和操作信息反饋欄,對用戶顯示一些操作提示和操作結果信息,這樣可以方便用戶使用。
  
  用戶應能暫停和恢復自己的白板工作。
    為了增加白板的實用價值,可以考慮增加如與windows畫筆工具類似的畫正方形、圓形等類似功能。本例作為電子白板基本模型的建立,故沒有加入這些功能。實際上,只要了解了下面要介紹的白板通訊協(xié)議集的設計原則,增加以上功能是非常輕易的。
  
  通訊協(xié)議集的制定
    由于JAVA內置的標準基礎通訊協(xié)議是TCP/ip,所以我們只需在其基礎上建立電子白板的應用層協(xié)議集。協(xié)議集的模型將采用服務器/客戶機的請求/應答模式。可以根據(jù)需要實現(xiàn)的白板功能制定通訊協(xié)議集,協(xié)議集中包括登錄、圖形傳輸(分服務器發(fā)出和客戶機發(fā)出兩部分)、文字傳輸(分服務器發(fā)出和客戶機發(fā)出兩部分)、服務器要求刷新交談室及成員名單、客戶機要求刷新交談室及成員名單、加入指定交談室、退出交談室、建立新交談室、暫停/恢復交流等部分。
  
    由于已經依靠TCP/IP協(xié)議保證數(shù)據(jù)傳輸?shù)恼_性,所以在這個電子白板的通訊協(xié)議集的設計中應在保證功能的前提下盡量簡潔,來提高帶寬利用率。白板通訊協(xié)議集的細節(jié)可參考如下:
  
    注重:
    (S)表示該部分由服務器發(fā)出,客戶機接收;
    (C)表示該部分由客戶機發(fā)出,服務器接收;
  
    數(shù)據(jù)格式表示:引號之間表示字符串,(short)表示短整形數(shù)(2字節(jié)),(int)表示標準整形數(shù)(4字節(jié))。
  
  登錄(C):"log"→用戶名字符串。
  
  圖形傳輸(客戶機發(fā)出)(C):"draw"→(int)顏色值→(short)直線起點橫坐標→(short)直線起點縱坐標→(short)直線終點橫坐標→(short)直線終點縱坐標。
  
  圖形傳輸(服務器發(fā)出)(S):"draw"→(int)顏色值→(short)直線起點橫坐標→(short)直線起點縱坐標→(short)直線終點橫坐標→(short)直線終點縱坐標。
  
  文字傳輸(客戶機發(fā)出)(C):"text"→用戶在白板對話框中輸入的文字字符串。
  
  文字傳輸(服務器發(fā)出)(S):"text"→文字輸入者姓名字符串→該用戶輸入的文字字符串。
  
  服務器要求刷新交談室及成員名單(S):"refresh"→交談室1主題字符串→交談室1中的用戶1姓名字符串→交談室1中的用戶2姓名字符串→...→"complete"→交談室2主題字符串→交談室2中的用戶1姓名字符串→交談室2中的用戶2姓名字符串→...→"complete"→...→最后一個交談室主題字符串→最后一個交談室中的用戶1姓名字符串→最后一個交談室中的用戶2姓名字符串→...→"complete"→"ok"。
  
  客戶機要求刷新交談室及成員名單(C):"refresh"。(服務器收到此命令,會執(zhí)行前面的服務器要求刷新交談室及成員名單子協(xié)議,以響應客戶機請求)
  
  加入指定交談室(C):"join"→申請加入的交談室主題字符串。
  
  退出交談室(C):"quit"。
  
  建立新交談室(C):"new"→申請建立的新交談室主題字符串。(服務器收到此命令,會自動在該用戶原來所在的交談室中注銷,并使該用戶成為新交談室的一員)
  
  暫停交流(C):"pause"。
  
  恢復交流(C):"continue"。
    以上為本電子白板軟件所遵循的通訊協(xié)議集。這個協(xié)議集的可擴充性很強,可以隨時按增加的功能擴充協(xié)議集。例如需要傳送圓形圖案,則可將如下協(xié)議加到協(xié)議集中:"circle"→(int)顏色值→(short)圓心橫坐標→(short)圓心縱坐標→(short)圓半徑。
  
  編程實現(xiàn)
    程序設計分服務器JAVA application和客戶端Java Applet兩部分進行。
  
    編程中需要注重以下幾點:
  
  服務器程序不要采用客戶端接入時建立用戶線程,退出交談室時銷毀線程的工作流程。因為有些操作系統(tǒng)的線程操作機制不夠健全,在線程銷毀時線程所占資源不能被完全釋放,以致于在白板服務器運行的過程中將逐漸消耗掉系統(tǒng)資源。所以應在服務器初始化時按照最大答應同時上線的用戶數(shù)建立所有用戶服務線程。這些線程將等待客戶端接入,當用戶退出交談室時線程并不銷毀,而是清除用戶數(shù)據(jù),重新進入等待接入狀態(tài),預備為下一個用戶服務。這樣就保證了白板服務器可以長期可靠運行。
  
  當用戶在白板上連續(xù)繪畫時可能產生大量的圖形數(shù)據(jù),客戶端Applet若在白板的AWT事件處理程序中完成將這些數(shù)據(jù)傳輸給服務器的任務,則很有可能由于網絡I/O的瓶頸作用,使得AWT事件處理線程受阻,從而影響白板Applet、瀏覽器、其他正在運行的應用軟件的界面相應性。解決的辦法就是使Applet再建立一個后臺繪圖數(shù)據(jù)傳輸線程,白板的AWT事件處理程序將用戶的繪圖數(shù)據(jù)通過管道流(PipedStream)傳輸給這個線程后就返回,把網絡傳輸?shù)娜蝿樟艚o這個線程進行。
  
  在服務器和客戶端Applet中,協(xié)議集每一個子協(xié)議的實現(xiàn)都要分別建立一個同步塊(synchronize),該子協(xié)議的全部操作都要在這個同步塊內完成,以限制自由訪問網絡接插建立的輸入流和輸出流。使得當一個線程執(zhí)行一個子協(xié)議時能夠獨占這些網絡資源,而使別的線程不能訪問這些資源,以保證線程能夠完整正確地執(zhí)行子協(xié)議。但是由于同步操作會降低線程調度和執(zhí)行效率,所以要在確保子協(xié)議完整執(zhí)行的前提下盡量縮小同步代碼塊的范圍。
  
  由于協(xié)議集中的數(shù)據(jù)類型既有字符串又有整形數(shù),因此在程序中選用DataInputStream和DataOutputStream作為數(shù)據(jù)輸入流和輸出流。此外,由于UTF格式的文本支持中文字符集,且在字符串中已包含長度信息,可以方便數(shù)據(jù)讀取,故在本程序的網絡通信中的字符串全部采用UTF格式。設計自己的白板程序時,可以根據(jù)需要換用其他文本格式和編碼規(guī)則,但一定要保證輸入流和輸出流采用的是同一種格式和編碼。
  
  考慮到目前Netscape Navigator 3.0和Internet Explorer 3.0目前仍普遍使用,而這兩種瀏覽器的JAVA虛擬機都不支持較新的JDK1.1標準,所以在本程序的客戶機Applet部分中沒有使用JDK1.1特有的類庫。
    首先介紹服務器程序的編制。需確定主要的幾個類及其成員函數(shù)。列表如下:
  
  ChatServer類:服務器程序的啟動類。
  
  ChatServer():建立服務器治理界面。
  
  initServer():建立服務器插結,初始化交談室數(shù)據(jù),按照

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 子洲县| 张家港市| 克什克腾旗| 盐山县| 阳山县| 延寿县| 大埔县| 芮城县| 云安县| 龙胜| 石景山区| 肃南| 错那县| 宜川县| 团风县| 大悟县| 宣武区| 望谟县| 平顶山市| 中超| 洪湖市| 汉中市| 金平| 吉水县| 舟曲县| 扶余县| 濮阳县| 名山县| 鄯善县| 锡林浩特市| 邻水| 米林县| 六枝特区| 垫江县| 安乡县| 奈曼旗| 吉林省| 遵义市| 顺昌县| 武邑县| 桃源县|