課件第10章java網(wǎng)絡(luò)編程_第1頁(yè)
課件第10章java網(wǎng)絡(luò)編程_第2頁(yè)
課件第10章java網(wǎng)絡(luò)編程_第3頁(yè)
課件第10章java網(wǎng)絡(luò)編程_第4頁(yè)
課件第10章java網(wǎng)絡(luò)編程_第5頁(yè)
已閱讀5頁(yè),還剩23頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

2021年6月9日11時(shí)59分1第十章Java網(wǎng)絡(luò)編程Java語(yǔ)言提供了豐富的網(wǎng)絡(luò)編程類庫(kù),因此它非常適合用于網(wǎng)絡(luò)編程,強(qiáng)大快捷的網(wǎng)絡(luò)編程功能正是Java備受歡迎的主要原因之一。Java的網(wǎng)絡(luò)功能由幾個(gè)不同的包實(shí)現(xiàn),基本的網(wǎng)絡(luò)功能定義在包中。其中的接口和類可以大致分為三部分:URL、URLConnection和Socket。2Java1、引言10.1

URL的使用3JavaURL(Uniform/Universal

Resource

Locator)統(tǒng)一資源定位符號(hào)。通過(guò)URL可以訪問(wèn)Internet上的各種網(wǎng)絡(luò)資源。URL的基本結(jié)構(gòu)由如下5部分組成:<傳輸協(xié)議>://<主機(jī)名>:<端口號(hào)>/<文件名>#<引用>傳輸協(xié)議(protocol):有HTTP、FTP、File等。默認(rèn)為

HTTP協(xié)議。主機(jī)名(hostname):指定資源所在的主機(jī)名。主機(jī)名可以是IP地址,也可以是主機(jī)的名字或者域名。端口號(hào)(port):端口號(hào)用來(lái)區(qū)分一個(gè)計(jì)算機(jī)中提供的不同服務(wù),如Web服務(wù)、FTP服務(wù)等。每一種服務(wù)都用一個(gè)端口號(hào),范圍是0~65535。在URL中,hostname后面的冒號(hào)及端口號(hào)是可以省略的,HTTP的默認(rèn)端口號(hào)是80。文件名(filename):文件名包括該文件的完整路徑。在HTTP協(xié)議中,有一個(gè)默認(rèn)的文件名是

index.html,因此,與兩者等價(jià)。引用(reference):是對(duì)資源內(nèi)的某個(gè)引用,如。URL類的構(gòu)造方法1、publicURL(Stringspec):使用URL字符串構(gòu)造一個(gè)URL對(duì)象URL

u1=new

URL("");4JavaURL類的構(gòu)造方法5Java2、public

URL(String

protocol,String

host,String

file):用指定的協(xié)議、主機(jī)名、文件路徑及文件名創(chuàng)建一個(gè)URL對(duì)象;URL

u2=new

URL("http","","/~xyx/doc/manhua.html");3、public

URL(String

protocol,String

host,int

port,Stringfile):用指定的協(xié)議、主機(jī)名、端口號(hào)、文件路徑及文件名創(chuàng)建一個(gè)URL對(duì)象。第一個(gè)String類型的參數(shù)是協(xié)議的類型,可以是HTTP、FTP等。第二個(gè)String類型參數(shù)是主機(jī)上的某個(gè)文件(可以包括目錄),int類型參數(shù)是指定端口號(hào),最后一個(gè)參數(shù)給出文件名或路徑名。URL

u3=new

URL("http","

",80,"/~xyx/doc/manhua.html");URL類中的主要方法方法名功能說(shuō)明public

String

getProtocol()獲取該URL的協(xié)議名public

String

getHost()獲取該URL的主機(jī)名public

int

getPort()獲取該URL的端口號(hào)。若無(wú)端口,返回-1public

String

getFile()獲取該URL中的文件名public

String

getContent()獲取傳輸協(xié)議public

String

toString()將URL轉(zhuǎn)化為字符串InputStream

openStream()打開(kāi)該URL的輸入流public

String

getPath()獲取該URL的路徑URLConnectionopenConnection()打開(kāi)由該URL標(biāo)識(shí)的位置的連接void

set(string

protocol,stringhost,int

prot,string

file,string

ref)設(shè)置該URL的各域的值6Javapublic

static

void

main(String[]

args)

throwsException

{7JavaURL

u=

new

URL("

");InputStream

in=u.openStream();byte[]

b=new

byte[in.available()];in.read(b);

System.out.println(new

String(b));in.close();}}10.2 Socket網(wǎng)絡(luò)編程8Java客戶端可以通過(guò)構(gòu)造一個(gè)Socket類對(duì)象來(lái)建立與服務(wù)器的連接?;赟ocket的連接可以是流連接,也可以是數(shù)據(jù)報(bào)連接。Socket類的常用構(gòu)造方法有如下3種:1、Socket():創(chuàng)建一個(gè)套接字對(duì)象,該對(duì)象不請(qǐng)求任何連接。2、Socket(String

host,int

port)創(chuàng)建一個(gè)Socket對(duì)象,請(qǐng)求與host指定的服務(wù)器通過(guò)port端口建立連接3、Socket(InetAddress,int)創(chuàng)建一個(gè)連接指定Internet地址、指定端口的流式Socket類對(duì)象端口號(hào)代表了特定的務(wù),故必須保證此端口號(hào)沒(méi)有被其他應(yīng)用程序或服務(wù)占用。端口號(hào)的范圍為0~65535,但0~1023為系統(tǒng)保留的端口號(hào),分配給了特定的應(yīng)用協(xié)議,如80

代表HTTP

服務(wù)、21代表FTP服務(wù)。編寫(xiě)網(wǎng)絡(luò)程序時(shí),應(yīng)使用1024以上的端口。9Java方法名功能說(shuō)明void

close()關(guān)閉Socket連接InetAddress

getInetAddress()獲取當(dāng)前連接的遠(yuǎn)程主機(jī)的Internet地址InputStream

getInputStream()獲取Socket對(duì)應(yīng)的輸入流InetAddress

getLocalAddress()獲取本地主機(jī)的Internet地址int

getLocalPort()獲取本地連接的端口號(hào)OutputStreamgetOutputStream()獲取該Socket的輸出流int

getPort()獲取遠(yuǎn)程主機(jī)端口號(hào)void

shutdownInput()關(guān)閉輸入流void

shutdownOutput()

10關(guān)閉輸出流JavaSocket類的主要方法9、ServerSocket類ServerSocket類用在服務(wù)器端,用來(lái)監(jiān)聽(tīng)所有來(lái)自指定端口的連接,并為每個(gè)新的連接創(chuàng)建一個(gè)Socket對(duì)象。之后客戶端便可以與服務(wù)器端開(kāi)始通信了。11JavaServerSocket

類12JavaServerSocket類的幾個(gè)構(gòu)造方法如下:在指定端口上創(chuàng)建1、ServerSocket(intport):一個(gè)ServerSocket類對(duì)象。2、ServerSocket(int

port,

int

backlog): 在指定端口上創(chuàng)建一個(gè)ServerSocket類對(duì)象,并進(jìn)入監(jiān)聽(tīng)狀態(tài),第二個(gè)int類型的參數(shù)backlog是服務(wù)器忙時(shí)保持連接請(qǐng)求的等待客戶數(shù)量。3、ServerSocket(int

port,

int

backlog,InetAddress

bindAddr)

使用指定的端口和和要綁定到的服務(wù)器

IP地址創(chuàng)建一個(gè)ServerSocket類對(duì)象,并進(jìn)入監(jiān)聽(tīng)狀態(tài)。ServerSocket類的主要方法方法名功能說(shuō)明Socket

accept()接收該連接并返回該連接的Socket對(duì)象voidclose()關(guān)閉此服務(wù)器的SocketInetAddressgetInetAddress()獲取該服務(wù)器Socket所綁定的地址int

getLocalPort()獲取該服務(wù)器Socket所偵聽(tīng)的端口號(hào)int

getSoTimeout()獲取連接的超時(shí)數(shù)voidsetSoTimeout(inttimeout)設(shè)置連接的超時(shí)數(shù),參數(shù)表示ServerSocket的accept()方法等待客戶連接的超時(shí)時(shí)間。如果參數(shù)值為0,表示永遠(yuǎn)不會(huì)超時(shí),進(jìn)

入阻塞狀態(tài)這也是它的默認(rèn)值13Java首先,在服務(wù)器端構(gòu)造一個(gè)ServerSocket類,在指定端口上進(jìn)行監(jiān)聽(tīng),這時(shí)服務(wù)器的線程處于等待狀態(tài)。然后在用戶端構(gòu)造Socket類,與服務(wù)器上的指定端口進(jìn)行連接。服務(wù)器監(jiān)聽(tīng)到連接請(qǐng)求后就可在兩者之間建立連接。連接建立之后,還必須進(jìn)行輸入、輸出流的連接才能開(kāi)始進(jìn)行通信。通信的一般步驟如下:1、服務(wù)器程序創(chuàng)建一個(gè)ServerSocket對(duì)象,然后調(diào)用accept()方法等待客戶端建立連接;2、客戶端程序創(chuàng)建一個(gè)Socket

對(duì)象,并請(qǐng)求與服務(wù)器建立連接;3、建立連接后,可以用Socket

類的getInputStream()和getOutputStream()方法獲得讀寫(xiě)數(shù)據(jù)的輸入/輸出流;4、通信結(jié)束后,雙方調(diào)用Socket

類的close

方法斷開(kāi)連接。14Java10、實(shí)現(xiàn)Socket通信Server

端15JavaClient

端Accept()inputStreamoutputStream創(chuàng)建ServerSocket對(duì)象時(shí),需要的只是一個(gè)端口號(hào)和IP地址。如果服務(wù)器就設(shè)定在本地,則不需要IP地址。調(diào)用accept()方法時(shí),服務(wù)器端進(jìn)阻塞狀態(tài),等待客戶端的請(qǐng)求,直到有一個(gè)客戶啟動(dòng)并請(qǐng)求連接到相應(yīng)的服務(wù)器端口。在通信時(shí),由Socket對(duì)象可以得到與之相關(guān)聯(lián)的一個(gè)網(wǎng)絡(luò)輸入流和網(wǎng)絡(luò)輸出流。如果一個(gè)進(jìn)程要通過(guò)網(wǎng)絡(luò)向另一個(gè)進(jìn)程發(fā)送數(shù)據(jù),只需要寫(xiě)入與socket相關(guān)聯(lián)的輸出流。同樣,如果一個(gè)進(jìn)程要讀取另一個(gè)進(jìn)程發(fā)送過(guò)來(lái)的數(shù)據(jù),則可以從與socket相關(guān)聯(lián)的輸入流中讀取。16Javaimport .*

;import

java.io.*

;public

class

ServerTest{

public

static

void

main(String

args[])throwsException{ //所有異常拋出ServerSocket

server=null;//定義ServerSocket類Socket

client=null;//表示客戶端PrintStream

out=null;//打印流輸出server=new

ServerSocket(2588);

//服務(wù)器在2588端口上監(jiān)聽(tīng)System.out.println("服務(wù)器運(yùn)行,等待客戶端連接。");client=server.accept();//得到連接,程序進(jìn)入到阻塞狀態(tài)17JavaString

str="hello

Java";//表示要輸出的信息

out

=

newPrintStream(client.getOutputStream())

;out.println(str);//向客戶端輸出信息client.close()

;server.close()

;}};18JavaJava19客戶端程序import .*

;import

java.io.*

;public

class

ClientTest{public

static

void

main(String

args[])throwsException Socket

client=null;

//表示客戶端client

=

new

Socket("localhost",2588)

;BufferedReader

buf=null;

//一次性接收完成buf

=

new

BufferedReader(newInputStreamReader(client.getInputStream()))

;String

str

=

buf.readLine()

;System.out.println("服務(wù)器端輸出內(nèi)容:"+str);buf.close()

;client.close()

;}};例:服務(wù)器和客戶端進(jìn)行回聲通信20Java客戶端從鍵盤(pán)輸入的信息發(fā)送給服務(wù)器,服務(wù)器讀取后,前面加上ECHO:又傳送給客戶端。分析:客戶端和服務(wù)器都有數(shù)據(jù)的讀寫(xiě),即都要用到Socket的InputStream和OutputStream。同時(shí)客戶端要能進(jìn)行鍵盤(pán)輸入。服務(wù)器端程序代碼:ServerReadWrite.java客戶端代碼:ClientReadWrite.java10.3 InetAddress

類21Java在Java中通過(guò)InetAddress類表示IP地址,用于實(shí)現(xiàn)主機(jī)名和IP地址之間的轉(zhuǎn)換。InetAddress類描述了32位或64位的IP地址,并通過(guò)它的兩個(gè)子類Inet4Address

Inet6Address來(lái)實(shí)現(xiàn)。之前的IP地址,實(shí)際上使用四個(gè)十進(jìn)制數(shù)字表示,相當(dāng)于32位,把這樣的IP地址稱為IPV4。但是隨著網(wǎng)絡(luò)上主機(jī)越來(lái)越多,發(fā)現(xiàn)IPV4地址不夠使用,所以又進(jìn)行了改進(jìn)產(chǎn)生了IPV6(64位)。注意InetAddress類的構(gòu)造方法被私有化了,所以不能通過(guò)構(gòu)造方法對(duì)其產(chǎn)生實(shí)例對(duì)象,只能通過(guò)其靜態(tài)方法對(duì)其產(chǎn)生實(shí)例對(duì)象。找不到本地機(jī)器的地址時(shí),這些方法通常會(huì)拋出UnknownHostException異常,所以應(yīng)該在程序中進(jìn)行異常處理。.InetAddress類的主要方法方法名功能說(shuō)明static

InetAddress

getLocalHost()獲得本地主機(jī)的InetAddress對(duì)象static

InetAddressgetByName(String

host)獲得通過(guò)主機(jī)名host指定的InetAddress對(duì)象String

getHostAddress()以帶圓點(diǎn)的字符串形式獲取IP地址String

getHostName()獲取主機(jī)名字22Javapublic

static

InetAddress

getLocalHost()該方法返回一個(gè)InetAddress對(duì)象,這個(gè)對(duì)象包含了本地機(jī)的IP地址。當(dāng)查找不到本地機(jī)的地址時(shí),將會(huì)拋出一個(gè)

UnknownHostException異常。public

static

InetAddress

getByName

(String

host)該方法返回一個(gè)由host指定的InetAddress對(duì)象,參數(shù)host可以是一個(gè)主機(jī)名,也可以是一個(gè)IP地址或者一個(gè)DNS域名。如果找不到指定的主機(jī)的IP地址,那么該方法將拋出一個(gè)

UnknownHostException異常。獲得一個(gè)InetAddress對(duì)象后,就可以使用InetAddress類的

getAddress()方法獲得本機(jī)對(duì)象的IP地址(存放在字節(jié)數(shù)組中);使用getHostAddress()方法獲得本機(jī)對(duì)象的IP地址;使用getHostName()方法獲得主機(jī)名。23Javapublic

Sring

getHostAddress()該方法將IP地址以網(wǎng)絡(luò)字節(jié)順序的字節(jié)數(shù)組的形式返回。由于IPV4只有4個(gè)字節(jié),IPV6有16個(gè)字節(jié),如果需要知道數(shù)組的長(zhǎng)度,可以用數(shù)組的length字段獲得。public

Sring

getHostName()

getHostName()方法返回一個(gè)字符串形式的主機(jī)名字。如果被查詢的機(jī)器沒(méi)有主機(jī)名,或者如果使用了

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論