




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
網(wǎng)絡(luò)編程21、Java與Internet ——Java中的網(wǎng)絡(luò)通信
網(wǎng)絡(luò)應(yīng)用是Java語言取得成功的領(lǐng)域之一,它已經(jīng)成為現(xiàn)在Internet上最流行的一種編程語言。Java語言在網(wǎng)絡(luò)編程方面提供了許多方便,其他語言往往需要數(shù)頁代碼才能完成的事情,在Java中可能只需要一條語句就可以。
Java的網(wǎng)絡(luò)通信分為三個(gè)層次:最高一級(jí)的網(wǎng)絡(luò)通信是Applet。客戶端瀏覽器通過HTML文件中的<applet>標(biāo)記來識(shí)別Applet,并解析Applet的屬性,通過網(wǎng)絡(luò)獲取Applet得字節(jié)碼文件。(由瀏覽器提供)次一級(jí)的通信(聲音文件和圖象文件的獲取)。通過類URL的對(duì)象指明文件所在位置,并從網(wǎng)絡(luò)上下載聲音和圖象文件。(由Java開發(fā)環(huán)境提供)最低一級(jí)的通信是利用包中提供的類直接在程序中實(shí)現(xiàn)網(wǎng)絡(luò)通信。(由Java語言開發(fā)包提供)3Java提供的網(wǎng)絡(luò)功能有三大類:URL,Socket,Datagram.URL是三大功能中最高級(jí)的一種,通過URLJava程序可以直接送出或讀入網(wǎng)絡(luò)上的數(shù)據(jù).Socket是傳統(tǒng)網(wǎng)絡(luò)程序最常用的方式,可以想象為兩個(gè)不同的程序通過網(wǎng)絡(luò)的通信信道.Datagram是更低級(jí)的網(wǎng)絡(luò)傳輸方式,它把數(shù)據(jù)的目的紀(jì)錄在數(shù)據(jù)包中,然后直接放在網(wǎng)絡(luò)上.4
TCP/IP(傳輸控制協(xié)議/網(wǎng)間協(xié)議)是Internet的主要協(xié)議,定義了計(jì)算機(jī)和外設(shè)進(jìn)行通信所使用的規(guī)則。TCP/IP網(wǎng)絡(luò)參考模型包括五個(gè)層次:應(yīng)用層、傳輸層、網(wǎng)絡(luò)層、鏈路層、物理層。
ISO/OSI網(wǎng)絡(luò)參考模型則包括七個(gè)層次:應(yīng)用層、表示層、會(huì)話層、傳輸層、網(wǎng)絡(luò)層、鏈路層、物理層。1、Java與Internet ——網(wǎng)絡(luò)基本概念物理層5
大多數(shù)基于Internet的應(yīng)用程序被看作TCP/IP網(wǎng)絡(luò)的最上層,如:ftp,http,smtp,pop3,telnet,nntp等。網(wǎng)絡(luò)層對(duì)TCP/IP網(wǎng)絡(luò)中的硬件資源進(jìn)行標(biāo)識(shí)。連接到TCP/IP網(wǎng)絡(luò)中的每臺(tái)計(jì)算機(jī)(或其他設(shè)備)都有唯一的地址,這就是IP地址。IP地址實(shí)質(zhì)上是一個(gè)32位的整數(shù),通常以“%d.%d.%d.%d”的形式表示,每個(gè)d是一個(gè)8位整數(shù)。在TCP/IP網(wǎng)絡(luò)中,不同的機(jī)器之間進(jìn)行通信時(shí),數(shù)據(jù)的傳輸是由傳輸層控制的,這包括數(shù)據(jù)要發(fā)往的目標(biāo)機(jī)器及應(yīng)用程序、數(shù)據(jù)的質(zhì)量控制等。TCP/IP網(wǎng)絡(luò)中最常用的傳輸協(xié)議就是TCP(TransportControlProtocol)和UDP(UserDatagramProtocol)。1、Java與Internet ——網(wǎng)絡(luò)基本概念6端口是一種抽象的軟件結(jié)構(gòu)(包括一些數(shù)據(jù)結(jié)構(gòu)和I/O緩沖區(qū))在TCP/IP協(xié)議的實(shí)現(xiàn)中,端口操作類似于一般的I/O操作,進(jìn)程獲取一個(gè)端口,相當(dāng)于獲取本地唯一的I/O文件,可以用一般的讀寫原語訪問之
一臺(tái)機(jī)器只通過一條鏈路連接到網(wǎng)絡(luò)上,但一臺(tái)機(jī)器中往往有很多應(yīng)用程序需要進(jìn)行網(wǎng)絡(luò)通信,如何區(qū)分呢?這就要靠網(wǎng)絡(luò)端口號(hào)(port)了。
端口號(hào)是一個(gè)標(biāo)記機(jī)器的邏輯通信信道的正整數(shù),端口號(hào)不是物理實(shí)體。IP地址和端口號(hào)組成了所謂的Socket,Socket是網(wǎng)絡(luò)上運(yùn)行的程序之間雙向通信鏈路的最后終結(jié)點(diǎn),它是TCP和UDP的基礎(chǔ)。網(wǎng)絡(luò)服務(wù)httpftp其他服務(wù)23telnet數(shù)據(jù)結(jié)構(gòu)I/O緩沖區(qū)端口2180客戶程序SocketIP,portIP與端口號(hào)組合而得出的Socket,可以完全分辨Internet上運(yùn)行的程序。7端口號(hào)是用一個(gè)16位的整數(shù)來表達(dá)的,其范圍為0~65535,其中0~1023為系統(tǒng)所保留,專門給那些通用的服務(wù).如http服務(wù)的端口號(hào)為80,telnet服務(wù)的端口號(hào)為21,ftp服務(wù)的端口為23當(dāng)我們編寫通信程序時(shí),應(yīng)選擇一個(gè)大于1023的數(shù)作為端口號(hào),以免發(fā)生沖突。1、Java與Internet ——網(wǎng)絡(luò)基本概念81、Java與Internet ——網(wǎng)絡(luò)基本概念傳輸層通常以TCP和UDP協(xié)議來控制端點(diǎn)到端點(diǎn)的通信。傳輸控制協(xié)議(TCP)是在端點(diǎn)與端點(diǎn)之間建立持續(xù)的連接而進(jìn)行通信。建立連接后,發(fā)送端將發(fā)送的數(shù)據(jù)印記了序列號(hào)和錯(cuò)誤檢測代碼,并以字節(jié)流的方式發(fā)送出去;接收端則對(duì)數(shù)據(jù)進(jìn)行錯(cuò)誤檢查并按序列順序?qū)?shù)據(jù)整理好,數(shù)據(jù)在需要時(shí)可以重新發(fā)送,因此整個(gè)字節(jié)流到達(dá)接收端時(shí)完好無缺。這與兩個(gè)人打電話的情形是相似的。TCP協(xié)議具有可靠性和有序性,并且以字節(jié)流的方式發(fā)送數(shù)據(jù),它通常被稱為流通信協(xié)議。91、Java與Internet ——網(wǎng)絡(luò)基本概念數(shù)據(jù)報(bào)協(xié)議(UDP)則是一種無連接的傳輸協(xié)議。利用UDP協(xié)議進(jìn)行數(shù)據(jù)傳輸時(shí),首先需要將要傳輸?shù)臄?shù)據(jù)定義成數(shù)據(jù)報(bào)(Datagram),在數(shù)據(jù)報(bào)中指明數(shù)據(jù)所要達(dá)到的Socket(主機(jī)地址和端口號(hào)),然后再將數(shù)據(jù)報(bào)發(fā)送出去。這種傳輸方式是無序的,也不能確保絕對(duì)的安全可靠,但它很簡單也具有比較高的效率,這與通過郵局發(fā)送郵件的情形非常相似。TCP協(xié)議和UDP協(xié)議各有各的用處。當(dāng)對(duì)所傳輸?shù)臄?shù)據(jù)具有時(shí)序性和可靠性等要求時(shí),應(yīng)使用TCP協(xié)議;當(dāng)傳輸?shù)臄?shù)據(jù)比較簡單、對(duì)時(shí)序等無要求時(shí),UDP協(xié)議能發(fā)揮更好的作用,如ping,發(fā)送時(shí)間數(shù)據(jù)等。101、Java與Internet ——Java中的網(wǎng)絡(luò)支持
針對(duì)網(wǎng)絡(luò)通信的不同層次,Java提供的網(wǎng)絡(luò)功能有四大類:InetAddress、URLs、Sockets、Datagram。
InetAddress面向的是IP層,用于標(biāo)識(shí)網(wǎng)絡(luò)上的硬件資源。
URL面向的應(yīng)用層,通過URL,Java程序可以直接送出或讀入網(wǎng)絡(luò)上的數(shù)據(jù)。
Sockets和Datagram面向的則是傳輸層。Sockets使用的是TCP協(xié)議,這是傳統(tǒng)網(wǎng)絡(luò)程序最常用的方式,可以想象為兩個(gè)不同的程序通過網(wǎng)絡(luò)的通信信道進(jìn)行通信。Datagram則使用UDP協(xié)議,是另一種網(wǎng)絡(luò)傳輸方式,它把數(shù)據(jù)的目的地紀(jì)錄在數(shù)據(jù)包中,然后直接放在網(wǎng)絡(luò)上。111、Java與Internet ——Java中的網(wǎng)絡(luò)支持包中的主要的類和可能產(chǎn)生的例外包括:面向IP層的類:InetAddress面向應(yīng)用層的類:URL、URLConnection面向網(wǎng)絡(luò)層的類:TCP協(xié)議相關(guān)類:Socket、ServerSocketUDP協(xié)議相關(guān)類:DatagramPacket、DatagramSocket、MulticastSocket可能產(chǎn)生的例外:BindException、ConnectException、MalformedURLException、NoRouteToHostException、ProtocolException、SocketException、UnknownHostException、UnknownServiceExceptionInetAddress可以用于標(biāo)識(shí)網(wǎng)絡(luò)上的硬件資源,它提供了一系列方法以描述、獲取及使用網(wǎng)絡(luò)資源。InetAddress類沒有構(gòu)造函數(shù),它提供的靜態(tài)方法來獲?。簆ublicstaticInetAddressgetByName(String
host):host可以是一個(gè)機(jī)器名,也可以是一個(gè)形如“%d.%d.%d.%d”的IP地址或一個(gè)DSN域名。publicstaticInetAddressgetLocalHost()publicstaticInetAddress[]getAllByName(String
host)以下是InetAddress類的幾個(gè)主要方法:publicbyte[]getAddress():獲得本對(duì)象的IP地址(存放在字節(jié)數(shù)組中)。publicStringgetHostAddress():獲得本對(duì)象的IP地址“%d.%d.%d.%d”。publicStringgetHostName():獲得本對(duì)象的機(jī)器名。2、使用InetAddress13
下面的例子演示Java如何根據(jù)域名自動(dòng)到DNS(域名服務(wù))上查找IP地址:publicclassGetIP{publicstaticvoidmain(Stringargs[]){InetAddresszust=null;try{zust=InetAddress.getByName(“”);}catch(UnknownHostExceptione){}System.out.println(zust);}}2、使用InetAddress14
通過InetAddress,可以獲取本機(jī)的IP地址:publicclassgetLocalHostTest{publicstaticvoidmain(){InetAddressmyIP=null;try{myIP=InetAddress.getLocalHost();}catch(UnknownHostExceptione){}System.out.println(myIP);}}2、使用InetAddress153、使用URLURL是統(tǒng)一資源定位符(UniformResourceLocator)的簡稱,它表示Internet上某一資源的地址。Internet上的資源包括HTML文件、圖象文件、聲音文件、動(dòng)畫文件以及其他任何內(nèi)容(并不完全是文件,也可以是一個(gè)對(duì)數(shù)據(jù)庫的查詢等)。通過URL,就可以訪問Internet。瀏覽器或其他程序通過解析給定的URL就可以在網(wǎng)絡(luò)上查找相應(yīng)的文件或其他資源。163、使用URL
一個(gè)URL包括兩部分內(nèi)容:協(xié)議名稱和資源名稱,中間用冒號(hào)隔開:
Protocol:resourceName如:
:9090/index.html
協(xié)議名稱指的是獲取資源時(shí)所使用的應(yīng)用層協(xié)議,如http,ftp,file等,資源名稱則是資源的完整地址,包括主機(jī)名、端口號(hào)、文件名或文件內(nèi)部的一個(gè)引用。當(dāng)然,并不是所有的URL都必須包含這些內(nèi)容。173、使用URL ——在Java中構(gòu)造URL
在包中,提供了類URL來表示URL。類URL提供了很多構(gòu)造方法來生成一個(gè)URL對(duì)象:publicURL(String
spec)
publicURL(URLcontext,Stringspec)publicURL(String
protocol,String
host,String
file)publicURL(String
protocol,String
host,int
port,String
file)以下是一些具體的構(gòu)造實(shí)例:URLurl1=newURL(“/index.html”);URLbase=newURL(“”);URLurl2=newURL(base,“index.html”);URLurl3=newURL(base,“aa.html”);URLurl4=newURL(“http”,“”,“/yjd/test.html”);URLurl5=newURL(“http”,“”,8080,“/java/index.html”);
另外還有兩種稍微復(fù)雜些的構(gòu)造方法。18
一個(gè)URL對(duì)象生成后,其屬性是不能被改變的,但可以通過它給定的方法來獲取這些屬性:publicStringgetProtocol():獲取該URL的協(xié)議名publicStringgetHost():獲取該URL的主機(jī)名publicStringgetPort():獲取該URL的端口號(hào)publicStringgetPath():獲取該URL的文件路徑publicStringgetFile():獲取該URL的文件名publicStringgetRef():獲取該URL在文件中的相對(duì)位置publicStringgetQuery():獲取該URL的查詢名3、使用URL ——URL的基本方法193、使用URL ——通過URL讀取www信息URL類提供的方法openStream(),就可以讀取一個(gè)URL對(duì)象所指定的資源。publicfinalInputStream
openStream()
openStream()與指定的URL建立連接并返回一個(gè)InputStream對(duì)象,將URL位置的資源轉(zhuǎn)成一個(gè)數(shù)據(jù)流。通過這個(gè)InputStream對(duì)象,就可以讀取資源中的數(shù)據(jù)。URLJava程序InputStream203、使用URL ——通過URL讀取www信息import.*;importjava.io.*;publicclassURLReader{publicstaticvoidmain(Stringargs[])throwsException{URLurl=newURL("/aa.htm");BufferedReaderin=newBufferedReader(newInputStreamReader(url.openStream()));Stringline;while((line=in.readLine())!=null){System.out.println(line);}in.close();}}}213、使用URL ——URLConnectionopenStream(),只能從網(wǎng)絡(luò)上讀取資源中的數(shù)據(jù)。URLConnection類,可以在應(yīng)用程序和URL資源之間進(jìn)行交互,既可以從URL中讀取數(shù)據(jù),也可以向URL中發(fā)送數(shù)據(jù)。URLConnection類表示了應(yīng)用程序和URL資源之間的通信連接。try{URLurl=newURL(“”);
URLConnection
uc=url.openConnection();}catch(MalformedURLExceptione1){
…}catch(IOExceptione2){
…}223、使用URL ——URLConnectionpublicclassURLConnectionReader{publicstaticvoidmain(Stringargs[])throwsException{URLurl=newURL("/test.htm");URLConnectionuc=url.openConnection();BufferedReaderin=newBufferedReader(newInputStreamReader(uc.getInputStream()));Stringline;while((line=in.readLine())!=null){System.out.println(line);}in.close();}}通過getInputStream()
方法,應(yīng)用程序就可以讀取資源中的數(shù)據(jù)。事實(shí)上,類URL的方法openStream()就是通過URLConnection類來實(shí)現(xiàn)的,它等價(jià)于:openConnection().getInputStream();URLConnection中最常用的兩個(gè)方法是:InputStream
getInputStream()
OutputStreamgetOutputStream()
234、Socket通信
在Java中,基于TCP協(xié)議實(shí)現(xiàn)網(wǎng)絡(luò)通信的類有兩個(gè):在客戶端的Socket類和在服務(wù)器端的ServerSocket類。在服務(wù)器端通過指定一個(gè)用來等待的連接的端口號(hào)創(chuàng)建一個(gè)ServerSocket實(shí)例。在客戶端通過規(guī)定一個(gè)主機(jī)和端口號(hào)創(chuàng)建一個(gè)socket實(shí)例,連到服務(wù)器上。
ServerSocket類的accept方法使服務(wù)器處于阻塞狀態(tài),等待用戶請(qǐng)求。24構(gòu)造方法:publicSocket(String
host,int
port)publicSocket(InetAddress
address,int
port)publicSocket(String
host,int
port,InetAddress
localAddr,int
localPort)publicSocket(InetAddress
address,int
port,InetAddress
localAddr,int
localPort)
4、Socket通信
----
類Socket25Socket的輸入/輸出流管理publicInputStreamgetInputStream()publicOutputStreamgetOutputStream()設(shè)置/獲取Socket數(shù)據(jù)publicInetAddressgetInetAddress()publicintgetPort()publicvoidsetSoTimeout(int
timeout):讀取數(shù)據(jù)時(shí)阻塞鏈路的超時(shí)時(shí)間4、Socket通信
----
類Socket26
構(gòu)造方法:publicServerSocket(int
port)publicServerSocket(int
port,int
backlog):支持指定數(shù)目的連接publicServerSocket(int
port,int
backlog,InetAddress
bindAddr)主要方法publicSocketaccept():等待客戶端的連接
4、Socket通信
----類ServerSocket274、Socket通信
無論一個(gè)Socket通信程序的功能多么齊全、程序多么復(fù)雜,其基本結(jié)構(gòu)都是一樣的,都包括以下四個(gè)基本步驟:1、在客戶方和服務(wù)器方創(chuàng)建Socket/ServerSocket。2、打開連接到Socket的輸入/輸出流。3、利用輸入/輸出流,按照一定的協(xié)議對(duì)Socket進(jìn)行讀/寫操作。4、關(guān)閉輸入/輸出流和Socket。通常,程序員的主要工作是針對(duì)所要完成的功能在第3步進(jìn)行編程,第1、2、4步對(duì)所有的通信程序來說幾乎都是一樣的。284、Socket通信ServerServerSocket(port#)Socketsocket=
ServerSocket.accept()接收連接OutputStreamInputStreamCloseSocketClientSocket(host,port#)與服務(wù)器建立連接OutputStreamInputStreamCloseSocketsocket294、Socket通信1、建立Socket在客戶端:try{
Socketclient=newSocket(host,4444);}catch(IOExceptione){}在服務(wù)器端:try{
ServerSocketserver=newServerSocket(4444);}catch(IOExceptione){}Socketsocket=null;try{
socket=server.accept();//等待客戶端連接}catch(IOExceptione){}2、在客戶端和服務(wù)器端同時(shí)打開輸入/輸出流方法getInputStream()和getOutputStream()來得到Socket對(duì)應(yīng)的輸入/輸出流以進(jìn)行數(shù)據(jù)讀寫操作,它們分別返回InputStream對(duì)象和OutputStream對(duì)象。為了便于讀寫數(shù)據(jù),應(yīng)在返回的輸入/輸出流對(duì)象上建立過濾流,如DataInputStram/DataOutputStram、BufferedInputStream/BufferedOutputStream、PrintStream;InputStreamReader/OutputStreamWriter、BufferedReader/BufferedWriter、PrintWriter等。BufferedReader=newBufferedReader(newInputStreamReader(socket.getInputStream()));BufferedWriter=newBufferedWriter(newInputStreamWriter(socket.getOutputStream()));3、關(guān)閉輸入/輸出流和Socket先關(guān)閉所有相關(guān)的輸入/輸出流,再關(guān)閉Socket。4、Socket通信31創(chuàng)建服務(wù)器(端口號(hào))定義數(shù)據(jù)成員服務(wù)器等待網(wǎng)絡(luò)連接建立socket流發(fā)送談話信息接收用戶談話信息創(chuàng)建Socket實(shí)例定義數(shù)據(jù)成員建立socket流發(fā)送談話信息接收服務(wù)器談話信息關(guān)閉流accept()44444444結(jié)束談話(Bye.)結(jié)束談話(Bye.)關(guān)閉流服務(wù)器端客戶端324、Socket通信SingleTalkClient.javacase:2、客戶端SingleTalkServer.java1、服務(wù)器端334、Socket通信
——簡單的Client/Server
在本地機(jī)器上測試網(wǎng)絡(luò)程序用回繞地址
Socketsocket=newSocket(“”,4444);建立socket連接后,還應(yīng)該建立輸入輸出數(shù)據(jù)流。要控制好輸入/輸出流和Socket關(guān)閉的時(shí)間。如果網(wǎng)絡(luò)的一端已經(jīng)關(guān)閉,另一端讀到null。在運(yùn)行時(shí),服務(wù)器端程序一般應(yīng)先行啟動(dòng)。34Server1(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司成品庫管理制度
- 食品衛(wèi)生管理制度上墻
- 針織企業(yè)設(shè)備管理制度
- 項(xiàng)目建設(shè)合同管理制度
- 車間工人管理制度語句
- 公司周轉(zhuǎn)物資管理制度
- 一個(gè)完整的房地產(chǎn)全套文案策劃(經(jīng)典)
- 高速生產(chǎn)應(yīng)急管理制度
- 預(yù)檢分診值班管理制度
- 路面施工機(jī)務(wù)管理制度
- GB/T 11211-2009硫化橡膠或熱塑性橡膠與金屬粘合強(qiáng)度的測定二板法
- 《民法》全冊(cè)精講課件
- 望神 色 形態(tài)課件
- 鎂及鎂合金的耐蝕性課件
- 企業(yè)標(biāo)準(zhǔn)編寫模板
- 新教科版科學(xué)五年級(jí)下冊(cè)實(shí)驗(yàn)計(jì)劃表
- 原廠授權(quán)書及售后服務(wù)承諾函【模板】
- 自動(dòng)控制原理全套課件
- EXCEL公式進(jìn)行經(jīng)緯度與XY坐標(biāo)的相互轉(zhuǎn)換
- 059.商業(yè)計(jì)劃書和可行性報(bào)告精制食油廠年產(chǎn)萬噸精制山茶油項(xiàng)目可行性研究報(bào)告
- 米度盾構(gòu)導(dǎo)向系統(tǒng)
評(píng)論
0/150
提交評(píng)論