熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> JSP教程 >> 正文

用JAVA編制Internet電子白板軟件

2022-06-13   來源: JSP教程 

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

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.