版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 新疆警察學(xué)院《人機(jī)交互界面設(shè)計(jì)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年蛋糕店創(chuàng)業(yè)計(jì)劃
- 2024年大學(xué)生學(xué)生助理工作總結(jié)8篇
- 2024年初中學(xué)校學(xué)生宿舍管理制度
- 《政府的權(quán)力用》課件
- 商鋪退房合同范例
- 奶茶店轉(zhuǎn)讓意向合同范例
- 土頭運(yùn)輸合同范例
- 口罩用品采購(gòu)合同范例
- 公開(kāi)招標(biāo)簽訂合同范例
- 江蘇鹽城介紹課件
- 【全國(guó)】2023年4月自學(xué)考試11742商務(wù)溝通方法與技能真題
- HR盡職調(diào)查報(bào)告
- 某V-M雙閉環(huán)不可逆直流調(diào)速系統(tǒng)設(shè)計(jì)
- 穿越北緯18度-海南旅游文化知到章節(jié)答案智慧樹(shù)2023年三亞中瑞酒店管理職業(yè)學(xué)院
- 【小紅書(shū)企業(yè)戰(zhàn)略管理案例分析8500字(論文)】
- 反循環(huán)鉆孔灌注樁首件施工方案
- 論農(nóng)村幼兒自然教育的教育理念 論文
- 實(shí)用英語(yǔ)口語(yǔ)文化演講-中國(guó)戲曲【Chinese Opera】
- 全國(guó)2016年10月自考00043經(jīng)濟(jì)法概論(財(cái)經(jīng)類)試題及答案
- 凈化工程施工驗(yàn)收?qǐng)?bào)告正規(guī)版
評(píng)論
0/150
提交評(píng)論