Java程序設(shè)計(jì) 11 網(wǎng)絡(luò)通信_(tái)第1頁
Java程序設(shè)計(jì) 11 網(wǎng)絡(luò)通信_(tái)第2頁
Java程序設(shè)計(jì) 11 網(wǎng)絡(luò)通信_(tái)第3頁
Java程序設(shè)計(jì) 11 網(wǎng)絡(luò)通信_(tái)第4頁
Java程序設(shè)計(jì) 11 網(wǎng)絡(luò)通信_(tái)第5頁
已閱讀5頁,還剩57頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第11章 網(wǎng)絡(luò)通信第一節(jié) 網(wǎng)絡(luò)基礎(chǔ)網(wǎng)絡(luò)基礎(chǔ)知識(shí)IP地址 , 5域名 主機(jī)名(hostname)端口號(hào)(port number)80,21,23,25服務(wù)類型(service)http, telnet, ftp, smtp基礎(chǔ)編程:InetAddress類表示一個(gè)IP地址封裝創(chuàng)建IP地址實(shí)例:InetAddress ip1=InetAddress.getLocalHost();InetAddress ip2= InetAddress.getByName(50); InetAddress ip3=InetAddress.getByName();類方法ip1.getHostName() 獲取此 IP

2、 地址的主機(jī)名ip1.getHostAddress() 返回 IP 地址字符串IP編程舉例(本機(jī)地址及域名解釋)TCP/IP協(xié)議層次結(jié)構(gòu)TCP/UDP與Socket概述運(yùn)輸層(傳輸層)包括TCP和UDP兩種通信協(xié)議以不同的方式實(shí)現(xiàn)兩臺(tái)主機(jī)應(yīng)用程序間數(shù)據(jù)的端到端傳輸TCP(Transmission Control Protocol),傳輸控制協(xié)議,提供面向連接的、可靠的數(shù)據(jù)傳輸服務(wù),保證了端到端數(shù)據(jù)傳輸?shù)目煽啃訳DP(User Datagram Protocol),用戶數(shù)據(jù)報(bào)協(xié)議,提供無連接的、不可靠的數(shù)據(jù)傳輸方式,沒有流量控制和確認(rèn)機(jī)制。只提供校驗(yàn)和數(shù)據(jù)完整性檢查的差錯(cuò)控制,是一種盡力而為的數(shù)

3、據(jù)傳輸方式套接字(Socket):網(wǎng)絡(luò)計(jì)算機(jī)與應(yīng)用進(jìn)程間通信的抽象協(xié)議信源機(jī)IP地址 : 信源應(yīng)用進(jìn)程端口信宿機(jī)IP地址 : 信宿應(yīng)用進(jìn)程端口socket通信模型TCP URL,URLConnectionSocket, ServerSocketUDP DatagramPacketDatagramSocketMulticastSocket兩類傳輸協(xié)議及其實(shí)現(xiàn)類第二節(jié) 應(yīng)用層編程(HTTP)URL類URL(Uniform Resource Locator)統(tǒng)一資源定位器的簡(jiǎn)稱,它表示Internet上某一資源的地址。URL的組成protocol:resourceName協(xié)議名指明獲取資源所使用的傳

4、輸協(xié)議,如http、ftp、gopher、file等,資源名則應(yīng)該是資源的完整地址,包括主機(jī)名、端口號(hào)、文件名或文件內(nèi)部的一個(gè)引用。構(gòu)造URL對(duì)象public URL(String spec)URL urlBase = new URL( “/” );public URL(URL context, String spec)URL gamelan = new URL(/pages/);URL gamelanGames = new URL(gamelan, Gamelan.game.html);URL gamelanNetwork = new URL(gamelan, G.html);構(gòu)造URL對(duì)象

5、public URL(String protocol, String host, String file);new URL(http, , /pages/G.html);public URL(String protocol, String host, int port, String file); URL gamelan =new URL(http,80,pages/Gwork.html);異常處理try URL myURL = new URL(. . .) /錯(cuò)誤URL catch (MalformedURLException e) . . . / exception handler cod

6、e here . . .獲取URL對(duì)象屬性public String getProtocol( )public String getHost( )public String getPort( )public String getFile( )public String getRef( )通過URL讀取WWW信息public class URLReader public static void main(String args) throws Exception URL cqu = new URL(“/);BufferedReader in = new BufferedReader(new In

7、putStreamReader(cqu.openStream();String inputLine;while (inputLine = in.readLine() != null) System.out.println(inputLine);in.close(); public final InputStream openStream() /建立輸入流通過URLConnection讀寫WWW資源一個(gè)URLConnection對(duì)象代表一個(gè)Java程序與URL資源的通訊連接。通過它可對(duì)這個(gè)URL資源讀或?qū)?。獲得URLConnection類對(duì)象 URLConnection url1.openCon

8、nection()成功,返回一個(gè)URLConnection對(duì)象不成功,拋出IOException例外URLConnection類的讀寫渠道public InputStream getInputStream()public OutputStream getOutputStream()通過URLConnection讀寫WWW資源try URL cqu = new URL(/); URLConnectionn tc = cqu.openConnection(); catch (MalformedURLException e) / new URL() failed . . . catch (IOExc

9、eption e) / openConnection() failed . . .擴(kuò)展:程序編程接口 APIAPI, Application Programming InterfaceAPI是一些預(yù)定義函數(shù),提供應(yīng)用程序與開發(fā)人員訪問一組例程的能力,無需訪問源碼或理解內(nèi)部細(xì)節(jié)。Windows API是一套用來控制Windows的各個(gè)部件的外觀和行為的預(yù)先定義的Windows函數(shù)。網(wǎng)絡(luò)應(yīng)用開放平臺(tái) Open API Open API在互聯(lián)網(wǎng)時(shí)代,把網(wǎng)站的服務(wù)封裝成一系列計(jì)算機(jī)易識(shí)別的數(shù)據(jù)接口開放出去,供第三方開發(fā)者使用,這種行為就叫做Open API,提供開放API的平臺(tái)本身就被稱為開放平臺(tái)。J

10、SON,JavaScript Object NotationJOSN 是一種輕量級(jí)的數(shù)據(jù)交換格式,可用于表示javascript中的對(duì)象和數(shù)組以及由它們組成的復(fù)合對(duì)象XML數(shù)據(jù)包用來標(biāo)記數(shù)據(jù)、定義數(shù)據(jù)類型,是一種允許用戶對(duì)自己的標(biāo)記語言進(jìn)行定義的源語言。 提供統(tǒng)一的方法來描述和交換獨(dú)立于應(yīng)用程序或供應(yīng)商的結(jié)構(gòu)化數(shù)據(jù)。連接、調(diào)試API接口接口地址:一個(gè)或者多個(gè)網(wǎng)絡(luò)資源地址URL驗(yàn)證方式:應(yīng)用端ID/授權(quán)Key/賬號(hào)驗(yàn)證等連接請(qǐng)求方式:Get,數(shù)據(jù)作為URL參數(shù)提交Post,數(shù)據(jù)作為請(qǐng)求主體提交Head,數(shù)據(jù)作為首部值對(duì)提交連接響應(yīng)方式:一般在響應(yīng)主體返回?cái)?shù)據(jù)數(shù)據(jù)格式:Json/XML編程實(shí)現(xiàn):按

11、文檔規(guī)定,向指定URL提交數(shù)據(jù)(發(fā)出HttpRequest請(qǐng)求),讀取返回的數(shù)據(jù)包并提取需要的數(shù)據(jù)。(接口各異,請(qǐng)參閱接口文檔)可使用postman/fiddler等Web調(diào)試工具進(jìn)行調(diào)試XML數(shù)據(jù)格式(以微信為例) 1348831860 1234567890123456 JSON的數(shù)據(jù)格式簡(jiǎn)單格式:名稱:值對(duì)firstName:Brett,lastName:McLaughlin,email:aaaa數(shù)組表示people:firstName:Brett,lastName:McLaughlin,email:aaaa,firstName:Jason,lastName:Hunter,email:bb

12、bb,firstName:Elliotte,lastName:Harold,email:ccccJson 的序列化與反序列化/json常用的開放平臺(tái)騰訊開放平臺(tái)/新浪微博開放平臺(tái)/金山快盤開放平臺(tái)/developers/百度地圖API/map/webservice.htmYeelink物聯(lián)網(wǎng)云/加網(wǎng)分享組合/編程案例華南師范大學(xué)統(tǒng)一身份認(rèn)證平臺(tái)物電學(xué)院數(shù)據(jù)接口/ashxs/xmlapi.ashx第三節(jié) 運(yùn)輸層編程(TCP)常見服務(wù)與C/S架構(gòu)socket通信模型Socket 編程模型new Socketnew SocketServerSocketClientServerRead/Write D

13、ataRead/Write DataClose SocketClose SocketwaitrequestconnectacceptsendI/O streamreceivereceivesendclosedisconnectclose簡(jiǎn)單的TCP通信(分析)Accept創(chuàng)建Socket和ServerSocketSocket(InetAddress address, int port);Socket(InetAddress address, int port, boolean stream);Socket(String host, int port);Socket(String host, i

14、nt port, boolean stream);ServerSocket(int port);ServerSocket(int port, int count); 102465535用戶端口, count為最大連接數(shù)1.客戶端Socket的建立try Socket socket=new Socket(”,2000);catch(IOException e) System.out.println(Error:+e);2.服務(wù)器端Socket的建立ServerSocket server=null;try server=new ServerSocket(2000);catch(IOExceptio

15、n e) System.out.println(can not listen to :+e);Socket socket=null;try socket=server.accept();catch(IOException e) System.out.println(Error:+e);打開輸入/輸出流PrintStream os=new PrintStream(new BufferedOutputStream(socket.getOutputStream();DataInputStream is=newDataInputStream(socket.getInputStream();PrintW

16、riter out=newPrintWriter(socket.getOutputStream(),true);BufferedReader in=newBufferedReader(new InputStreamReader(socket.getInputStream();關(guān)閉socketos.close();is.close();socket.close();注意關(guān)閉的順序Socket通信實(shí)例-客戶端Socket通信實(shí)例-服務(wù)器端Client:hello!Server:hello!Client:how are you?Server:I am fine,thank you!Client:by

17、e.Server:bye.運(yùn)行結(jié)果回顧實(shí)驗(yàn):一臺(tái)主機(jī)和一臺(tái)從機(jī),嚴(yán)格按設(shè)計(jì)好的時(shí)序通信問題的提出一臺(tái)主機(jī)只能接受一臺(tái)從機(jī)的請(qǐng)求總是先發(fā)后收,或者先收后發(fā),不能邊發(fā)邊收,隨發(fā)隨收問題的解決 實(shí)驗(yàn)課埋下的兩個(gè)伏筆Thread ASocketThread BSocketServerSocketClient AClient BClient CThread CSocket1.多客戶機(jī)制多用戶通信實(shí)例-客戶端(與單用戶相同)多用戶通信實(shí)例-服務(wù)器端多用戶通信實(shí)例-服務(wù)線程2.討論:客戶端的隨發(fā)隨收實(shí)現(xiàn)獨(dú)立的輸入處理與數(shù)據(jù)接收線程基于異步通信實(shí)現(xiàn)(略)全雙工通信實(shí)現(xiàn)如何管理多用戶機(jī)制中的N+1線程?如何實(shí)現(xiàn)

18、客戶端之間的通信?再提出兩個(gè)新的問題進(jìn)階1:使用線程池優(yōu)化多線程通信使用鍵值對(duì)保存客戶端Socket并命名根據(jù)用戶請(qǐng)求查詢并匹配Socket轉(zhuǎn)發(fā)用戶數(shù)據(jù)或者由提供機(jī)制讓客戶端之間直接通信進(jìn)階2:如何實(shí)現(xiàn)不同客戶端之間的通信? Client/Server模式P2P架構(gòu)與傳統(tǒng)C/S或B/S架構(gòu)的比較 P2P模式P2P基本原理實(shí)現(xiàn)步驟發(fā)現(xiàn):動(dòng)態(tài)定位對(duì)等節(jié)點(diǎn)的網(wǎng)絡(luò)位置連接:對(duì)等節(jié)點(diǎn)間建立網(wǎng)絡(luò)連接通信:對(duì)等節(jié)點(diǎn)間傳輸數(shù)據(jù)第三節(jié) 運(yùn)輸層編程(UDP)UDP特點(diǎn)UDP不需要建立連接,可以向網(wǎng)絡(luò)中的任何主機(jī)發(fā)送UDP數(shù)據(jù)包(不管該主機(jī)是否活動(dòng))UDP沒有緩沖機(jī)制和窗口機(jī)制接收數(shù)據(jù)時(shí),要保證字節(jié)數(shù)組足夠大可以利

19、用UDP實(shí)現(xiàn)廣播和組播UDP通信類DatagramPacket,數(shù)據(jù)報(bào)包DatagramSocket,數(shù)據(jù)報(bào)套接字MulticastSocket,多點(diǎn)廣播數(shù)據(jù)報(bào)套接字UDP數(shù)據(jù)報(bào)通信創(chuàng)建套接字DatagramSocket( );DatagramSocket(int port);DatagramSocket(int port, InetAddress laddr);MulticastSocket socket=new MulticastSocket(int port);構(gòu)造數(shù)據(jù)報(bào)DatagramPacket(byte ibuf,int ilength);DatagramPacket(byte i

20、buf,int ilength, InetAddress iaddr, int iport) ;數(shù)據(jù)報(bào)通信類收數(shù)據(jù)報(bào):DatagramSocket socket=DatagramSocket(int port, InetAddress lad);DatagramPacket packet=new DatagramPacket (buf,256);socket.receive(packet);發(fā)數(shù)據(jù)報(bào)DatagramSocket socket=DatagramSocket();DatagramPacket packet=new DatagramPacket (buf,buf.length,address,port);socket.send(packet);數(shù)據(jù)收發(fā)數(shù)據(jù)報(bào)發(fā)送數(shù)據(jù)報(bào)接收單播(Unicast)與多播(Multicast)單播(Unicast)指網(wǎng)絡(luò)中從源向目的地轉(zhuǎn)發(fā)單播流量的過程。單播流量地址唯一,只有一個(gè)發(fā)送方和一個(gè)接收方。多播/組播(Multicast)允許一個(gè)或多個(gè)發(fā)送者(多播源)將單一的數(shù)據(jù)包同時(shí)發(fā)送到多個(gè)接收者的網(wǎng)絡(luò)技術(shù)廣播(Broadcast)網(wǎng)絡(luò)廣播指一個(gè)節(jié)點(diǎn)同時(shí)向相同域中的其它所有節(jié)點(diǎn)傳輸數(shù)據(jù)包的過程。廣播消息地址包括:本地廣播、全球廣播IP: 掩碼:本地廣播地址:55全球廣播地址:55使用數(shù)據(jù)報(bào)進(jìn)行廣播通信DatagramSoc

溫馨提示

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