版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、Java網絡通信網絡通信2021/3/9111.Java11.Java網絡通信網絡通信周筱媛周筱媛西安科技大學西安科技大學 計算機系計算機系Email: Tel:ava網絡通信網絡通信2021/3/92 主要內容:主要內容:學習如何通過學習如何通過包中的類直接在包中的類直接在程序中實現(xiàn)網絡通信。程序中實現(xiàn)網絡通信。Java網絡通信網絡通信2021/3/9311.1 URL類編程類編程 URL(Uniform Resource Locator)是統(tǒng)一資)是統(tǒng)一資源定位器的簡寫。它表示源定位器的簡寫。它表示Internet上某一資源的地上某一資源的地址,這些資源包括址,這
2、些資源包括Web頁、文本文件、圖形(像)頁、文本文件、圖形(像)文件和聲頻片段等。通過文件和聲頻片段等。通過URL可以訪問可以訪問Internet和和WWW。瀏覽器通過解析給定的。瀏覽器通過解析給定的URL可以在網絡可以在網絡上查找相應的文件或資源。上查找相應的文件或資源。Java網絡通信網絡通信2021/3/9411.1.1 URL的組成和的組成和URL類類u URL的組成的組成 protocol :/resourceNameu 協(xié)議名指明獲取資源所使用的傳輸協(xié)議,如協(xié)議名指明獲取資源所使用的傳輸協(xié)議,如httphttp、ftpftp等;等;u 資源包括主機名、端口號、文件的引用;資源包括主
3、機名、端口號、文件的引用;u 如如 http:/http:/ http:/localhost:8080/jsp/temp.htmlhttp:/localhost:8080/jsp/temp.html 協(xié)議名協(xié)議名 資資 源源Java網絡通信網絡通信2021/3/95u URL類類 Java將將URL封裝成封裝成URL類,通過構造方法可類,通過構造方法可以實例化一個以實例化一個URL對象。對象。 public URL(String spec) public URL( URL url, String file) public URL(String protocol, String host, St
4、ring file) public URL(String protocol, String host, int port, String file)URL myURL = new URL(“http:/”);URL mydoc = new URL(myURL, “index.html”);URL myURL = new URL(“http”, “”, “index.html”);URL myURL = new URL(“http”, “”, 80,“index.html”);Java網絡通信網絡通信2021/3/96 URL類編程中的常見異常類編程中的常見異常 MalformedURLExce
5、ptiontry URL myURL = new URL(“”); catch(Exception e) /異常處理異常處理 Java網絡通信網絡通信2021/3/97URL類的成員方法:類的成員方法: public final Obect getContent(); public String getFile(); public String getHost(); public int getPort(); public String getProtocol(); public String toExternalForm(); public String toString(); public
6、 final InputStream openStream() throws ; public URLConnection openConnection();Java網絡通信網絡通信2021/3/98例例1 獲取獲取URL對象屬性對象屬性import . *;public class myurlpub1ic static void main(String args) try URL url=new URL(http:/www. tsinghua. edu .cn: 80/home/homepage.htm) System.out.println(the Protocol: +url.getPr
7、otocol(); System.out.Println( the hostname: +url .getHost(); System.out.println(the port: +url.getPort(); System.out.println(the file: +url.getFle(); System.out.println(the ext: +url.toExternalForm), System. out. println(url. toString(); catch(Exception e) System.out.println(e); the protocol:httpthe
8、 hostname: www. tsinghua. edu. cnthe port:80the file: /homelhomepage. htmlthe ext: http:/www.tsinghua. edu. cn: 80/home/homepage .htmlhttp:/www.tsinghua. edu. cn: 80/home/homepage .htmlJava網絡通信網絡通信2021/3/99u 使用使用URL類讀取類讀取WWW信息信息 通過通過openStream()與指定的與指定的URL建立連接并返回一建立連接并返回一個個InputStream類的對象,然后從這一連接中讀取
9、數(shù)據(jù)。類的對象,然后從這一連接中讀取數(shù)據(jù)。常用的讀取網絡資源數(shù)據(jù)的步驟如下:常用的讀取網絡資源數(shù)據(jù)的步驟如下:創(chuàng)建創(chuàng)建URL類的實例對象;類的實例對象;通過通過URL類的實例對象的類的實例對象的openStream方法建立方法建立連接;連接;讀取數(shù)據(jù);讀取數(shù)據(jù);關閉數(shù)據(jù)流;關閉數(shù)據(jù)流;Java網絡通信網絡通信2021/3/910例例2 用用url.openStream()方法讀取方法讀取WWW數(shù)據(jù)數(shù)據(jù)import .*;import java.io.*;public class OpenStream public static void main(String args) throws Exc
10、eption URL url=new URL(http:/); BufferedReader in=new BufferedReader( new InputStreamReader(url.openStream(); String inputLine; while(inputLine=in.readLine()!=null) System.out.println(inputLine); in.close(); Java網絡通信網絡通信2021/3/911u 使用使用URLConnection連接連接WWW URLConnection的對象表示的對象表示Java程序與程序與URL在網在網絡上的
11、通信連接。絡上的通信連接。 使用使用URLConnection對象獲取對象獲取WWW資源的步驟:資源的步驟:創(chuàng)建一個創(chuàng)建一個URL對象;對象;調用調用URL對象的對象的getConnection()方法獲得對應的方法獲得對應的URLConnection對象;對象;獲取輸入流并讀數(shù)據(jù);獲取輸入流并讀數(shù)據(jù);關閉連接;關閉連接;Java網絡通信網絡通信2021/3/912例例3 使用使用URLConnection連接服務器連接服務器import . *;import java.io. *;public class urlcon public static void main(String args)
12、 InputStream is; OutputStream os; int b; try URL url=new URL(http:/); URLConnection uric= url.openConnection(); System.out.println(the length:+uric.getContentLength(); System.out.println(the type:+uric.getContentType(); System.out.println(the date: +uric.getDate(); System.out.println(the lastmodifie
13、d:+uric.getLastModified(); os=new FileOutputStream(d:down.html );if(uric.getContentLength()=1) is=uric.getInputStream(); while(b=is.read()!= -1) os.write(b); System.out.write(b); else System.out.println(no content); catch(Exception e) System.out.println(e); Java網絡通信網絡通信2021/3/913例例11.5 利用利用URLConnec
14、tion向服務器發(fā)送查詢信息,并向服務器發(fā)送查詢信息,并接受服務器返回的參數(shù)。接受服務器返回的參數(shù)。 P254Java網絡通信網絡通信2021/3/914二、二、Socket通信通信預備知識預備知識 Socket是網絡上的兩個程序通過一個雙向的通信連接實現(xiàn)數(shù)據(jù)是網絡上的兩個程序通過一個雙向的通信連接實現(xiàn)數(shù)據(jù)交換的通道?;蛘哒f網絡上的兩個程序通過一個雙向的通訊連接交換的通道?;蛘哒f網絡上的兩個程序通過一個雙向的通訊連接實現(xiàn)數(shù)據(jù)的交換,這個雙向鏈路的一端稱為一個實現(xiàn)數(shù)據(jù)的交換,這個雙向鏈路的一端稱為一個Socket,可以說,可以說Socket是面向客戶是面向客戶/服務器模型設計的。服務器模型設計的
15、。Socket通信機制提供了兩通信機制提供了兩種通訊方式:有聯(lián)接種通訊方式:有聯(lián)接(TCP)和無聯(lián)接和無聯(lián)接(UDP)方式,分別面向不同的方式,分別面向不同的應用需求。應用需求。 TCP是是以連接為基礎以連接為基礎的流式協(xié)議,通信前,首先要建立連接,的流式協(xié)議,通信前,首先要建立連接,然后才能通信。因此,能保證同步、準確地進行通信。如果應用然后才能通信。因此,能保證同步、準確地進行通信。如果應用程序需要可靠的點對點通信,一般采用程序需要可靠的點對點通信,一般采用TCP這種協(xié)議。比如:這種協(xié)議。比如:HTTP,ftp,telnet等應用程序,確保其可靠性對于程序運行是非常等應用程序,確保其可靠性
16、對于程序運行是非常關鍵的。關鍵的。 Java網絡通信網絡通信2021/3/915 UDP是一種無連接的協(xié)議,是一種無連接的協(xié)議,其系統(tǒng)開銷比無聯(lián)接方式小,但其系統(tǒng)開銷比無聯(lián)接方式小,但通信鏈路提供了不可靠的數(shù)據(jù)報服務,每個數(shù)據(jù)報都是一個獨立通信鏈路提供了不可靠的數(shù)據(jù)報服務,每個數(shù)據(jù)報都是一個獨立的信息,不能保證信源所傳輸?shù)臄?shù)據(jù)一定能夠到達信宿。在該方的信息,不能保證信源所傳輸?shù)臄?shù)據(jù)一定能夠到達信宿。在該方式下,通信雙方不必創(chuàng)建一個聯(lián)接過程和建立一條通訊鏈路,網式下,通信雙方不必創(chuàng)建一個聯(lián)接過程和建立一條通訊鏈路,網絡通信操作在不同的主機和進程之間轉發(fā)進行。絡通信操作在不同的主機和進程之間轉發(fā)進
17、行。 端口端口: 數(shù)據(jù)通過網絡到達一臺主機數(shù)據(jù)通過網絡到達一臺主機(或準確的說是主機的網卡或準確的說是主機的網卡)是通過是通過IP地址實現(xiàn)的。但當該主機運行多個程序時如何識別數(shù)據(jù)地址實現(xiàn)的。但當該主機運行多個程序時如何識別數(shù)據(jù)是屬于哪個程序的呢是屬于哪個程序的呢? 這就是端口。一個端口只能綁定一個應用這就是端口。一個端口只能綁定一個應用程序。通過程序。通過TCP/UDP通信的應用程序必須知道對方的通信的應用程序必須知道對方的IP地址和端地址和端口號才能通信。端口號可取從口號才能通信。端口號可取從065535,其中,其中,01023為保留為保留端口,提供給眾所周知的一些服務。端口,提供給眾所周知
18、的一些服務。Java網絡通信網絡通信2021/3/916Socket通信的一般過程通信的一般過程 使用使用Socket進行客戶進行客戶/服務器通信程序設計的一般服務器通信程序設計的一般過程是這樣的:過程是這樣的: Server端端listen(監(jiān)聽)某個端口是否有連接請求,(監(jiān)聽)某個端口是否有連接請求, Client端向端向Server端發(fā)出端發(fā)出connect(連接連接)請求,請求, Server端向端向Client端發(fā)回端發(fā)回Accept(接受接受)消息。消息。 一個連接就建立好了,之后客戶端、服務器端都可一個連接就建立好了,之后客戶端、服務器端都可以用以用send()、write()等
19、方法與對方通信。等方法與對方通信。Java網絡通信網絡通信2021/3/917 對于一個功能齊全的對于一個功能齊全的Socket的工作過程包含以下的工作過程包含以下四個基本步驟:四個基本步驟: 創(chuàng)建創(chuàng)建Socket; 打開連接到打開連接到Socket的輸入輸出流;的輸入輸出流; 按照一定的協(xié)議對按照一定的協(xié)議對Socket進行讀進行讀/寫操作;寫操作;關閉關閉Socket。Java網絡通信網絡通信2021/3/9181.創(chuàng)建創(chuàng)建Socket 創(chuàng)建客戶端創(chuàng)建客戶端Socket可以通過可以通過Socket的構造方法,介紹如下:的構造方法,介紹如下: public Socket(String hos
20、t,int port) public Socket(InetAddress address,int port) / / 用該方法創(chuàng)建一個與指定遠程主機及其端口建立連接;用該方法創(chuàng)建一個與指定遠程主機及其端口建立連接; public Socket(String host,Int port,boolean stream) / stream指明指明Socket是流式是流式Socket還是數(shù)據(jù)報式還是數(shù)據(jù)報式Socket public socket(InetAddress address,Int port,boolean stream) Serversocket的構造方法為:的構造方法為: publi
21、c Serversocket(int port) /指定端口號來創(chuàng)建指定端口號來創(chuàng)建Serversocket對象,該端口為端主機的端口;對象,該端口為端主機的端口;public Serversocket(int port,int count)/用指定的端口號創(chuàng)建用指定的端口號創(chuàng)建Serversocket對象,如果該端的端口正在使用,對象,如果該端的端口正在使用,只等待只等待count毫秒。毫秒。Java網絡通信網絡通信2021/3/9192. 打開輸入打開輸入/輸出流輸出流 public Inputstream getInputstream( ) /得到得到 Socket建立的輸入流建立的輸入
22、流 pubic Outputstream getoutputstream( ) /得到得到 Socket建立的輸出流建立的輸出流 Socket對象的其他方法:對象的其他方法: public void close() public InetAddress getlnetAddress() /得到遠程主機得到遠程主機 IP地址的地址的 InetAddress對象對象 public int getLocalPort() /得到與遠程機連接的本地機的端口號得到與遠程機連接的本地機的端口號Java網絡通信網絡通信2021/3/920Serversocket對象的其他方法:對象的其他方法: public
23、Socket accept()() /獲取與客戶端連接的獲取與客戶端連接的 Socket對象對象 /accept()為一個阻塞性方法,即該方法被調用后,將等待客戶的為一個阻塞性方法,即該方法被調用后,將等待客戶的請求,直到有一個客戶啟動并請求連接到相同的端口,然后請求,直到有一個客戶啟動并請求連接到相同的端口,然后accept()返回一個對應于客戶的返回一個對應于客戶的Socket。public void close()()public InetAddrss getInetAddress()() / 得到與客戶端相連的得到與客戶端相連的 InetAddress對象對象public int ge
24、tLocalPort()() / 得到服務器在監(jiān)聽的端口號得到服務器在監(jiān)聽的端口號 Java網絡通信網絡通信2021/3/921例例11.3 P241例例11.4 P243Java網絡通信網絡通信2021/3/9221) 客戶端的編程流程客戶端的編程流程: 打開打開Socket,新建一個套接字;新建一個套接字; 為套接字建立一個輸入和輸出流;為套接字建立一個輸入和輸出流; 根據(jù)服務器協(xié)議從套接字讀入或根據(jù)服務器協(xié)議從套接字讀入或向套接字寫入;向套接字寫入; 清除套接字和輸入清除套接字和輸入/輸出流;輸出流;2)服務器端的編程流程服務器端的編程流程: 打開打開Server Socket,創(chuàng)建一個
25、服務器型套創(chuàng)建一個服務器型套接字和一個普通套接字,服務器型套接接字和一個普通套接字,服務器型套接字在指定端口為客戶端請求的字在指定端口為客戶端請求的Socket服服務;務; 使用使用ServerSocket類的類的accept()方法使服方法使服務器型套接字處于監(jiān)聽狀態(tài)并把監(jiān)聽結務器型套接字處于監(jiān)聽狀態(tài)并把監(jiān)聽結果返回給普通套接字;果返回給普通套接字; 為該普通套接字創(chuàng)建輸入和輸出流;為該普通套接字創(chuàng)建輸入和輸出流; 從輸入和輸出流中讀入或寫入字節(jié)流,從輸入和輸出流中讀入或寫入字節(jié)流,進行相應的處理,并將結果返回給客戶進行相應的處理,并將結果返回給客戶端;端; 在客戶端和服務器工作結束后關閉所
26、有在客戶端和服務器工作結束后關閉所有的對象的對象,如服務器型的套接字如服務器型的套接字,普通套接字普通套接字,輸入和輸出流。輸入和輸出流。小結:小結:Java網絡通信網絡通信2021/3/923三、數(shù)據(jù)報通信三、數(shù)據(jù)報通信 數(shù)據(jù)報(數(shù)據(jù)報(Datagram)使網絡層數(shù)據(jù)單元在介質上)使網絡層數(shù)據(jù)單元在介質上傳輸信息的一種邏輯分組格式,它是一種在網絡中傳傳輸信息的一種邏輯分組格式,它是一種在網絡中傳播的、獨立的、自身包含地址信息的消息,它能否到播的、獨立的、自身包含地址信息的消息,它能否到達目的地,到達的時間,到達時內容是否會變化不能達目的地,到達的時間,到達時內容是否會變化不能準確知道的。它的
27、通訊雙方是不需要建立連接的,對準確知道的。它的通訊雙方是不需要建立連接的,對于一些不需要很高質量的應用程序來說,數(shù)據(jù)報通訊于一些不需要很高質量的應用程序來說,數(shù)據(jù)報通訊是一個非常好的選擇。是一個非常好的選擇。 在在Java的的包中有兩個類包中有兩個類DatagramSocket和和DatagramPacket用來支持數(shù)據(jù)報通信。用來支持數(shù)據(jù)報通信。Java網絡通信網絡通信2021/3/924DatagramSocket的構造方法:的構造方法: public DatagramSocket() /構造一個數(shù)據(jù)報構造一個數(shù)據(jù)報socket,并使其與本地主機任一可用的端,并使其與本地主機任一可用的端口
28、連接。若打不開口連接。若打不開socket則拋出則拋出SocketException異常。異常。 public DatagramSocket(int port) /構造一個數(shù)據(jù)報構造一個數(shù)據(jù)報socket,并使其與本地主機指定的端口連,并使其與本地主機指定的端口連接。若打不開接。若打不開socket或或socket無法與指定的端口連接則拋出無法與指定的端口連接則拋出SocketException異常。異常。Java網絡通信網絡通信2021/3/925DatagramPacket的構造方法:的構造方法: DatagramPacket( byte bufferedarray , int offse
29、t, int length, InetAddress address, int port) /構造一個包長度為構造一個包長度為length的包傳送到指定主機指定端口號上的包傳送到指定主機指定端口號上的數(shù)據(jù)報文包,參數(shù)的數(shù)據(jù)報文包,參數(shù)length必須小于等于必須小于等于bufferedarry.length DatagramPacket( byte bufferedarray , int length) /接收從服務器返回的結果數(shù)據(jù)報文接收從服務器返回的結果數(shù)據(jù)報文 ,只需指明存放接收的數(shù),只需指明存放接收的數(shù)據(jù)報的緩沖區(qū)和長度。據(jù)報的緩沖區(qū)和長度。 Java網絡通信網絡通信2021/3/92
30、6在在JavaJava中實現(xiàn)客戶端與服務器之間數(shù)據(jù)報通訊的方法中實現(xiàn)客戶端與服務器之間數(shù)據(jù)報通訊的方法 : :n 客戶端應用程序的工作流程客戶端應用程序的工作流程n 建立數(shù)據(jù)報通訊的建立數(shù)據(jù)報通訊的Socket,我們可以通過創(chuàng)建一個,我們可以通過創(chuàng)建一個DatagramSocket對象來實現(xiàn)它。對象來實現(xiàn)它。創(chuàng)建一個數(shù)據(jù)報文包,用來實現(xiàn)無連接的包傳送服務。每個數(shù)創(chuàng)建一個數(shù)據(jù)報文包,用來實現(xiàn)無連接的包傳送服務。每個數(shù)據(jù)報文包是用據(jù)報文包是用DatagramPacket類來創(chuàng)建,類來創(chuàng)建,DatagramPacket對象對象封裝了數(shù)據(jù)報包數(shù)據(jù),包長度,目標地址,目標端口。作為客封裝了數(shù)據(jù)報包數(shù)據(jù),
31、包長度,目標地址,目標端口。作為客戶端要發(fā)送數(shù)據(jù)報文包,要調用戶端要發(fā)送數(shù)據(jù)報文包,要調用DatagramPacket類的構造方法類的構造方法創(chuàng)建創(chuàng)建DatagramPacket對象,將要發(fā)送的數(shù)據(jù)和包文目的地址等對象,將要發(fā)送的數(shù)據(jù)和包文目的地址等信息放入對象之中。信息放入對象之中。Java網絡通信網絡通信2021/3/927n 創(chuàng)建完創(chuàng)建完DatagramSocket和和DatagramPacket對象,就可以發(fā)送對象,就可以發(fā)送數(shù)據(jù)報文包了。發(fā)送是通過調用數(shù)據(jù)報文包了。發(fā)送是通過調用DatagramSocket對象的對象的send方法實現(xiàn),它需要以方法實現(xiàn),它需要以DatagramPacket對象為參數(shù),將剛才封對象為參數(shù),將剛才封裝進裝進DatagramPacket對象中的數(shù)據(jù)組成數(shù)據(jù)報發(fā)出。對象中的數(shù)據(jù)組成數(shù)據(jù)報發(fā)出。n 也可以接收數(shù)據(jù)報文,為了接收從服務器返回的結果數(shù)據(jù)報也可以接收數(shù)據(jù)報文,為了接收從服務器返回的結果數(shù)據(jù)報文,需要創(chuàng)建一個新的文,需要創(chuàng)建一個新的DatagramPacket對象,調用對象,調用DatagramSocket對象的對象的receive()方法來完成接收數(shù)據(jù)報的工作,方法來完成接收數(shù)據(jù)報的工作,此時需要將上面創(chuàng)建的此時需要將上面創(chuàng)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 建筑施工管理提升
- 2025常用版勞動合同范本
- 2025林地轉讓合同書范文
- 小班家長志愿服務活動安排計劃
- 銀行工作總結市場突圍績效亮眼
- 電子商務領域的區(qū)塊鏈支付技術
- 行業(yè)內保安工作的重點與難點分析計劃
- 酒店物料采購管理工作總結
- 提升溝通效率的商務習慣養(yǎng)成
- 小區(qū)綠地建設的長期效益評估
- GB/T 45102-2024機采棉采收技術要求
- 2025年海南省鹽業(yè)集團有限公司招聘筆試參考題庫含答案解析
- 2024-2025學年成都市高一上英語期末考試題(含答案和音頻)
- 2024年南通職業(yè)大學單招職業(yè)技能測試題庫有答案解析
- 2024股權融資計劃
- 西式面點師試題與答案
- 鋼結構連廊專項吊裝方案(通過專家論證)
- 50MWp漁光互補光伏電站項目錘樁施工方案
- 2025免疫規(guī)劃工作計劃
- 初二家長會課件下載
- 食品安全知識培訓
評論
0/150
提交評論