<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-71  評論-4  文章-0  trackbacks-0
    Java的 網絡 功能與編程
    徐迎曉
    (上海大學計算中心25#)
    ???????????????????????
    摘??要:Java語言是Internet上最熱門的編程語言,本文針對

    ???????Java的
    網絡 功能,對Java從 網絡 上獲取圖象、聲音、

    ???????HTML文檔及文本文件等編程方法作了初步的介紹,同

    ???????時介紹了動態獲取
    網絡 上資源的方法作了介紹。文中

    ???????提供了大量簡明易懂的實例。

    關鍵詞:Java;Internet;
    網絡



    ????Java語言是Internet上新興的編程語言,對Java的特性以及基

    本的編程方法已有很多文章作過介紹。但是,廣大Java愛好者更希望

    了解Java更深一步的編程方法,本文就Java的
    網絡 功能及其編程方法

    作一初步的介紹。

    ????為了方便初次接觸Java的讀者,本文先就Java編程的一些常識

    作簡單介紹。



    ????一、Java編程簡介



    ????1. 編程環境:



    ????對于大部分讀者,以下的配置是較為經濟的一種選擇:

    操作系統 Win95

    編譯軟件 JDK1.01

    瀏覽軟件 Netscape2.0以上(32位)



    ????2. 編程方法:



    ????先用文本編輯器如Edit、NotePad等輸入Java程序,以.java為

    文件名后綴存盤。

    ????再執行命令行:“Javac 文件名”來編譯Java程序。編譯后生成

    后綴為.class的字節碼文件。

    ????最后,如果是Java Applitcation,則執行命令行:“Java 字

    節碼文件名”來運行Java程序。

    ????如果是Java Applet,則用文本編輯器輸入調用該Java Applet

    的HTML 文檔, 以 .htm 為文件名后綴存盤。 再執行命令行:

    “appletviewer HTML文件名”來運行Java Applet。或用Netscape

    打開該HTML文檔。



    ????3. 關于本文中程序的說明



    ????為了使程序能夠最簡潔地體現其所代表的編程方法,本文中的程

    序一般采用最簡單的形式,省略了線程等內容。因此,本文的程序不

    是“好”的程序,但最容易為初學者理解。

    ????本文的所有程序經編譯后,生成的字節碼文件及對應的HTML文檔

    已上載到http://www.shu.edu.cn/~xyx/test/jvnet, 均可正確

    運行。連入Internet的讀者可用瀏覽器打開該地址,查看運行效果。

    ????連入Internet的讀者也可以在本地硬盤輸入并編譯本文的程序,

    用Netscape的File/Open File菜單打開HTML文檔,體會編程方法并

    查看運行效果。如果讀者想將Java Applet 放到自己的主機上或其他

    ftp服務器上,在Netscape中用http協議或ftp協議調用,出于安全

    性限制,應作如下修改:

    ???如果讀者在某個WWW主機上有帳號,可以做個人Homepage(一般

    在用戶根目錄創建WWW或public_html目錄即可,Homepage的地址為

    http://HostName/~個人帳號),可將本文程序中對應的

    http://www.shu.edu.cn/~xyx/部分修改為讀者自己的Web結點地址,

    然后將編譯后生成的字節碼文件及對應的HTML文檔上載到自己的結點上。

    ????如果讀者的計算機連入了Internet,也可以找一個可以上載的

    ftp結點,如:ftp://ftp.shnet.edu.cn/incoming,將本文程序中

    對應的http://www.shu.edu.cn/~xyx/部分修改為ftp結點的地址,

    將編譯后生成的字節碼文件及對應的HTML文檔上載到該結點上,以查

    看運行效果。

    ????如果讀者的計算機沒有聯網,也可以在單機上運行Web 服務軟

    件如Webstar for Win95,將本文程序中對應的http: //www. shu

    .edu.cn/~xyx/部分修改為“http://本地IP地址”的形式,來模擬

    網絡 編程。



    ????二、Java
    網絡 功能及獲取 網絡 上資源的一般步驟



    ????Java程序可以獲取
    網絡 上結點的圖象、聲音、HTML文檔及文本

    等資源,并可以對獲得的資源進行處理。例如Java程序可以每隔一

    定時間讀取某結點提供的最新數據,并以圖表的形式顯示出來。

    ????在編程處理上,一般先生成一個URL類型的對象,然后用 Java

    中相應的方法(method)獲取該對象所代表的資源。下面分別介紹

    Java
    網絡 功能的幾個例子,并由此介紹幾種不同的編程方法。



    ????三、從
    網絡 上獲取圖象



    ????Java Applet可以直接從
    網絡 上結點獲取圖象并顯示出來。 為

    了了解其編程方法和從本地顯示圖象的編程有何不同,我們先不考慮

    網絡 功能,來看一個簡單的圖象顯示的例子:



    ●程序1

    import java.applet.*;

    import java.awt.*;

    public class imag0 extends Applet{

    ??Image image;

    ??public void init() {

    image=getImage(getDocumentBase(),"test.gif");

    ??}

    ??public void paint(Graphics g) {

    ?????g.drawImage(image, 0, 0,this);

    ??}

    }



    ????這是一個最簡單的獲取并顯示圖象的例子, 在該例中, 先用

    getImage(getDocumentBase(),圖象文件名)從HTML文檔所在位置調

    用圖象test.gif,并由此生成一個Image類型的對象image, 然后用

    drawImage(image, 0, 0,this)在屏幕上將圖象顯示出來。

    ????如果想從
    網絡 上其他結點獲取圖象,關鍵是創建對應于 網絡

    其他結點的Image類型的對象,一旦獲得Image類型的對象獲得了,

    便可以對其進行任何可能的圖象操作。

    ????Java提供了如下方法可以創建對應于其他結點的圖象:

    getImage(new URL(字符串))

    ????其使用格式可有兩種:



    ????String??url = "結點URL";

    ????Image image;

    ????try {

    ??????image = getImage(new URL(url));

    ????}

    catch(Exception e){

    System.out.println("Can't open the URL ");

    ????}







    URL imgur=null;

    Image image;

    try {

    ????????????imgur=new URL("結點URL ");

    ?????}

    ?????catch (MalformedURLException e) {

    ????????????System.out.println("Can't open the URL ");

    ?????}

    ?????image=getImage(imgur);



    ????前一種格式用“new URL(url)”生成 URL 對象, 并直接作為

    getImage的參數,后一種格式先用“new URL(url)”生成一個 URL

    對象,再傳給getImage。兩種格式本質上是一樣的。兩種格式中,

    生成URL對象的部分都包含在



    try{

    獲取URL對象

    ???????????????????????????}

    catch (MalformedURLException e) {

    出錯提示

    ???????????????????????????}

    中。

    ????例如要調用http://www.shu.edu.cn/~xyx/img/shnet.jpg結點

    的圖象,第一種格式完整的程序如下:

    ●程序2

    import java.applet.*;

    import java.net.*;

    import java.awt.*;

    public class imag extends Applet{

    ??Image image;

    ??public void init() {

    ????String??url = "http://www.shu.edu.cn/~xyx/img/shnet.jpg";

    ????try {

    ??????image = getImage(new URL(url));

    ????} catch(Exception e){}

    ??}



    ??public void paint(Graphics g) {

    ?????g.drawImage(image, 0, 0,this);

    ??}

    }



    ????第二種格式完整的程序如下:

    ●程序3

    import java.applet.*;

    import java.net.*;

    import java.awt.*;

    public class imag2 extends Applet{

    ??Image image;

    ??URL imgur=null;

    ??public void init() {

    ?????try {

    ??????imgur=new URL("http://www.shu.edu.cn/~xyx/img/shnet.jpg");

    ?????????}

    ????????catch (MalformedURLException e) {



    ????????????????System.out.println("Can't open the URL ");

    ??????}

    ??????image=getImage(imgur);

    ??}

    ??public void paint(Graphics g) {

    ?????g.drawImage(image, 0, 0,this);

    ??}

    }



    ????將上述兩個程序分別以imag.java和imag2. java 存盤, 執行

    javac imag.java和javac imag2.java,將得到編譯后生成的imag

    .class和imag2.class,最后創建調用這兩個Java Applet的HTML文

    檔,如imag.class對應的HTML文檔可如下:

    < html >

    < head >

    < title >Example < /title >

    < /head >

    < center >

    < applet code=imag.class width=550 height=250 >

    < /applet >

    < /html >



    ????將該HTML文檔存入test.html文件,用Netscape打開, 如果你

    的計算機連入了Internet,便可以看到Java Applet 所顯示的從網

    絡上獲得的圖象了。(對于本文中其他不同的Java Applet, 對應

    的HTML文檔只要修改其中相應的“code=imag.class”即可。)



    ????四、從
    網絡 上獲取聲音



    ????Java從
    網絡 上獲取聲音文件并播放聲音的編程方法有兩類,一

    是利用Java提供的play(URL)及play(URL,String) 直接播放
    網絡

    上的聲音文件,另一類是通過getAudioClip(URL)或getAudioClip

    (URL,String)先從
    網絡 上獲取聲音文件,并生成AudioClip 類型的

    對象,然后對該對象進行操作。

    ????前者的使用格式是:



    String??Audur = "結點URL";

    ????????try {

    ?????play(new URL(Audur));????

    ????????} catch(Exception e){}







    String??Audur = "結點URL";

    ????????try {

    ???????????play(new URL(Audur),聲音文件名);

    ????????} catch(Exception e){}

    ????后者使用的格式是:

    String Audur = "結點URL";

    AudioClip??loopClip;

    ????try {

    ???????????loopClip = getAudioClip(new URL(Audur));

    ????????}

    catch(Exception e){

    System.out.println("Can't open the URL ");

    ??????????????????}







    String Audur = "結點URL";

    ????AudioClip??loopClip;

    ????try {

    ???????????loopClip = getAudioClip(new URL(Audur) ,聲音文件名);

    ????????????????????}

    catch(Exception e){

    System.out.println("Can't open the URL ");

    }



    ????上面的四種格式都是將生成URL對象部分--“new URL(url)”

    直接作為play或getAudioClip的參數;和前面處理圖象的例子一樣,

    也可以先用“new URL(url)”獲取一個URL對象, 再傳給 play 或

    getAudioClip。如對第一種play(URL)的格式, 也可采用如下的編

    程格式:

    URL??Audur =null;

    ????????try {

    ???Audur=new URL("結點URL ");

    ????????} catch(Exception e){

    System.out.println("Can't open the URL ");

    ?????}

    ????play(Audur);

    ????下面對前述四種從
    網絡 上獲取并播放聲音文件的格式各舉一簡單的例子,

    以作編程時參考:

    ?????????????????????????●程序4???格式一

    import java.applet.*;

    import java.awt.*;

    import java.net.*;

    public class sound1 extends Applet



    {???AudioClip??loopClip;

    ????public void paint(Graphics g) {

    ????String??Audur = "http://www.shu.edu.cn/~xyx/java/Animator/audio/bark.au";

    ????????try {

    ?????play(new URL(Audur));????

    ????????} catch(Exception e){}

    ????}

    }



    ?????????????????????????????●程序5???格式二

    import java.applet.*;

    import java.awt.*;

    import java.net.*;

    public class sound2 extends Applet

    {???AudioClip??loopClip;

    ?????public void paint(Graphics g) {

    ????????String??Audur = "http://www.shu.edu.cn/~xyx/java/Animator/audio/";

    ????????try {

    ???????????play(new URL(Audur),"bark.au");

    ????????} catch(Exception e){}

    ????}

    }



    ?????????????????????????????●程序6???格式三

    import java.applet.*;

    import java.awt.*;

    import java.net.*;

    public class sound extends Applet{

    ???AudioClip??loopClip;

    ???public void init() {

    ?????String??Audur = "http://www.shu.edu.cn/~xyx/java/Animator/audio/bark.au";

    ????????try {

    ???????????loopClip = getAudioClip(new URL(Audur));

    ????????} catch(Exception e){}

    ????}



    ???public void paint(Graphics g){

    ????????loopClip.loop();

    ???}

    }



    ●程序7??格式四

    import java.applet.*;

    import java.awt.*;

    import java.net.*;

    public class sound0 extends Applet{

    ???AudioClip??loopClip;

    ???URL auur;

    ???public void init() {

    ?????try {

    ????????????auur=new URL("http://www.shu.edu.cn/~xyx/java/Animator/audio/");

    ??????}

    ??????catch (MalformedURLException e) {

    ????????????????System.out.println("Can't open the URL ");

    ??????}

    ??????loopClip = getAudioClip(auur,"bark.au");



    ????}



    ???public void paint(Graphics g){

    ????????loopClip.loop();

    ???}

    }



    ????五、顯示網絡上其他HTML文檔



    ????利用Java提供的getAppletContext().showDocument(URL)可以

    顯示其他結點的HTML文檔,同前面的顯示網絡上其他結點的圖象,

    有兩種格式,下面各舉一例:

    ??????????????????????●程序8???格式一

    import java.applet.*;

    import java.awt.*;

    import java.net.*;

    public class showdoc extends Applet

    {????

    ????URL docur= null;

    ????public void paint(Graphics g) {

    ??????try {

    ????????????docur=new URL("http://www.shu.edu.cn/~xyx/doc/manhua.html");????????

    ??????}

    ??????catch (MalformedURLException e) {

    ????????????????System.out.println("Can't open the URL ");

    ??????}

    ??????if (docur != null) {

    ????????????????????getAppletContext().showDocument(docur,"_blank");

    ??????}???

    ????}

    }



    ??????????????????????????●程序9 格式二

    import java.applet.*;

    import java.awt.*;

    import java.net.*;

    public class showdoc2 extends Applet

    {????

    ???URL docur= null;

    ???public void paint(Graphics g) {

    ??????try {

    getAppletContext().showDocument(new URL("http://www.shu.edu.cn/

    ~xyx/doc/manhua.html"));???????

    ??????}

    ??????catch (MalformedURLException e) {

    ????????????????System.out.println("Can't open the URL ");

    ??????}???

    ???}

    }



    ?????六、讀取網絡上文件內容



    ?????前述的網絡功能只是顯示或播放網絡上結點的圖象、 聲音及

    HTML文檔,并沒有對其內容進行處理。事實上,Java還可讀取網絡

    上文件的內容,并對其內容進行處理。

    ????讀取網絡上文件內容的步驟可如下:

    ????1. 創建一個URL類型的對象

    ????如:

    ????String url = "ftp://202.120.127.218/incoming/test/readtxt.html";

    URL fileur;

    ????????try {

    fileur = new URL(url); }

    ????????catch ( MalformedURLException e) {

    ???????????????System.out.println("Can't get URL: " );

    ????????}

    ????2. 利用URL類的openStream(),獲得對應的InputStream類的對象

    ????如:

    InputStream filecon = fileur.openStream();

    ????3. 將InputStream對象轉化為DataInputStream類的對象

    ????如:

    ????DataInputStream filedata = new DataInputStream(filecon);

    ????4. 讀取內容

    ????如對前面的filedata,可用filedata.readLine() 一行一行讀

    取內容,或用filedata.readchar一個字符一個字符讀取內容。 對

    讀取到的內容,可由Java Applet進行各種處理, 并將處理結果用

    各種方式顯示出來。

    ????下面的例子是讀取 http://www.shu.edu.cn/~xyx/doc/manhua.html

    文件內容的例子,為簡潔起見,該例中只將文件的內容逐行讀出,

    并在文本區顯示出來。

    ●程序10

    import java.io.*;

    import java.net.*;

    import java.awt.*;

    import java.applet.*;

    public class showfile extends Applet{

    ?????URL fileur;

    ?????TextArea showarea = new TextArea("Please wait a while for get

    text",10,70);

    ?????public void init() {

    ????????String url = "http://www.shu.edu.cn/~xyx/doc/manhua.html";

    ????????try { fileur = new URL(url); }

    ????????catch ( MalformedURLException e) {

    ???????????????System.out.println("Can't get URL: " );

    ????????}

    ????????add(showarea);

    }



    ????public void paint(Graphics g) {

    ????????InputStream filecon = null;

    ????????DataInputStream filedata = null;

    ????????String fileline;

    try {

    ????????????????filecon = fileur.openStream();

    ????????????????filedata = new DataInputStream(filecon);

    ????????????????while ((fileline = filedata.readLine()) != null) {

    ????????????????????????showarea.appendText(fileline+"\n");

    }

    }

    catch (IOException e) {

    ????????????????System.out.println("Error in I/O:" + e.getMessage());

    }

    ???}

    }



    ????七、動態使用網絡上資源

    ????在前面介紹的例子的基礎上,可以動態地利用網絡上的資源。

    其方法是編制一個線程,每隔一定時間自動到相應結點讀取最新的

    內容。本文對線程的編制不再展開,讀者可參考有關文章或直接套

    用下面的例子。

    ????例如對上例中讀取http://www.shu.edu.cn/~xyx/doc/manhua

    .html文件內容的例子,加入線程后如下所示。該例子每隔5秒更新

    一次數據。如果http://www.shu.edu.cn/~xyx/doc/manhua.html中

    存放的是一些變化較快的信息如股市行情等,并有程序隨時動態地

    更新其內容,則在Web中加入這種Java Applet,可以讓流覽者得到

    動態的信息。進一步,也可以在程序中對數據進行處理,并用圖形

    方式顯示處理結果。例如將各時刻的數據繪制成曲線,流覽者可以

    看到動態變化的曲線。

    //程序11

    import java.io.*;

    import java.net.*;

    import java.awt.*;

    import java.applet.*;

    public class dynashow extends java.applet.Applet

    ????implements Runnable {

    ????Thread dthread;

    ????URL fileur;

    TextArea showarea = new TextArea("Wait for a while...",10,70);

    ?????public void init() {

    ????????String url = " http://www.shu.edu.cn/~xyx/doc/manhua.html ";

    ????????try { fileur = new URL(url); }

    ????????catch ( MalformedURLException e) {

    ???????????????System.out.println("Can't get URL: " );

    ????????}

    ????????add(showarea);

    ?????}



    ?????public void start() {

    ????????if (dthread == null)

    ????????{

    ????????????????dthread = new Thread(this);

    ????????????????dthread.start();

    ????????}

    ????}

    ????public void stop() {

    ????????if (dthread != null) {

    ????????????????dthread.stop();

    ????????????????dthread = null;

    ????????}

    ????}



    ????public void run() {

    ????????InputStream filecon = null;

    ????????DataInputStream filedata = null;

    ????????String fileline;

    ????????while(true){

    ????????????try {

    ????????????????filecon = fileur.openStream();

    ????????????????filedata = new DataInputStream(filecon);

    ????????????????while ((fileline = filedata.readLine()) != null) {

    ????????????????????????showarea.appendText(fileline+"\n");

    ????????}

    ????????????}

    ???????????catch (IOException e) {

    ????????????????System.out.println("Error in I/O:" + e.getMessage());

    ???????????}

    ???????????try{

    ????????????????dthread.sleep(5000);

    ???????????}

    ???????????catch (InterruptedException e){}

    ???????????repaint();

    ???????}

    ?????}

    }



    ????八、Java網絡能力的限制



    ????出于安全性考慮,在用netscape瀏覽時,Java Applet 只能和

    其所在的主機建立連接,因此,前面的程序編譯后大部分只能存放

    在http://www.shu.edu.cn/~xyx對應的主機上。存放到其他主機時

    需更改程序中的結點地址。否則瀏覽器將顯示安全出錯。

    ????但對顯示網絡上其他HTML文檔沒有此限制(如程序8、9),讀

    者可以將程序編譯后放到任意WWW服務器或FTP服務器,均可正常運

    行。

    ????此外,當瀏覽器從本地盤打開調用Java Applet的HTML文檔時,

    也不受此限制。因此,本文所有的程序都可存放在本地盤編譯,只

    要用netscape的File/Open File菜單打開,便可正確運行。

    ????對于另一種Java程序--Java Application,也無此限制,例

    如對于讀取網絡上文件內容的程序10,對應的Java Application可

    作如下編程:



    ●程序11

    import java.io.*;

    import java.net.*;

    import java.awt.*;

    class showfile2 {

    ?????public static void main(String args[]){

    ????????InputStream filecon = null;

    ????????DataInputStream filedata = null;

    ????????String fileline;

    ????????String url = "http://www.shu.edu.cn/~xyx/doc/manhua.html";

    ????????URL fileur;

    ????????try {

    ???fileur = new URL(url);

    ????????????????filecon = fileur.openStream();

    ????????????????filedata = new DataInputStream(filecon);

    ????????????????while ((fileline = filedata.readLine()) != null) {

    System.out.println(fileline+"\n");

    }

    }

    catch (IOException e) {

    ????????????????System.out.println("Error in I/O:" + e.getMessage());

    }

    ??}

    }

    ????將其以showfile2.java存盤,用javac showfile2.java編譯后,

    只需執行“java showfile2”便可以在屏幕上打印出

    http://www.shu.edu.cn/~xyx/doc/manhua.html 文件的內容。



    ????九、創建URL對象的方法



    ????在前面的例子中我們統一使用new URL(url字符串)的形式創建

    URL對象。其實,Java提供了四種創建URL對象的形式:

    ????1.new URL(url字符串)????本文中的程序均采用此種格式,如:

    new??URL("http://www.shu.edu.cn/~xyx/doc/manhua.html")

    ????2.new URL(協議,主機名,文件名或路徑)????如程序2中的

    String??url = "http://www.shu.edu.cn/~xyx/img/shnet.jpg";

    image = getImage(new URL(url));部分可改為:

    image = getImage(new URL("http","www.shu.edu.cn","/~xyx /img/shnet.jpg"));

    ????3.new URL(協議,主機名,端口號,文件名或路徑)1

    如:new URL("http","www.shu.edu.cn",80, "/~xyx/doc/manhua.html")

    ????4.new URL(基準url,文件名或路徑)



    ????十、實現網絡功能的其他方法



    ????以上著重介紹了利用Java的URL類實現從網絡上獲取聲音、 圖

    象、HTML文檔及文件數據的編程方法。Java的網絡功能很強大,除

    上面介紹的外,還可以利用URLconnection 類實現更廣泛的網絡

    能,如向WWW 服務器上的 CGI 程序發送信息等; 通過 Socket 及

    ServerSocket類,可以自己編寫客戶軟件及服務軟件,并可以自己

    設計通訊協議。



    〖參考文獻〗

    Laura Lemay,Charles L. Perkins??"Teach Yourself JAVA in 21 Days"

    摘自《Internet世界》
    posted on 2006-03-20 12:28 zjw_albert 閱讀(208) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 无码日韩精品一区二区三区免费| 羞羞视频免费观看| 最近中文字幕国语免费完整 | 国产国拍亚洲精品福利 | 亚洲av无码无线在线观看| 国产h肉在线视频免费观看| 亚洲经典在线中文字幕| 114级毛片免费观看| 亚洲天堂福利视频| 最近最新MV在线观看免费高清| 久久精品国产亚洲AV蜜臀色欲| 最近免费中文字幕4| 亚洲aⅴ天堂av天堂无码麻豆| 国产免费怕怕免费视频观看| 羞羞漫画小舞被黄漫免费| 亚洲区小说区图片区| 国产免费无码AV片在线观看不卡| 亚洲小视频在线观看| 美女被免费喷白浆视频| 亚洲欧美国产欧美色欲| 亚洲精品黄色视频在线观看免费资源| 国产大片免费天天看| 久久精品国产亚洲av成人| 国产免费不卡v片在线观看 | 国产黄在线观看免费观看不卡| 亚洲精品白浆高清久久久久久| 中文字幕免费观看| 亚洲色欲色欲www| 亚洲国产精品无码久久久久久曰| a级毛片视频免费观看| 亚洲免费人成视频观看| 免费一级特黄特色大片在线| 水蜜桃视频在线观看免费播放高清| 久久久久亚洲精品天堂| 精品免费久久久久久成人影院| 国产高清视频免费在线观看| 亚洲视频在线观看不卡| 免费在线精品视频| 最近中文字幕国语免费完整| 午夜免费国产体验区免费的| 777亚洲精品乱码久久久久久 |