1. <tt id="5hhch"><source id="5hhch"></source></tt>
    1. <xmp id="5hhch"></xmp>

  2. <xmp id="5hhch"><rt id="5hhch"></rt></xmp>

    <rp id="5hhch"></rp>
        <dfn id="5hhch"></dfn>

      1. 計(jì)算機(jī)網(wǎng)絡(luò)畢業(yè)論文-使用JAVA編寫網(wǎng)絡(luò)通信程序

        • 相關(guān)推薦

        計(jì)算機(jī)網(wǎng)絡(luò)畢業(yè)論文-使用JAVA編寫網(wǎng)絡(luò)通信程序

        摘要 本文闡述了使用JAVA編程語(yǔ)言對(duì)基于客戶/服務(wù)器模式的編寫通信程序,討論了SOCKET機(jī)制、輸入輸出流以及程序?qū)嵈a。關(guān)鍵詞 JAVA,網(wǎng)絡(luò),SOCKET,APPLET 網(wǎng)絡(luò)上的系統(tǒng)結(jié)構(gòu)多為客戶/服務(wù)器模式,服務(wù)器端負(fù)責(zé)數(shù)據(jù)和圖像等的存儲(chǔ)、維護(hù)、管理以及傳遞,客戶端則負(fù)責(zé)人機(jī)界面的操作、送出需求及顯示收回的數(shù)據(jù)。
             下面介紹一下如何使用JAVA來(lái)進(jìn)行網(wǎng)絡(luò)編程:
        1)      由于客戶端通過IE同服務(wù)器建立聯(lián)系,所以客戶端使用Applet,服務(wù)器端使用Application;
        2)      服務(wù)器應(yīng)設(shè)置成多線程,應(yīng)答多個(gè)客戶的請(qǐng)求;
        3)      兩端通信使用SOCKET機(jī)制。
         1  Java中輸入/輸出流概念:
        過濾流DataInputStream 和DataOutputStream 除了分別作為FilterInputStream 和FilterOutputStream的子類外,還分別實(shí)現(xiàn)了接口DataInput 和DataOutput。接口DataInput 中定義的主要包括從流中讀取基本類型的數(shù)據(jù)、讀取一行數(shù)據(jù)、或者讀取指定長(zhǎng)度的字節(jié)數(shù),如readBoolean() readInt()、readLine()、readFully()等。接口DataOutput中定義的方法主要是向流中寫入基本類型的數(shù)據(jù)或者寫入一定長(zhǎng)度的字節(jié)數(shù)組,如writeChar()、writeDouble() DataInputStream可以從所連接的輸入流中讀取與機(jī)器無(wú)關(guān)的基本類型數(shù)據(jù),用以實(shí)現(xiàn)一種獨(dú)立于具體平臺(tái)的輸入方式;DataInputStream 可以向所連接的輸出流寫入基本類型的數(shù)據(jù)。
         2  Socket 機(jī)制
           Socket是面向客戶/服務(wù)器模型設(shè)計(jì)的,網(wǎng)絡(luò)上的兩個(gè)程序通過一個(gè)雙向的通訊連接實(shí)現(xiàn)數(shù)據(jù)的交換,這個(gè)雙向鏈路的一端稱為一個(gè)Socket。 Socket通常用來(lái)實(shí)現(xiàn)客戶方和服務(wù)方的連接?蛻舫绦蚩梢韵騍ocket寫請(qǐng)求,服務(wù)器將處理此請(qǐng)求,然后通過Socket將結(jié)果返回給用戶。
        Socket通信機(jī)制提供了兩種通訊方式:有聯(lián)接和無(wú)聯(lián)接方式,分別面向不同的應(yīng)用需求。使用有聯(lián)接方式時(shí),通信鏈路提供了可靠的,全雙工的字節(jié)流服務(wù)。在該方式下,通信雙方必須創(chuàng)建一個(gè)聯(lián)接過程并建立一條通訊鏈路,以后的網(wǎng)絡(luò)通信操作完全在這一對(duì)進(jìn)程之間進(jìn)行,通信完畢關(guān)閉此聯(lián)接過程。使用無(wú)聯(lián)接方式時(shí)其系統(tǒng)開銷比無(wú)聯(lián)接方式小,但通信鏈路提供了不可靠的數(shù)據(jù)報(bào)服務(wù),不能保證信源所傳輸?shù)臄?shù)據(jù)一定能夠到達(dá)信宿。在該方式下,通信雙方不必創(chuàng)建一個(gè)聯(lián)接過程和建立一條通訊鏈路,網(wǎng)絡(luò)通信操作在不同的主機(jī)和進(jìn)程之間轉(zhuǎn)發(fā)進(jìn)行。
        3  Java語(yǔ)言
        Java語(yǔ)言的優(yōu)點(diǎn)主要表現(xiàn)在:簡(jiǎn)單、面向?qū)ο蟆⒍嗑程、分布性、體系結(jié)構(gòu)中立、安全性等方面。
        (1) 簡(jiǎn)單性
        Java與C++語(yǔ)言非常相近,但Java比C++簡(jiǎn)單,它拋棄了C++中的一些不是絕對(duì)必要的功能,如頭文件、預(yù)處理文件、指針、結(jié)構(gòu)、運(yùn)算符重載、多重繼承以及自動(dòng)強(qiáng)迫同型。 Java實(shí)現(xiàn)了自動(dòng)的垃圾收集,簡(jiǎn)化了內(nèi)存管理的工作。這使程序設(shè)計(jì)更加簡(jiǎn)便,同時(shí)減少了出錯(cuò)的可能。
        (2) 面向?qū)ο?br />Java提供了簡(jiǎn)單的類機(jī)制和動(dòng)態(tài)的構(gòu)架模型。對(duì)象中封裝了它的狀態(tài)變量和方法,很好地實(shí)現(xiàn)了模塊化和信息隱藏;而類則提供了一類對(duì)象的原型,通過繼承和重載機(jī)制,子類可以使用或重新定義父類或超類所提供的方法,從而既實(shí)現(xiàn)了代碼的復(fù)用,又提供了一種動(dòng)態(tài)的解決方案。
        Java是一種完全面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言,它除了數(shù)組、布爾和字符三個(gè)基本數(shù)據(jù)類型外的其它類都是對(duì)象,它不再支持全局變量。在Java中,如果不創(chuàng)建新類就無(wú)法創(chuàng)建程序,Java程序在運(yùn)行時(shí)必須先創(chuàng)建一個(gè)類的實(shí)例,然后才能提交運(yùn)行。
        Java同樣支持繼承特性,Java的類可以從其它類中繼承行為,但Java只支持類的單重繼承,即每個(gè)類只能從一個(gè)類中繼承。
        Java支持界面,界面允許程序員定義方法但又不立即實(shí)現(xiàn),一個(gè)類可以實(shí)現(xiàn)多個(gè)界面,利用界面可以得到多重繼承的許多優(yōu)點(diǎn)而又沒有多重繼承的。
        (3) 多線程
        多線程使應(yīng)用程序可以同時(shí)進(jìn)行不同的操作,處理不同的事件。在多線程機(jī)制中,不同的線程處理不同的任務(wù),他們之間互不干涉,不會(huì)由于一處等待其他部分,這樣容易實(shí)現(xiàn)網(wǎng)絡(luò)上的實(shí)時(shí)交互操作。
        Java程序可以有多個(gè)執(zhí)行線程,如可以讓一個(gè)線程進(jìn)行復(fù)雜的,而讓另一個(gè)線程與用戶進(jìn)行交互,這樣用戶可以在不中斷計(jì)算線程的前提下與系統(tǒng)進(jìn)行交互。多線程保證了較高的執(zhí)行效率。 (4) 分布性
        Java是面向網(wǎng)絡(luò)的語(yǔ)言。通過它提供的類庫(kù)可以處理TCP/IP協(xié)議,用戶可以通過URL地址在網(wǎng)絡(luò)上很方便的訪問其他對(duì)象。
        (5) 體系結(jié)構(gòu)中立
        Java是一種網(wǎng)絡(luò)語(yǔ)言,為使Java程序能在網(wǎng)絡(luò)的任何地方運(yùn)行,Java解釋器生成與體系結(jié)構(gòu)無(wú)關(guān)的字節(jié)碼結(jié)構(gòu)的文件格式。Java為了做到結(jié)構(gòu)中立,除生成機(jī)器無(wú)關(guān)的字節(jié)碼外,還制定了完全統(tǒng)一的語(yǔ)言文本,如Java的基本數(shù)據(jù)類型不會(huì)隨目標(biāo)機(jī)的變化而變化,一個(gè)整型總是32位,一個(gè)長(zhǎng)整型總是64位。
        為了使Java的應(yīng)用程序能不依賴于具體的系統(tǒng),Java語(yǔ)言環(huán)境還提供了用于訪問底層操作系統(tǒng)功能的類組成的包,當(dāng)程序使用這些包時(shí),可以確保它能運(yùn)行在各種支持Java的平臺(tái)上。
         java.lang: 一般的語(yǔ)言包。其中包括用于字符串處理、多線程、異常處理和數(shù)字函數(shù)等的類,該包是實(shí)現(xiàn)Java程序運(yùn)行平臺(tái)的基本包
        java.util: 實(shí)用工具包。其中包括哈希表、堆棧、時(shí)間和日期等
        java.io: 基于流模型的輸入/輸出包。該包用統(tǒng)一的流模型實(shí)現(xiàn)了各種格式的輸入/輸出,包括文件系統(tǒng)、網(wǎng)絡(luò)和設(shè)備的輸入/輸出等
        java.net: 網(wǎng)絡(luò)包。該包支持TCP/IP協(xié)議,其中提供了socket、URL和WWW的編程接口
        java.awt: 抽象窗口工具集。其中實(shí)現(xiàn)了可以跨平臺(tái)的圖形用戶界面組件,包括窗口、菜單、滾動(dòng)條和對(duì)話框等
        java.applet: 支持applet程序設(shè)計(jì)的基本包
        (6) 安全性
        用于網(wǎng)絡(luò)、分布環(huán)境下的Java必須要防止病毒的入侵,Java不支持指針,一切對(duì)內(nèi)存的訪問都必須通過對(duì)象的實(shí)例變量來(lái)實(shí)現(xiàn),這樣就防止了程序員使用欺騙手段訪問對(duì)象的私有成員,同時(shí)也避免了指針操作中容易產(chǎn)生的錯(cuò)誤。
        4  JAVA工具
        (1) JDK
        1)      Java編譯器
        Java編譯器將Java源代碼文件編譯成可執(zhí)行的Java字節(jié)碼。Java源代碼文件的擴(kuò)展名為 .java,Java編譯器把這種擴(kuò)展名的文件編譯成擴(kuò)展名為.class的文件。源文件中的每個(gè)類在編譯后都將產(chǎn)生一個(gè)class文件,這意味一個(gè)Java源代碼文件可能編譯生成多個(gè)class文件。
        2)      Java解釋器
        Java解釋器對(duì)編譯生成的字節(jié)碼格式的可執(zhí)行程序的運(yùn)行提供支持,它是運(yùn)行非圖形Java程序的命令行工具。
        3)      Appletviewer
        它是Java Applet的簡(jiǎn)單測(cè)試工具,可使用它來(lái)測(cè)試Java Applet程序,而不需要WWW瀏覽器的支持。
        (2) Visual J++
        Visual J++ 集成了可視化界面設(shè)計(jì)、交互式調(diào)試、代碼編輯、聯(lián)機(jī)幫助信息和介紹如何快速掌握該開發(fā)環(huán)境的實(shí)用向?qū)У榷囗?xiàng)功能,同時(shí)具有能充分利用Active X和COM新技術(shù)的優(yōu)勢(shì)。利用Visual J++可創(chuàng)建交互性很強(qiáng)的Internet應(yīng)用程序,是難得的Java 開發(fā)系統(tǒng)。 5  客戶機(jī)/服務(wù)器通信的實(shí)現(xiàn):
        (1) Application 同 Applet 的通信
        兩端通過Socket機(jī)制進(jìn)行連接:
        1)      客戶端的編程流程:
              打開Socket,新建一個(gè)套接字;
              為套接字建立一個(gè)輸入和輸出流;
              根據(jù)服務(wù)器協(xié)議從套接字讀入或向套接字寫入;
              清除套接字和輸入/輸出流;
        2)服務(wù)器端的編程流程:
              打開Server Socket,創(chuàng)建一個(gè)服務(wù)器型套接字和一個(gè)普通套接字,服務(wù)器型套接字在指定端口為客戶端請(qǐng)求的Socket 服務(wù);
              使用ServerSocket類的accept()方法使服務(wù)器型套接字處于監(jiān)聽狀態(tài)并把監(jiān)聽結(jié)果返回給普通套接字;
              為該普通套接字創(chuàng)建輸入和輸出流;
              從輸入和輸出流中讀入或?qū)懭胱止?jié)流,進(jìn)行相應(yīng)的處理,并將結(jié)果返回給客戶端;
              在客戶端和服務(wù)器工作結(jié)束后關(guān)閉所有的對(duì)象,如服務(wù)器型的套接字,普通套接字,輸入和輸出流。
        正是由于Java系統(tǒng)具有基于Socket的靈活通信機(jī)制,因而其應(yīng)用程序能自由地打開和訪問網(wǎng)絡(luò)上的對(duì)象,就象在本地文件系統(tǒng)中一樣。
        (2) Applet之間的通信:
        Applet之間的通信使用Applet Context類的getApplet()方法。
        <applet  code=applet1.class  width=200  height=200  name=first>
        只要在程序中加入 
        Applet  oneapplet=getAppletContext().getApplet(“first”);便可使用name為first的Applet中的方法了。
        在該課題中大量使用了該種通信方法,因?yàn)閷iT同服務(wù)器端通信的 Applet中包含接收信息方法和發(fā)送信息方法,所有客戶端的Applet都要使用負(fù)責(zé)通信的Applet中的方法,所以客戶端的Applet同負(fù)責(zé)通信的Applet必須進(jìn)行通信。

        6 程序
        //服務(wù)器端程序S.java 負(fù)責(zé)與客戶端通信
        import java.io.*;
        import java.net.*;
        import java.lang.*;
        import T2;
        class ThreadEchoHandler extends Thread   //創(chuàng)建線程
        {
             T2 theT2=new T2();
            
             Socket  incoming;
             int counter;
         
             ThreadEchoHandler(Socket i,int c)
             {  incoming=i;
                counter=c;  }      public void run()
             {
                   try
                   {
                   DataInputStream  in=new DataInputStream(incoming.getInputStream());
                     DataOutputStream out=new DataOutputStream(incoming.getOutputStream());
                     System.out.println ("hello");     
                     boolean done=false;                  while(!done)
                         {   String aa="";
                               String str=in.readUTF();     //從客戶端得到字符串                             
                                   //在此加入各自的服務(wù)程序
                        
                                     System.out.println (str);
                            theT2.pass(str);  //解碼
                                     theT2.tongji();   //修改監(jiān)控庫(kù)中的信息                            aa=theT2.guan();   //操縱數(shù)據(jù)庫(kù)
                                     System.out.println ("string z is:"+aa);                     if(aa.compareTo("null")!=0 ) 
                                              //若是查詢數(shù)據(jù)庫(kù),返回查詢后的結(jié)果
                                     {                   //若不是查詢數(shù)據(jù)庫(kù),不向客戶端輸出信息
                                       out.writeUTF(aa);
                                       out.flush();  }
                         }//while                  incoming.close();    //線程關(guān)閉
                  
                   }//try            catch(IOException e)
                   {System.out.println(e);}
             }//end run
        } //----------------------------------------
        class S

             public static void main(String[] args)
             {     
                         int i=1;
                   try
                   {
                         ServerSocket s=new ServerSocket(1111);
                         for(;;)
                         {
                               Socket  incoming=s.accept();
                               System.out.println("connect:  "+i);
                               new ThreadEchoHandler(incoming,i).start();
                               i++;
                         }
                   }
                   catch(Exception e)
                   { System.out.println(e); }
             }     
        }
        //客戶端通信小程序 Echo.java import java.io.*;
        import java.net.*;
        import java.awt.*;
        import java.applet.*; public class Echo extends Applet
        {
             TextArea ta;
             Socket echoSocket;
             DataOutputStream  os;
             DataInputStream  is;
             String    Line;      public void init()           
             { 
                setBackground(Color.white);
                ta=new TextArea(5,80);
                ta.setEditable(false);
                add(ta);
                try
                    {echoSocket=new Socket("10.102.4.41",1111);}  //與服務(wù)器建立連接
                catch(IOException e)
                 {System.out.println("error");}
              
             }      public void st(String stri)     //發(fā)送字符串的
             {
                 try
              {  DataOutputStream os=new  DataOutputStream(echoSocket.getOutputStream());
                   DataInputStream is=new DataInputStream(echoSocket.getInputStream());
                     os.writeUTF(""+ stri );       //向服務(wù)器輸送string
                   os.flush();
                }
               catch(IOException e)
               {System.out.println(" error:"+e);  }
             }     
            
             public String  st1()     //接收字符串的方法
             {
              String Line="";
                 try
              {  DataOutputStream os=new  DataOutputStream(echoSocket.getOutputStream());
                   DataInputStream is=new DataInputStream(echoSocket.getInputStream());
                      Line=is.readUTF();        //從服務(wù)器讀來(lái)的信息
                   ta.appendText(""+Line);         //在文本域中輸出信息
                    }
               catch(IOException e)
               {System.out.println(" error:"+e);  }
               return Line;
             }
        } 7  程序調(diào)試心得:
        1)      在建立Socket連接時(shí),兩端的端口號(hào)必須設(shè)為一致,否則建立不了連接。服務(wù)器端必須有主機(jī)IP地址或主機(jī)名參數(shù)。
        2)      連接建立好之后應(yīng)確定輸入和輸出流。起初程序中用的是DataInputStream和PrintStream,結(jié)果只能傳輸,傳輸中文時(shí)產(chǎn)生亂碼,將PrintStream改為DataOutputStream,使用readUTF()和writeUTF()方法后,中文傳輸?shù)玫浇鉀Q。
        3)      如果一個(gè)使用某端口的程序沒有關(guān)閉,另一個(gè)程序就不能使用這個(gè)端口。
        4)      開始進(jìn)行通信的程序均為 Application,因不符合客戶機(jī)/服務(wù)器機(jī)制,應(yīng)將客戶端的Application改為Applet。其轉(zhuǎn)化的主要步驟如下:
              創(chuàng)建一個(gè)包含APPLET標(biāo)簽的HTML文件;
              去掉應(yīng)用程序中的main()方法;
              類名應(yīng)繼承Applet類,而不是Frame類,并在程序開頭加入
            import  java.applet.*;語(yǔ)句;
              用init()方法代替Application程序中的構(gòu)造方法,當(dāng)瀏覽器創(chuàng)建Applet類對(duì)象的時(shí)候,它自動(dòng)執(zhí)行init()方法;
              如Application中缺省使用了BorderLayout布局管理器,應(yīng)在Applet的init()方法中重新設(shè)定;
              如果Application中有setTitle()方法,必須將其去掉,如Application中使用了菜單,在Applet 中用按鈕來(lái)替換。
        5)      懂得了在一程序中如何引用自定義的類中的方法和變量,在程序開頭加入import  類名;在程序中加入    類名  實(shí)例=new 類名();  然后使用
          實(shí)例.方法(),實(shí)例.變量即可。:
        [1] 廖雷等,Java程序設(shè)計(jì)教程,電力出版社,2003
        [2]  Warton,Java多線程編程初步,電腦報(bào),2004.4.10
        [3] 張立等,基于Client/Server模式的數(shù)據(jù)庫(kù)應(yīng)用軟件的設(shè)計(jì)與實(shí)現(xiàn),機(jī)應(yīng)用,1999(4)

        【計(jì)算機(jī)網(wǎng)絡(luò)畢業(yè)論文-使用JAVA編寫網(wǎng)絡(luò)通信程序】相關(guān)文章:

        java畢業(yè)論文參考文獻(xiàn)10-13

        關(guān)于計(jì)算機(jī)網(wǎng)絡(luò)的畢業(yè)論文11-03

        網(wǎng)絡(luò)通信技術(shù)的作用03-30

        從程序本位到程序自治06-04

        嵌入式實(shí)時(shí)網(wǎng)絡(luò)通信技術(shù)淺析論文(精選7篇)07-26

        畢業(yè)論文提綱07-21

        畢業(yè)論文提綱07-21

        畢業(yè)論文致謝09-14

        建筑畢業(yè)論文09-03

        開題會(huì)的程序03-07

        国产高潮无套免费视频_久久九九兔免费精品6_99精品热6080YY久久_国产91久久久久久无码

        1. <tt id="5hhch"><source id="5hhch"></source></tt>
          1. <xmp id="5hhch"></xmp>

        2. <xmp id="5hhch"><rt id="5hhch"></rt></xmp>

          <rp id="5hhch"></rp>
              <dfn id="5hhch"></dfn>