java網(wǎng)絡編程典型例題_第1頁
java網(wǎng)絡編程典型例題_第2頁
java網(wǎng)絡編程典型例題_第3頁
java網(wǎng)絡編程典型例題_第4頁
java網(wǎng)絡編程典型例題_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

本文格式為Word版,下載可任意編輯——java網(wǎng)絡編程典型例題網(wǎng)絡典型例題

Java提供了兩個不同層次的網(wǎng)絡支持機制:利用URL訪問網(wǎng)絡資源利用Socket通信

一、統(tǒng)一資源定位符URL類

1、URL用來網(wǎng)絡資源定位,它的值由5部分組成,格式如下所示

://:/#其中傳輸協(xié)議(protocol)指明獲取資源所使用的傳輸協(xié)議,如http、ftp、file等。http表示通過HTTP訪問網(wǎng)絡資源。ftp表示通過網(wǎng)絡協(xié)議FTP訪問網(wǎng)絡資源。file表示

本機上文件,是所指定的資源。news表示通過NNTP訪問指定新聞地址的資源。

主機名(hostname)指定資源所在的計算機,可以是IP地址,如,也可以是主機名或域名,如.。

一個計算機中可能有多種服務(應用程序),端口號(port)用來區(qū)分不同的網(wǎng)絡服務,如http服務的默認端口號是80,ftp服務的默認端口號是21等。理論上有0-65535個端口,其中1024號以下端口一般都給定了用途,例如HTTP使用80端口;FTP默認21端口;Telnet使用23端口。平常我們使用1024號以上端口。

文件名(filename)包括該文件的完整路徑。在http協(xié)議中,缺省的文件名是index.html,因此,就相等同于/index.html。

引用(reference)為資源內(nèi)的某個引用,用來定位顯示文件內(nèi)容的位置,如/index.html#chapter1。但并非所有的URL都包含這些元素。對于多數(shù)的協(xié)議,主機名和文件名是必需的,但端口號和文件內(nèi)部的引用則是可選的。

2、URL類位于包中,是指向互聯(lián)網(wǎng)資源的指針,使用URL可以通過給定的URL地址訪問到需要的資源。資源可以是簡單的文件和目錄,也可以是對象的引用、對數(shù)據(jù)庫或探尋引擎的查詢。

URL類的對象代表一個URL地址。URL對象的創(chuàng)立例如:其構(gòu)造方法:

1)通過指定的URL字符串創(chuàng)立URL對象

URLgamelan=newURL(\2)通過指定的協(xié)議、主機地址、路徑字符串創(chuàng)立URL對象

URLgamelan=newURL(\3)通過指定的協(xié)議、主機地址、端口號、路徑字符串創(chuàng)立URL對象

URLgamelan=newURL(\上兩種方法將一個URL地址分解,按不同部分分別指定協(xié)議、主機、端口、文件。

4)通過指定的上下文中對指定的協(xié)議的解析創(chuàng)立對象:URL(URLcontext,Stringspec)這種方法基于一個已有的URL對象創(chuàng)立一個新的URL對象,多用于訪問同一個主機上不同路徑的文件,例如:

URLu1=newURL(u,〞ro.html〞);創(chuàng)立URL后,可以對其操作:

publicintgetDefaultItPort();獲取與此URL關(guān)聯(lián)的默認端口號publicStringgetFile();獲取此URL的文件名

publicStringgetHost();獲取此URL的主機名publicStringgetPath();獲取此URL的路徑部分publicintgetPort();獲取此URL的端口號

publicStringgetProtocol();獲取此URL的協(xié)議名稱publicStringgetQuery();獲取此URL的查詢部分

publicInputStreamopenStream();開啟到此URL的連接并返回一個用于從該連接讀入的InputStream。

3、URLConnection抽象類

該抽象類代表應用程序和URL之間的通信鏈接。創(chuàng)立一個到URL的連接步驟:1)對影響到遠程資源連接的參數(shù)操作,通過在URL上調(diào)用openConnection方法創(chuàng)立連接對象。

2)除了設置參數(shù)和一般請求屬性。

3)使用connect方法建立到遠程對象的實際連接,與資源交互;查詢頭字段和內(nèi)容。4)遠程對象變?yōu)榭捎?。遠程對象的頭字段和內(nèi)容變?yōu)榭稍L問。

建立到遠程對象的連接后,可以使用以下方法對頭字段和內(nèi)容進行訪問。publicObjectgetContent()throwsIOException;獲取此URL鏈接的內(nèi)容publicStringgetHeaderField(intn);獲取指定頭字段的值

publicInputStreamgetInputStream()throwsIOException;獲取輸入流,假使讀超時,會拋出SockeTimeoutException。

publicOutputStreamgetOutputStream()throwsIOException;獲取輸出流publicStringgetContentEncoding();獲取content-encoding的值publicintgetContentLength();獲取content-length的值publicStringgetContentType();獲取content-type的值publiclonggetDate();獲取date的值

publiclonggetLastModified();獲取last-modified的值,結(jié)果為距離格林威治標準時間的毫秒數(shù)。

以下是測試一例。importjava.io.*;import.*;importjava.util.*;

//寫URL的測試類,獲取網(wǎng)站的信息,并將網(wǎng)站主頁下載到本地磁盤上publicclassURLTest{//主方法

publicstaticvoidmain(String[]args){

try{//定義urlName的字符串,假使args數(shù)組長度大于0,則將args[0]的值賦給urlName

StringurlName=\if(args.length>0){

urlName=args[0];}

URLurl=newURL(urlName);//創(chuàng)立URL對象System.out.println(\打印url的一些信息:\

System.out.println(\獲取協(xié)議名稱System.out.println(\獲取主機名稱

System.out.println(\獲取此URL的文件名System.out.println(\獲取路徑

System.out.println(\獲取端口號,未設置返回-1口號返回連接值毫秒數(shù)。////System.out.println(\+url.getDefaultPort());//返回默認端

URLConnectionconnection=url.openConnection();//開啟遠程對象的連接,

connection.connect();//連接到服務器,開啟此URL引用的資源的通信鏈接//獲取并打印頭字段的值

System.out.println(\打印頭字段信息:\intn=1;Stringkey;

while((key=connection.getHeaderFieldKey(n))!=null){

Stringvalue=connection.getHeaderField(n);//返回第n個頭字段的值System.out.println(key+\打印頭字段的鍵、值n++;}

//打印引用資源的一些屬性

System.out.println(\打印引用資源的一些屬性\System.out.println(\

+connection.getContentType());//返回引用資源的內(nèi)容類型System.out.println(\

+connection.getContentLength());//返回引用資源的內(nèi)容長度System.out.println(\

+connection.getContentEncoding());//返回引用資源的內(nèi)容編碼

//返回引用資源的發(fā)送日期,為距離格林威治標準時間1970年1月1日的System.out.println(\//返回引用資源上次的修改日期,若未知返回0

System.out.println(\//下載引用文件到本地磁盤,讀取文件

BufferedReaderin=newBufferedReader(new

InputStreamReader(connection.getInputStream()));

//打印輸出源文件前10行Stringline;//n=1;

//while((line=in.readLine())!=null//n++;//}

//if(line!=null)

//System.out.println(\

//創(chuàng)立輸出流,并指定目標文件BufferedWriterbw=newBufferedWriter(newFileWriter(\

//對輸出流做進一步進行封裝

PrintWriterpw=newPrintWriter(bw);//聲明臨時字符串引用Stringtemps=null;

//從輸入流中獲取資源并測試是否讀取完畢while((temps=in.readLine())!=null){

//將獲取的數(shù)據(jù)寫如目標文件pw.println(temps);}

//打印提醒信息

System.out.println(\您好,網(wǎng)站主頁已經(jīng)下載完畢,已經(jīng)寫入了URLTest.html\

pw.close();//關(guān)閉輸出流in.close();//關(guān)閉輸入流}

catch(IOExceptionexception){

exception.printStackTrace();}}}

二、Socket編程

傳統(tǒng)的C/S模式的網(wǎng)絡程序主要通過服務器端和客戶端的網(wǎng)絡連接來實現(xiàn)數(shù)據(jù)傳輸。服務器端和客戶端的網(wǎng)絡連接主要是TCPSocket連接。在包中提供了Socket和ServerSocket類來實現(xiàn)連接。

在Socket編程中發(fā)送方和接收方的兩個Socket之間必需先連接,再才能在TCP協(xié)議的基礎上進行通信。

服務器的任務就是等候建立一個連接,然后用那個連接產(chǎn)生的Socket創(chuàng)立一個InputStream以及一個OutputStream。之后,從InputStream讀入的所有東西都會反饋給

OutputStream,直到接收到行中止(END)為止,最終關(guān)閉連接??蛻魴C連接與服務器的連接,然后創(chuàng)立一個OutputStream。文本行通過OutputStream發(fā)送??蛻魴C也會創(chuàng)立一個InputStream,用它收聽服務器說些什么。服務器與客戶機(程序)都使用同樣的端口號,而且客戶機利用本地主機地址連接位于同一臺機器中的服務器(程序),所以不必在一個物理性的網(wǎng)絡里完成測試。

注意,ServerSocket只要一個端口編號,不需要IP地址(由于它就在這臺機器上運行)。調(diào)用accept()時,方法暫時陷入停頓狀態(tài),直到某個客戶嘗試同它建立連接。建好一個連接以后,accept()會返回一個Socket對象,它是那個連接的代表。假使ServerSocket構(gòu)建器失敗,則程序簡單地退出(注意必需保證ServerSocket的構(gòu)建器在失敗之后不會留下任何開啟的網(wǎng)絡套接字)。針對這種狀況,main()會“擲〞出一個IOException違例,所以不必使用一個try塊。若ServerSocket構(gòu)建器成功執(zhí)行,則其他所有方法調(diào)用都必需到一個try-finally代碼塊里尋求保護,以確保無論塊以什么方式留下,ServerSocket都能正確地關(guān)閉。

同樣的道理也適用于由accept()返回的Socket。若accept()失敗,那么我們必需保

證Socket不再存在或者含有任何資源,以便不必清除它們。但假若執(zhí)行成功,則后續(xù)的語句必需進入一個try-finally塊內(nèi),以保障在它們失敗的狀況下,Socket仍能得到正確的清除。由于套接字使用了重要的非內(nèi)存資源,所以在這里必需特別提防,必需自己動手將它們清除。無論ServerSocket還是由accept()產(chǎn)生的Socket都打印到System.out里。這意味著它們的toString方法會得到自動調(diào)用。這樣便產(chǎn)生了:

ServerSocket[addr=,PORT=0,localport=8080]Socket[addr=,PORT=1077,localport=8080]

在后面的程序中大家會看到它們?nèi)绾闻c客戶程序做的事情協(xié)同。

服務器端程序:mportjava.io.*;import.*;

//寫服務器端,對端口進行監(jiān)聽,接受客戶端請求并為客戶端服務publicclassTcpServer{publicstaticvoidmain(String[]args){//服務器對8888端口進行監(jiān)聽,接受到客戶端連接請求后,創(chuàng)立和啟動服務線程,longco

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論