Java程序設(shè)計(jì)應(yīng)用開(kāi)發(fā)教程 課件 7.1 網(wǎng)絡(luò)編程_第1頁(yè)
Java程序設(shè)計(jì)應(yīng)用開(kāi)發(fā)教程 課件 7.1 網(wǎng)絡(luò)編程_第2頁(yè)
Java程序設(shè)計(jì)應(yīng)用開(kāi)發(fā)教程 課件 7.1 網(wǎng)絡(luò)編程_第3頁(yè)
Java程序設(shè)計(jì)應(yīng)用開(kāi)發(fā)教程 課件 7.1 網(wǎng)絡(luò)編程_第4頁(yè)
Java程序設(shè)計(jì)應(yīng)用開(kāi)發(fā)教程 課件 7.1 網(wǎng)絡(luò)編程_第5頁(yè)
已閱讀5頁(yè),還剩9頁(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)介

單元7

網(wǎng)絡(luò)編程與多線程7.1網(wǎng)絡(luò)編程程序設(shè)計(jì)

任務(wù)7.1單用戶登錄任務(wù)描述用戶登錄KFID自動(dòng)出貨管理系統(tǒng),需要在服務(wù)器與客戶端之間進(jìn)行通信,效果如圖7-1所示。當(dāng)?shù)谝粋€(gè)客戶(即用戶)登錄系統(tǒng)時(shí),從客戶端發(fā)起登錄請(qǐng)求,客戶端將數(shù)據(jù)傳遞到服務(wù)器,由服務(wù)器顯示用戶登錄信息,并響應(yīng)給客戶端登錄信息的情況;當(dāng)?shù)谝粋€(gè)客戶與服務(wù)器進(jìn)行通信時(shí),其他客戶必須等待,只有第一個(gè)客戶退出,服務(wù)器才能與下一個(gè)客戶進(jìn)行通信,以此類推。圖7-1單用戶登錄服務(wù)器客戶端知識(shí)目標(biāo)了解IP地址和TCP協(xié)議。理解InetAddress類。能力目標(biāo)能接收和發(fā)送Socket信息。能使用I/O流套接字進(jìn)行數(shù)據(jù)傳輸。素養(yǎng)目標(biāo)培養(yǎng)人文精神和法治意識(shí)。培養(yǎng)嚴(yán)謹(jǐn)?shù)墓ぷ髯黠L(fēng)和創(chuàng)新精神。任務(wù)7.1單用戶登錄當(dāng)一臺(tái)計(jì)算機(jī)向另一臺(tái)計(jì)算機(jī)通信時(shí),需要知道另一臺(tái)計(jì)算機(jī)的地址。

互聯(lián)網(wǎng)協(xié)議(InternetProtocol,簡(jiǎn)稱:IP)地址可以用來(lái)唯一標(biāo)識(shí)互聯(lián)網(wǎng)上的計(jì)算機(jī)。IP地址就好像門牌號(hào)碼,可以指定特定的地方,就像是“致能大道1號(hào)”。IPV4是由4個(gè)字節(jié)組成,也就是分為4個(gè)8位的二進(jìn)制,每8位之間用點(diǎn)隔開(kāi),每個(gè)8位整數(shù)可以轉(zhuǎn)換成一個(gè)0~255的十進(jìn)制整數(shù)。IPV6是由16個(gè)字節(jié)(128位)組成,寫(xiě)成8個(gè)無(wú)符號(hào)整數(shù),每個(gè)整數(shù)用4個(gè)16進(jìn)制位表示,整數(shù)之間用冒號(hào)(:)分開(kāi),如3ffe:3201:1401:1280:c8ff:fe4d:db39:1984。IP地址有兩種分類方式:IPV4和IPV6。IP地址映射被稱為域名(domainname)

相關(guān)知識(shí)TCP協(xié)議互聯(lián)網(wǎng)協(xié)議是在互聯(lián)網(wǎng)中從一臺(tái)計(jì)算機(jī)向另一臺(tái)計(jì)算機(jī)以包的形式傳輸數(shù)據(jù)的一種低層協(xié)議。傳輸協(xié)議(TransmisssionControlProtocol,TCP)和用戶數(shù)據(jù)報(bào)協(xié)議(UserDatagramProtocol,UDP)。TCP協(xié)議能夠讓兩臺(tái)主機(jī)建立連接并交換數(shù)據(jù)流。它確保數(shù)據(jù)的傳送,也可確保數(shù)據(jù)包以它們發(fā)送的順序傳送。TCP端口是一個(gè)16位的整數(shù),用來(lái)指定正在計(jì)算機(jī)上運(yùn)行的進(jìn)程(或程序),也就是表示數(shù)據(jù)信息由哪個(gè)程序的服務(wù)器處理,它能夠讓用戶連接到服務(wù)器上各種不同的應(yīng)用程序。不同的進(jìn)程有不同的端口號(hào),端口號(hào)可以從0~65535,從0~1023的端口號(hào)是保留給HTTP、FTP、SMTP等。如網(wǎng)頁(yè)服務(wù)器(HTTP)的端口號(hào)是80,InetAddress類是Java對(duì)IP地址的封裝,在中有許多類都使用到了InetAddress,包括ServerSocket,Socket,DatagramSocket等等。InetAddress類InetAddress類方法方法說(shuō)明publicstaticInetAddress[]getAllByName(Stringhost)該方法可以從DNS上得到域名對(duì)應(yīng)的所有的IP。這個(gè)方法返回一個(gè)InetAddress類型的數(shù)組。publicstaticInetAddressgetByAddress(byte[]addr)該方法獲得網(wǎng)絡(luò)主機(jī)中具有指導(dǎo)IP地址的InetAddress對(duì)象。publicstaticInetAddressgetByAddress(Stringhost,byte[]addr)該方法通過(guò)IP地址來(lái)創(chuàng)建InetAddress對(duì)象,而且IP地址必須是byte數(shù)組形式,host只是一個(gè)用于表示addr的別名publicstaticInetAddressgetByName(Stringhost)該方法以通過(guò)指定域名從DNS中得到相應(yīng)的IP地址publicstaticInetAddressgetLocalHost()該方法可以得到描述本機(jī)IP的InetAddress對(duì)象示例:獲取本地主機(jī)的域名與IP地址import.InetAddress;public

classAddress{public

static

voidmain(String[]args){InetAddressinetAddr=null;//創(chuàng)建一個(gè)InetAddress對(duì)象try{ inetAddr=InetAddress.getLocalHost();//實(shí)例化InetAddress對(duì)象Stringcanonical=

inetAddr.getCanonicalHostName();//獲得本地主機(jī)的域名

StringhostName=inetAddr.getHostName();//獲得主機(jī)名Stringaddress=

inetAddr.getHostAddress();//獲得本機(jī)的IP地址

System.out.println("域名:"+canonical);System.out.println("主機(jī)名:"+hostName);System.out.println("IP地址:"+address);}catch(Exceptione){e.printStackTrace();}

}}Socket類.Socket類代表客戶端和服務(wù)器都用來(lái)互相溝通的套接字??蛻舳艘@取一個(gè)Socket對(duì)象通過(guò)實(shí)例化,而服務(wù)器獲得一個(gè)Socket對(duì)象則通過(guò)accept()方法的返回值。Socket類構(gòu)造方法構(gòu)造方法說(shuō)明publicSocket(Stringhost,intport)throwsUnknownHostException,IOException創(chuàng)建一個(gè)流套接字并將其連接到指定主機(jī)上的指定端口號(hào)publicSocket(InetAddresshost,intport)throwsIOException創(chuàng)建一個(gè)流套接字并將其連接到指定IP地址的指定端口號(hào)。publicSocket(Stringhost,intport,InetAddresslocalAddress,intlocalPort)throwsIOException創(chuàng)建一個(gè)套接字并將其連接到指定遠(yuǎn)程主機(jī)上的指定遠(yuǎn)程端口。publicSocket(InetAddresshost,intport,InetAddresslocalAddress,intlocalPort)throwsIOException創(chuàng)建一個(gè)套接字并將其連接到指定遠(yuǎn)程地址上的指定遠(yuǎn)程端口publicSocket()通過(guò)系統(tǒng)默認(rèn)類型的SocketImpl創(chuàng)建未連接套接字Socket類Socket類的常用方法方法說(shuō)明publicvoidconnect(SocketAddresshost,inttimeout)throwsIOException將此套接字連接到服務(wù)器,并指定一個(gè)超時(shí)值。publicInetAddressgetInetAddress()返回套接字連接的地址publicintgetPort()返回此套接字連接到的遠(yuǎn)程端口。publicintgetLocalPort()返回此套接字綁定到的本地端口。publicSocketAddressgetRemoteSocketAddress()返回此套接字連接的端點(diǎn)的地址,如果未連接則返回null。publicInputStreamgetInputStream()throwsIOException返回此套接字的輸入流publicOutputStreamgetOutputStream()throwsIOException返回此套接字的輸出流。publicvoidclose()throwsIOException關(guān)閉此套接字ServerSocket類服務(wù)器應(yīng)用程序通過(guò)使用.ServerSocket類以獲取一個(gè)端口,并且偵聽(tīng)客戶端請(qǐng)求。ServerSocket類構(gòu)造方法構(gòu)造方法說(shuō)明publicServerSocket(intport)throwsIOException創(chuàng)建綁定到特定端口的服務(wù)器套接字。publicServerSocket(intport,intbacklog)throwsIOException利用指定的backlog創(chuàng)建服務(wù)器套接字并將其綁定到指定的本地端口號(hào)。publicServerSocket(intport,intbacklog,InetAddressaddress)throwsIOException使用指定的端口、偵聽(tīng)backlog和要綁定到的本地IP地址創(chuàng)建服務(wù)器。publicServerSocket()throwsIOException創(chuàng)建非綁定服務(wù)器套接字。ServerSocket類ServerSocket類的常用方法方法說(shuō)明publicintgetLocalPort()返回此套接字在其上偵聽(tīng)的端口。publicSocketaccept()throwsIOException偵聽(tīng)并接受到此套接字的連接。publicvoidsetSoTimeout(inttimeout)通過(guò)指定超時(shí)值啟用/禁用SO_TIMEOUT,以毫秒為單位。publicvoidbind(SocketAddresshost,intbacklog)將ServerSocket綁定到特定地址(IP地址和端口號(hào))。使用Socket實(shí)現(xiàn)網(wǎng)絡(luò)通信連接

建立socket連接來(lái)連接服務(wù)器。傳送

用戶發(fā)送信息到服務(wù)器。接受

用戶從服務(wù)器接受信息。要使客戶端能夠正常工作,必須要做好3個(gè)任務(wù):案例:服務(wù)器程序與客戶端一對(duì)一通信編寫(xiě)一個(gè)客戶端程序和一個(gè)服務(wù)器程序,服務(wù)器端只向客戶端輸出“Helloworld”。分析:服務(wù)器程序(HelloServer.java)第一步:聲明一個(gè)ServerSocket對(duì)象,聲明一個(gè)PrintWriter對(duì)象,用于向客戶端打印輸出。ServerSocketserversocket=null;PrintWriterout=null;第二步:實(shí)例化ServerSocket對(duì)象,在9999端口進(jìn)行監(jiān)聽(tīng)。

serversocket=newServerSocket(9999);第三步:聲明一個(gè)Socket對(duì)象clientsocket,此對(duì)象用于接收客戶端的Socket連接。然后通過(guò)ServerSocket類中的accept()方法,接收客戶端的Socket請(qǐng)求,此方法返回一個(gè)客戶端的Socket請(qǐng)求。

clientsocket=serversocket.accept();第四步:通過(guò)客戶端的Socket對(duì)象去實(shí)例化PrintWriter對(duì)象,此時(shí)out對(duì)象具備向客戶端打印信息的能力。調(diào)用println()方法,將信息打印至客戶端。out=newPrintWriter(clientsocket.getOutputStream(),true);out.println("Helloworld");第五步:分別關(guān)閉客戶端Socket連接,服務(wù)器端Socket連接。

clientsocket.close();serversocket.close();案例:服務(wù)器程序與客戶端一對(duì)一通信客戶端程序(HelloClient.java)第一步

溫馨提示

  • 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)論