版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、網(wǎng)絡(luò)通信,Java與Internet InetAddress與URL Socket通信 數(shù)據(jù)報(bào)通信,TCP/IP網(wǎng)絡(luò)參考模型包括五個(gè)層次:應(yīng)用層、傳輸層、網(wǎng)絡(luò)層、鏈路層、物理層。 大多數(shù)基于Internet的應(yīng)用程序被看作TCP/IP網(wǎng)絡(luò)的最上層, 如:ftp,http,smtp,pop3,telnet等。,Java與Internet網(wǎng)絡(luò)基本概念,物理層,傳輸層:在TCP/IP網(wǎng)絡(luò)中,不同的機(jī)器之間進(jìn)行通信時(shí),數(shù)據(jù)的傳輸是由傳輸層控制的,這包括數(shù)據(jù)要發(fā)往的目標(biāo)機(jī)器及應(yīng)用程序、數(shù)據(jù)的質(zhì)量控制等。 TCP/IP網(wǎng)絡(luò)中最常用的傳輸協(xié)議就是TCP(Transport Control Protocol)
2、和UDP(User Datagram Protocol)。 網(wǎng)絡(luò)層:對(duì)TCP/IP網(wǎng)絡(luò)中的硬件資源進(jìn)行標(biāo)識(shí)。連接到網(wǎng)絡(luò)中的每臺(tái)計(jì)算機(jī)(或其他設(shè)備)都有唯一的地址,這就是IP地址。IP地址實(shí)質(zhì)上是一個(gè)32位的整數(shù),通常以“d. d. d. d”的形式表示,每個(gè)d是一個(gè)8位整數(shù)。,Java與Internet網(wǎng)絡(luò)基本概念,物理層,傳輸層中兩類傳輸協(xié)議,TCP (Transport Control Protocol ) 面向連接的能夠提供可靠的流式數(shù)據(jù)傳輸?shù)膮f(xié)議。類似于打電話的過程。 URL, Socket, ServerSocket等類都使用TCP協(xié)議進(jìn)行網(wǎng)絡(luò)通訊。 UDP (User Datagr
3、am Protocol ) 非面向連接的提供不可靠的數(shù)據(jù)包式的數(shù)據(jù)傳輸?shù)膮f(xié)議。類似于從郵局發(fā)送信件的過程。 DatagramPacket, DatagramSocket等類使用UDP協(xié)議進(jìn)行網(wǎng)絡(luò)通訊。 注:當(dāng)對(duì)所傳輸?shù)臄?shù)據(jù)具有時(shí)序性和可靠性等要求時(shí),應(yīng)使用TCP協(xié)議;當(dāng)傳輸?shù)臄?shù)據(jù)比較簡(jiǎn)單、對(duì)時(shí)序等無要求時(shí),UDP協(xié)議能發(fā)揮更好的作用。,Java與Internet網(wǎng)絡(luò)基本概念,一臺(tái)機(jī)器只通過一條鏈路連接到網(wǎng)絡(luò)上,但一臺(tái)機(jī)器中往往有很多應(yīng)用程序需要進(jìn)行網(wǎng)絡(luò)通信,如何區(qū)分呢?這就要靠網(wǎng)絡(luò)端口號(hào)(port)了。 端口號(hào)是一個(gè)標(biāo)記機(jī)器的邏輯通信信道的正整數(shù),端口號(hào)不是物理實(shí)體。IP地址和端口號(hào)組成了所謂
4、的Socket,Socket是網(wǎng)絡(luò)上運(yùn)行的程序之間雙向通信鏈路的最后終結(jié)點(diǎn)。,網(wǎng)絡(luò)服務(wù),http,ftp,其他服務(wù),23,telnet,端口,21,80,客戶程序,Socket,IP,port,IP與端口號(hào)組合而得出的Socket,可以完全分辨Internet上運(yùn)行的程序。,端口號(hào)是用一個(gè)16位的整數(shù)來表達(dá)的,其范圍為065535,其中01023為系統(tǒng)所保留,專門給那些通用的服務(wù)(well-known services),如http服務(wù)的端口號(hào)為80,telnet服務(wù)的端口號(hào)為21,ftp服務(wù)的端口為23,因此,當(dāng)我們編寫通信程序時(shí),應(yīng)選擇一個(gè)大于1023的數(shù)作為端口號(hào),以免發(fā)生沖突。,Jav
5、a與Internet端口號(hào),Java與InternetJava中的網(wǎng)絡(luò)支持,針對(duì)網(wǎng)絡(luò)通信的不同層次,Java提供的網(wǎng)絡(luò)功能有四大類:InetAddress 、URL、Socket、Datagram。 InetAddress面向的是IP層,用于標(biāo)識(shí)網(wǎng)絡(luò)上的硬件資源。 URL面向的應(yīng)用層,通過URL,Java程序可以直接送出或讀入網(wǎng)絡(luò)上的數(shù)據(jù)。 Socket和Datagram面向的則是傳輸層。Sockets使用的是TCP協(xié)議,這是傳統(tǒng)網(wǎng)絡(luò)程序最常用的方式,可以想象為兩個(gè)不同的程序通過網(wǎng)絡(luò)的通信信道進(jìn)行通信。Datagram則使用UDP協(xié)議,是另一種網(wǎng)絡(luò)傳輸方式,它把數(shù)據(jù)的目的地紀(jì)錄在數(shù)據(jù)包中,然后
6、直接放在網(wǎng)絡(luò)上。,類InetAddress可以用于標(biāo)識(shí)網(wǎng)絡(luò)上的硬件資源,它提供了一系列方法以描述、獲取及使用網(wǎng)絡(luò)資源。 InetAddress類實(shí)例通常是用它提供的靜態(tài)方法來獲取: public static InetAddress getByName(Stringhost) host可以是一個(gè)機(jī)器名,也可以是一個(gè)形如“%d.%d.%d.%d”的IP地址或一個(gè)DNS 域名。 public static InetAddress getLocalHost() 這兩個(gè)方法通常會(huì)產(chǎn)生UnknownHostException例外,應(yīng)在程序中捕獲處理。 以下是InetAddress類的幾個(gè)主要方法: pu
7、blic String getHostAddress():獲得本對(duì)象的IP地址“%d.%d.%d.%d”。 public String getHostName():獲得本對(duì)象的機(jī)器名。,使用InetAddress,測(cè)試InetAddress類,Socket通信,在Java中,基于TCP協(xié)議實(shí)現(xiàn)網(wǎng)絡(luò)通信的類有兩個(gè):在客戶端的Socket類和在服務(wù)器端的ServerSocket類。 在服務(wù)器端通過指定一個(gè)用來等待的連接的端口號(hào)創(chuàng)建一個(gè) ServerSocket實(shí)例。 在客戶端通過規(guī)定一個(gè)主機(jī)和端口號(hào)創(chuàng)建一個(gè) socket實(shí)例,連到服務(wù)器上。 ServerSocket類的accept方法使服務(wù)器處于
8、阻塞狀態(tài),等待用戶請(qǐng)求。,類Socket 構(gòu)造方法: public Socket(Stringhost, intport) Socket的輸入/輸出流管理 public InputStream getInputStream() public OutputStream getOutputStream() 關(guān)閉Socket public void close() throws IOException 注:上述方法都將拋出例外IOException,程序中需要捕獲處理。,類ServerSocket 構(gòu)造方法: public ServerSocket(intport) 主要方法 public Sock
9、et accept():等待客戶端的連接 public void close():關(guān)閉Socket 注:這些方法都將拋出例外IOException,程序中需要捕獲處理。,Socket通信,無論一個(gè)Socket通信程序的功能多么齊全、程序多么復(fù)雜,其基本結(jié)構(gòu)都是一樣的,都包括以下四個(gè)基本步驟: 1、在客戶方和服務(wù)器方創(chuàng)建Socket/ServerSocket。 2、打開連接到Socket的輸入/輸出流。 3、利用輸入/輸出流,按照一定的協(xié)議對(duì)Socket進(jìn)行讀/寫操作。 4、關(guān)閉輸入/輸出流和Socket。 通常,我們的主要工作是針對(duì)所要完成的功能在第3步進(jìn)行編程,第1、2、4步對(duì)所有的通信程序
10、來說幾乎都是一樣的。,Socket通信,Server.java Client.java,解決方案一: 在一臺(tái)計(jì)算機(jī)上一次啟動(dòng)多個(gè)服務(wù)器程序,只要端口號(hào)不同。 myserver1 myclient1 myserver2myclient2,Socket通信支持多Client,解決方案二: 將服務(wù)器寫成多線程的,不同的處理線程為不同的客戶服務(wù)。主線程只負(fù)責(zé)循環(huán)等待,處理線程負(fù)責(zé)網(wǎng)絡(luò)連接,接收客戶輸入的信息。 /主線程 while (true) accept a connection ; create a thread to deal with the client ; ,Socket通信支持多Cli
11、ent,Socket通信支持多Client,serverSocket = new ServerSocket(4444); while (listening) Socket socket; socket = serverSocket.accept(); /程序?qū)⒃诖说群蚩蛻舳说倪B接 new MultiTalkServerThread(socket).start(); serverSocket.close();,class MultiTalkServerThread extends Thread public MultiTalkServerThread(Socket socket) this.so
12、cket = socket; public void run() ,Socket通信 支持多Client,Computer_client.java,Computer_server.java,UDP協(xié)議是無連接的協(xié)議,它以數(shù)據(jù)報(bào)作為數(shù)據(jù)傳輸?shù)妮d體。數(shù)據(jù)報(bào)是一個(gè)在網(wǎng)絡(luò)上發(fā)送的獨(dú)立信息,它的到達(dá)、到達(dá)時(shí)間以及內(nèi)容本身等都不能得到保證。數(shù)據(jù)報(bào)的大小是受限制的,每個(gè)數(shù)據(jù)報(bào)的大小限定在64KB以內(nèi)。 UDP協(xié)議無需在發(fā)送方和接收方建立連接。數(shù)據(jù)報(bào)在網(wǎng)上可以以任何可能的路徑傳往目的地。 在Java中,下面兩個(gè)類是基于UDP協(xié)議實(shí)現(xiàn)網(wǎng)絡(luò)通信的: 用于表達(dá)通信數(shù)據(jù)的數(shù)據(jù)報(bào)類DatagramPacket 用于進(jìn)行
13、端到端通信的類DatagramSocket,數(shù)據(jù)報(bào)通信,構(gòu)造方法 public DatagramPacket(bytebuf, intlength) 上述方法用于接收數(shù)據(jù) public DatagramPacket(bytebuf, intlength, InetAddress address, intport) 上述方法用于發(fā)送數(shù)據(jù) 獲取數(shù)據(jù)獲取接收?qǐng)?bào)中的信息 public InetAddress getAddress() public int getPort() public byte getData() public int getLength() 設(shè)置數(shù)據(jù)設(shè)置發(fā)送報(bào)中的信息 setAd
14、dress(InetAddressiaddr) setPort(intiport) setData(bytebuf) setLength(intlength),數(shù)據(jù)報(bào)通信類DatagramPacket,構(gòu)造方法 public DatagramSocket()/用來發(fā)送 public DatagramSocket(intport):在指定的端口通信 /用來接收 上述方法都將拋出例外SocketException,程序中需要捕獲處理。 最主要的方法發(fā)送與接收數(shù)據(jù)報(bào) public void receive(DatagramPacketp) public void send(DatagramPacke
15、tp) 這兩個(gè)方法都將拋出例外IOException,程序中需要捕獲處理。,數(shù)據(jù)報(bào)通信類DatagramSocket,數(shù)據(jù)報(bào)通信,發(fā)送端發(fā)出數(shù)據(jù)報(bào)的標(biāo)準(zhǔn)步驟: 1. 定義數(shù)據(jù)成員 DatagramSocket socket; DatagramPacket packet; InetAddress address;(用來存放接收方的地址) int port; (用來存放接收方的端口號(hào)) 2. 創(chuàng)建數(shù)據(jù)報(bào)Socket對(duì)象 try socket = new DatagramSocket(4445); catch(.SocketException e) socket 綁定到一個(gè)本地的可用端口,等待接收客
16、戶的請(qǐng)求。,3.分配并填寫數(shù)據(jù)緩沖區(qū)(一個(gè)字節(jié)類型的數(shù)組) byte buf = new byte256; 存放從客戶端接收的請(qǐng)求信息。 4.創(chuàng)建一個(gè)DatagramPacket packet = new DatagramPacket(buf, 256); 用來從socket接收數(shù)據(jù),它只需要兩個(gè)參數(shù)。 5. 服務(wù)器阻塞 socket.receive(packet); 在客戶的請(qǐng)求數(shù)據(jù)報(bào)到來之前一直等待。,數(shù)據(jù)報(bào)通信,6. 從到來的包中得到地址和端口號(hào) InetAddress address = packet.getAddress(); int port=packet.getPort(); 7
17、. 將數(shù)據(jù)送入緩沖區(qū)buf 或來自文件、或鍵盤輸入 8. 建立報(bào)文包,用來向socket上發(fā)送信息 packet = new DatagramPacket(buf, buf.length, address, port); 9. 發(fā)送數(shù)據(jù)包 socket.send(packet); 10.關(guān)閉socket socket.close();,數(shù)據(jù)報(bào)通信,數(shù)據(jù)報(bào)通信點(diǎn)到點(diǎn)通信,接收端接收數(shù)據(jù)報(bào)的標(biāo)準(zhǔn)步驟: 1. 定義數(shù)據(jù)成員 int port; InetAddress address; DatagramSocket socket; DatagramPacket packet; byte sendBuf = new byte256; 2. 建立socket(用來發(fā)送數(shù)據(jù)報(bào)) socket = new DatagramSocket();,數(shù)據(jù)報(bào)通信點(diǎn)到點(diǎn)通信,3. 向服務(wù)器發(fā)出請(qǐng)求報(bào)文 address = InetAddress.getByName(args0); port = parseInt(args1); packet = new DatagramPacket(sendBuf, 256, address, port); socket.send(packet); 這個(gè)數(shù)據(jù)報(bào)本身帶有客戶端的信息 4. 客戶機(jī)等待應(yīng)
溫馨提示
- 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. 人人文庫(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年大學(xué)三年級(jí)(動(dòng)車組檢修技術(shù))動(dòng)車組檢修試題及答案
- 2025年大學(xué)精細(xì)化工技術(shù)(分離技術(shù))模擬試題
- 2025年中職建筑機(jī)械安裝(建筑機(jī)械安裝)試題及答案
- 2025年大學(xué)本科(會(huì)計(jì)學(xué))財(cái)務(wù)共享應(yīng)用階段測(cè)試題及答案
- 2025年高職(護(hù)理)重癥護(hù)理實(shí)務(wù)階段測(cè)試題及答案
- 2025年中職休閑體育(健身指導(dǎo)方法)試題及答案
- 2025年中職第二學(xué)年(健身休閑服務(wù))健身俱樂部管理實(shí)操測(cè)試卷
- 2025年大學(xué)旅游管理(旅游學(xué)原理)試題及答案
- 2025年高職數(shù)字媒體藝術(shù)設(shè)計(jì)(數(shù)字設(shè)計(jì))試題及答案
- 2025年高職測(cè)繪工程技術(shù)(GIS技術(shù)應(yīng)用)試題及答案
- 增加費(fèi)用補(bǔ)充協(xié)議合同范例
- 《福建省修復(fù)紅樹林碳匯項(xiàng)目方法學(xué)》
- 初中數(shù)學(xué)與其他學(xué)科的融合教學(xué)
- 石油高級(jí)中學(xué)高二上學(xué)期10月月考語文試題(含解析)
- 2024年大學(xué)生電子版三方協(xié)議書模板
- 2024新版(閩教版)三年級(jí)英語上冊(cè)單詞帶音標(biāo)
- 福建省廈門市七年級(jí)語文上學(xué)期期末測(cè)試題(含答案)
- 五軸加工管理制度
- 4M變化點(diǎn)管理記錄表
- Tickets-please《請(qǐng)買票》 賞析完整
- 《馬克的怪病》課件
評(píng)論
0/150
提交評(píng)論