目錄java
第13章 Java網絡編程
主要內容
URL類
InetAdress類
套接字
UDP數據報
廣播數據報
Java遠程調用(RMI)git
重點和難點
重點: URL的使用和套接字鏈接機制
難點:套接字鏈接機制編程
java.net
包中的一個重要的類,URL的實例封裝着一個統一資源定位符(Uniform Resource Locator)
,使用URL建立對象的應用程序稱做客戶端程序。public URL(String spec) throws MalformedURLException public URL(String protocol, String host,String file) throws MalformedURLException
讀取URL中的資源
URL對象調用
InputStream openStream()
方法能夠返回一個輸入流,該輸入流指向URL對象所包含的資源。經過該輸入流能夠將服務器上的資源讀入到客戶端。服務器
package inetaddressdemo; import java.net.*; /** * 演示InetAddress類的基本使用 */ public class InetAddressDemo { public static void main(String[] args) { try{ //使用域名建立對象 InetAddress inet1 = InetAddress.getByName("www.163.com"); System.out.println(inet1); //使用IP建立對象 InetAddress inet2 = InetAddress.getByName("127.0.0.1"); System.out.println(inet2); //得到本機地址對象 InetAddress inet3 = InetAddress.getLocalHost(); System.out.println(inet3); //得到對象中存儲的域名 String host = inet3.getHostName(); System.out.println("域名:" + host); //得到對象中存儲的IP String ip = inet3.getHostAddress(); System.out.println("IP:" + ip); }catch(Exception e){} } }
獲取地址
獲取Internet上主機的地址
可使用InetAddress類
的靜態方法getByName(String s);
得到一個InetAddress對象,該對象含有主機地址的域名和IP地址,該對象用以下格式表示它包含的信息:
www.sina.com.cn/202.108.37.40
獲取本地機的地址
咱們可使用InetAddress
類的靜態方法getLocalHost()
得到一個InetAddress對象,該對象含有本地機的域名和IP地址。網絡
3.套接字
IP地址標識Internet上的計算機,端口號標識正在計算機上運行的進程(程序)。端口號被規定爲一個16位的0~65535之間的整數。
當兩個程序須要通訊時,它們能夠經過使用Socket類創建套接字對象並鏈接在一塊兒(端口號與IP地址的組合得出一個網絡套接字)。socket
try{ Socket mysocket=new Socket(「http://192.168.0.78」,1880); } catch(IOException e) { }
與mysocket相關的方法
getInputStream()得到一個輸入流
getOutputStream()得到一個輸出流
用getInputStream()獲得的輸入流接到另外一個DataInputStream數據流上
用getOutputStream()獲得的輸出流接到另外一個DataOutputStream數據流上tcp
5.UDP數據報
基於UDP的通訊和基於TCP的通訊不一樣,基於UDP的信息傳遞更快,但不提供可靠性保證。
基於UDP通訊的基本模式是:
將數據打包,稱爲數據包(比如將信件裝入信封同樣),而後將數據包發往目的地。
接受別人發來的數據包(比如接收信封同樣),而後查看數據包中的內容。分佈式
DatagramSocket mail_out=new DatagramSocket(); mail_out.send(data_pack);
Remote
接口package tcp; import java.io.*; import java.net.*; /** * echo服務器 * 功能:將客戶端發送的內容反饋給客戶端 */ public class SimpleSocketServer { public static void main(String[] args) { ServerSocket serverSocket = null; Socket socket = null; OutputStream os = null; InputStream is = null; //監聽端口號 int port = 10000; try { //創建鏈接 serverSocket = new ServerSocket(port); //得到鏈接 socket = serverSocket.accept(); //接收客戶端發送內容 is = socket.getInputStream(); byte[] b = new byte[1024]; int n = is.read(b); //輸出 System.out.println("客戶端發送內容爲:" + new String(b,0,n)); //向客戶端發送反饋內容 os = socket.getOutputStream(); os.write(b, 0, n); } catch (Exception e) { e.printStackTrace(); }finally{ try{ //關閉流和鏈接 os.close(); is.close(); socket.close(); serverSocket.close(); }catch(Exception e){} } } }
理解 URL類是對統一資源定位符的抽象,使用URL建立對象的應用程序稱做客戶端程序。 網絡套接字是基於TCP協議的有鏈接通訊,套接字鏈接就是客戶端的套接字對象和服務器端的套接字對象經過輸入、輸出流鏈接在一塊兒。 基於UDP的通訊和基於TCP的通訊不一樣,基於UDP的信息傳遞更快,但不提供可靠性保證。 設計廣播數據報網絡程序時,必須將要廣播或接收廣播的主機加入到同一個D類地址。D類地址也稱做個組播地址。 RMI是一種分佈式技術,使用RMI可讓一個虛擬機(JVM)上的應用程序請求調用位於網絡上另外一處的JVM上的對象方法RMI是一種分佈式技術。
代碼託管學習