激情欧美日韩一区二区,浪货撅高贱屁股求主人调教视频,精品无码成人片一区二区98,国产高清av在线播放,色翁荡息又大又硬又粗视频

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

  • 相關(guān)推薦

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

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

6 程序
//服務(wù)器端程序S.java 負責與客戶(hù)端通信
import java.io.*;
import java.net.*;
import java.lang.*;
import T2;
class ThreadEchoHandler extends Thread   //創(chuàng )建線(xiàn)程
{
     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();     //從客戶(hù)端得到字符串                             
                           //在此加入各自的服務(wù)程序
                
                             System.out.println (str);
                    theT2.pass(str);  //解碼
                             theT2.tongji();   //修改監控庫中的信息                            aa=theT2.guan();   //操縱數據庫
                             System.out.println ("string z is:"+aa);                     if(aa.compareTo("null")!=0 ) 
                                      //若是查詢(xún)數據庫,返回查詢(xún)后的結果
                             {                   //若不是查詢(xún)數據庫,不向客戶(hù)端輸出信息
                               out.writeUTF(aa);
                               out.flush();  }
                 }//while                  incoming.close();    //線(xiàn)程關(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); }
     }     
}
//客戶(hù)端通信小程序 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  程序調試心得:
1)      在建立Socket連接時(shí),兩端的端口號必須設為一致,否則建立不了連接。服務(wù)器端必須有主機IP地址或主機名參數。
2)      連接建立好之后應確定輸入和輸出流。起初程序中用的是DataInputStream和PrintStream,結果只能傳輸,傳輸中文時(shí)產(chǎn)生亂碼,將PrintStream改為DataOutputStream,使用readUTF()和writeUTF()方法后,中文傳輸得到解決。
3)      如果一個(gè)使用某端口的程序沒(méi)有關(guān)閉,另一個(gè)程序就不能使用這個(gè)端口。
4)      開(kāi)始進(jìn)行通信的程序均為 Application,因不符合客戶(hù)機/服務(wù)器機制,應將客戶(hù)端的Application改為Applet。其轉化的主要步驟如下:
      創(chuàng )建一個(gè)包含APPLET標簽的HTML文件;
      去掉應用程序中的main()方法;
      類(lèi)名應繼承Applet類(lèi),而不是Frame類(lèi),并在程序開(kāi)頭加入
    import  java.applet.*;語(yǔ)句;
      用init()方法代替Application程序中的構造方法,當瀏覽器創(chuàng )建Applet類(lèi)對象的時(shí)候,它自動(dòng)執行init()方法;
      如Application中缺省使用了BorderLayout布局管理器,應在A(yíng)pplet的init()方法中重新設定;
      如果Application中有setTitle()方法,必須將其去掉,如Application中使用了菜單,在A(yíng)pplet 中用按鈕來(lái)替換。
5)      懂得了在一程序中如何引用自定義的類(lèi)中的方法和變量,在程序開(kāi)頭加入import  類(lèi)名;在程序中加入    類(lèi)名  實(shí)例=new 類(lèi)名();  然后使用
  實(shí)例.方法(),實(shí)例.變量即可。:
[1] 廖雷等,Java程序設計教程,電力出版社,2003
[2]  Warton,Java多線(xiàn)程編程初步,電腦報,2004.4.10
[3] 張立等,基于Client/Server模式的數據庫應用軟件的設計與實(shí)現,機應用,1999(4)

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

使用JAVA編寫(xiě)網(wǎng)絡(luò )通信程序論文03-18

基于 DSP 的網(wǎng)絡(luò )通信程序設計03-20

論文提綱編寫(xiě)程序03-24

畢業(yè)論文的提綱編寫(xiě)的步驟11-17

畢業(yè)論文提綱編寫(xiě)原則12-02

2014年論文提綱編寫(xiě)程序03-25

畢業(yè)論文提綱編寫(xiě)步驟詳解12-11

畢業(yè)論文提綱的分類(lèi)與編寫(xiě)步驟11-23

淺析計算機網(wǎng)絡(luò )通信協(xié)議03-18

激情欧美日韩一区二区,浪货撅高贱屁股求主人调教视频,精品无码成人片一区二区98,国产高清av在线播放,色翁荡息又大又硬又粗视频