URL類一般使用以下的構造方法建立一個URL對象:java
public URL(String spec) throws MalformedURLException
public URL(String protocol, String host,String file) throws MalformedURLException
URL對象調用
InputStream openStream()
方法能夠返回一個輸入流,該輸入流指向URL對象所包含的資源。經過該輸入流能夠將服務器上的資源讀入到客戶端。編程
Internet上的主機有兩種方式表示地址:服務器
www.sina.com.cn/202.108.37.40
。getByName(String s);
www.sina.com.cn/202.108.37.40
getLocalHost()
得到一個InetAddress對象,該對象含有本地機的域名和IP地址。IP地址標識Internet上的計算機,端口號標識正在計算機上運行的進程(程序)。端口號被規定爲一個16位的0~65535之間的整數。
當兩個程序須要通訊時,它們能夠經過使用Socket類創建套接字對象並鏈接在一塊兒(端口號與IP地址的組合得出一個網絡套接字)。網絡
客戶端的程序使用Socket類創建負責鏈接到服務器的套接字對象。
創建鏈接到服務器的套接字對象:多線程
try{ Socket mysocket=new Socket(「http://192.168.0.78」,1880); } catch(IOException e) {}
與mysocket相關的方法socket
getInputStream()
得到一個輸入流getOutputStream()
得到一個輸出流getInputStream()
獲得的輸入流接到另外一個DataInputStream數據流上getOutputStream()
獲得的輸出流接到另外一個DataOutputStream數據流上服務器必須創建一個ServerSocket對象,該對象經過將客戶端的套接字對象和服務器端的一個套接字對象鏈接起來,從而達到鏈接的目的。
創建ServerSocket對象:分佈式
try22{ ServerSocket serverForClient =new ServerSocket(2010); } catch(IOException e){}
使用方法accept()將客戶的套接字和服務器端的套接字鏈接起來,代碼以下所示:學習
try{ Socket sc= serverForClient .accept(); } catch(IOException e){}
所謂「接收」客戶的套接字鏈接就是accept()
方法會返回一個和客戶端Socket對象相鏈接的Socket對象。url
客戶端的套接字得到的輸入\輸出流和服務器端的套接字得到的輸出\輸入流互相鏈接.
.net
爲了防止堵塞線程,服務器端收到一個客戶的套接字後,就應該啓動一個專門爲該客戶服務的線程。
在Example13_4中,客戶使用Socket類不帶參數的構造方法Socket()
建立一個套接字對象,該對象需調用
public void connect(SocketAddress endpoint) throws IOException
請求和參數SocketAddress指定地址的套接字創建鏈接。
爲了使用connect方法,可使用SocketAddress的子類InetSocketAddress建立一個對象,
InetSocketAddress的構造方法是:InetSocketAddress(InetAddress addr, int port)
基於UDP的通訊和基於TCP的通訊不一樣,基於UDP的信息傳遞更快,但不提供可靠性保證。
基於UDP通訊的基本模式是:
DatagramPacket(byte data[],int length,InetAddtress address,int port)
DatagramPack(byte data[],int offset,int length,InetAddtress address,int port)
DatagramSocket mail_out=new DatagramSocket();
mail_out.send(data_pack);
DatagramSocket(int port)
建立一個對象,其中的參數必須和待接收的數據包的端口號相同。DatagramSocket mail_in=new DatagramSocket(5666);
receive(DatagramPacket pack)
接受數據包。DatagramPack(byte data[],int length)
建立一個數據包,用於接收數據包,例如:byte data[]=new byte[100]; int length=90; DatagramPacket pack=new DatagramPacket(data,length); mail_in.receive(pack);
該數據包pack
將接收長度是length
字節的數據放入data
。
廣播數據報涉及到地址和端口。
廣播數據報是一種較新的技術,要廣播或接收廣播的主機都必須加入到同一個D類地址。
Java遠程調用,RMI(Remote Method Invocation)是一種分佈式技術,使用RMI可讓一個虛擬機(JVM)上的應用程序請求調用位於網絡上另外一處的JVM上的對象方法。習慣上稱發出調用請求的虛擬機(JVM)爲(本地)客戶機,稱接受並執行請求的虛擬機(JVM)爲(遠程)服務器。
java.rmi
包中Remote的子接口,即擴展Remote
接口。Remote
接口,RMI使用Remote
接口來標識遠程對象,可是Remote中沒有方法,所以建立遠程對象的類須要實現Remote接口的一個子接口。rmiregistry
: 執行rimregistry
命令rebind(String name, Remote obj)
綁定一個遠程對象到rmiregistry所管理的註冊表中,該方法的name參數是URL格式,obj參數是遠程對象,未來客戶端的代理會經過name 找到遠程對象obj。