1. 程式人生 > >Java常見網絡操作(URL類,InetAddress類,URLConnection類)

Java常見網絡操作(URL類,InetAddress類,URLConnection類)

雙向 部分 返回對象 至少 常用方法 連接 函數 ast 文件

*****************InetAddress**********************
對於InetAddress,三個方法:getLocalHost()、getByName()以及getAllByName()可以用來創建InetAddress的實例。
 InetAddress類沒有提供返回構造函數,所以不能用new()方法來創建它的對象,而只可以調用靜態方法getLocalHost()、getByName()、getByAddress()等來生成InetAddress類的實質。


1、InetAddress常用方法:
1.InetAddress.getLocalHost()僅返回象征本地主機的InetAddress對象。(返回的是本地地址)
本機地址還為localhost,127.0.0.1,這三個地址都是一回事。
例,InetAddress.getLocalHost();//Lenovo-PC/169.254.193.131

2.getByName()方法返回一個傳給它的主機名的InetAddress。
  如果這些方法不能解析主機名,它們引發一個UnknownHostException異常。
  在Internet上,用一個名稱來代表多個機器是常有的事。
例,InetAddress.getByName("www.baidu.com");//www.baidu.com/61.135.169.121

3.getAllByName()工廠方法返回代表由一個特殊名稱分解的所有地址的InetAddresses類數組。
getAllByName()方法是根據主機名返回其可能的所有InetAddress對象,保存在一個數組中


  在不能把名稱分解成至少一個地址時,它將引發一個UnknownHostException異常。

4.getLoopbackAddress()方法返回本地回環地址
例,InetAddress.getLoopbackAddress();//localhost/127.0.0.1

5.查看端口是否已使用
Socket socket = new Socket(Address,port);#address代表主機的IP地址,port代表端口號.
如果對該主機的特定端口號能建立一個socket,則說明該主機的該端口在使用。
例,import java.net.*;

for (int i = 500; i < 1024; i++) {
try {
System.out.println("查看 端口"+ i);
Socket skt = new Socket("localhost", i);

System.out.println("端口 " + i + " 已被使用");
}
catch (UnknownHostException e) {
System.out.println("Exception occured"+ e);
break;
}
catch (IOException e) {
}
}

補充:網絡上的兩個程序通過一個雙向的通信連接實現數據的交換,這個連接的一端稱為一個socket。
建立網絡通信連接至少要一對端口號(socket)。socket本質是編程接口(API),對TCP/IP的封裝,TCP/IP也要提供可供程序員做網絡開發所用的接口,這就是Socket編程接口;HTTP是轎車,提供了封裝或者顯示數據的具體形式;Socket是發動機,提供了網絡通信的能力。


在JAVA中,Java.net包裏面的類是進行網絡編程的,其中java.net.URL類和java.net.URLConection類使編程者方便地利用URL在Internet上進行網絡通信。




********************URL類******************************

1.URL可以分為如下幾個部分:
protocol://host:port/path?query#fragment

例,http://www.runoob.com/index.html?language=cn#j2se
URL 解析:
協議為(protocol):http
主機為(host:port):www.runoob.com
端口號為(port): 80 ,以上URL實例並未指定端口,因為 HTTP 協議默認的端口號為 80。
文件路徑為(path):/index.html
請求參數(query):language=cn
定位位置(fragment):j2se,定位到網頁中 id 屬性為 j2se 的 HTML 元素位置 。


2.URL類的使用:
例,
URL url=new URL("http://www.runoob.com/wp-content/themes/runoob/assets/img/newlogo.png");

2.1獲取URL對象的屬性
  getDefaultPort(): 返回默認的端口號。
  getFile(): 獲得URL指定資源的完整文件名。
  getHost(): 返回主機名。
  getPath(): 返回指定資源的文件目錄和文件名。
  getPort(): 返回端口號,默認為-1。
  getProtocol(): 返回表示URL中協議的字符串對象。
  getRef(): 返回URL中的HTML文檔標記,即#號標記。
  getUserInfo: 返回用戶信息。
  toString: 返回完整的URL字符串。
例,
URL url=new URL("http://www.runoob.com/wp-content/themes/runoob/assets/img/newlogo.png");
System.out.println(url.getDefaultPort());//80
System.out.println(url.getFile());//wp-content/themes/runoob/assets/img/newlogo.png
System.out.println(url.getHost());//www.runoob.com
System.out.println(url.getPath());///wp-content/themes/runoob/assets/img/newlogo.png
System.out.println(url.getPort());//-1
System.out.println(url.getProtocol());//http
System.out.println(url.getRef());//null
System.out.println(url.getUserInfo());//null
System.out.println(url.toString());//http://www.runoob.com/wp-content/themes/runoob/assets/img/newlogo.png



****************URLConnection類**********************

URLConnection 類是一個抽象類,代表應用程序和URL之間的通信連接,此類的實例可用於讀取和寫入此URL引用的資源。

URLConnection 允許使用GET,POST或者其他HTTP方法請求方式將請求數據發送到服務器。

有兩種方法可以用來訪問Internet。一是利用URL類的openStream()方法;二是使用openConnection()方法創建一個URLConnection類的對象。
  其中,方法openStream()與指定的URL建立連接並返回InputStream類的對象,以從這一連接中讀取數據。

例,(簡單的網頁爬取)方法一:openStream()
URL url=new URL("http://www.cnblogs.com/Downtime/p/7822379.html");
InputStream conn=url.openStream();
InputStreamReader read=new InputStreamReader(conn,"utf-8");
BufferedReader bread=new BufferedReader(read);
while(bread.readLine() != null){
System.out.println(bread.readLine());
}
conn.close();

方法二:URLConnection
URL url=new URL("http://www.cnblogs.com/Downtime/p/7822379.html");
URLConnection conn=url.openConnection();
InputStream in=conn.getInputStream();
InputStreamReader read=new InputStreamReader(in,"utf-8");
BufferedReader reader=new BufferedReader(read);
while(reader.readLine() != null ){
System.out.println(reader.readLine());
}
conn.getInputStream().close();

2.常用方法:
URLConnection 方法列表如下:
1、 Object getContent()
檢索URL鏈接內容
2、 Object getContent(Class[] classes)
檢索URL鏈接內容
3、 String getContentEncoding()
返回頭部 content-encoding 字段值。
4、 int getContentLength()
返回頭部 content-length字段值
5、 String getContentType()
返回頭部 content-type 字段值
6、 int getLastModified()
返回頭部 last-modified 字段值。
7、 long getExpiration()
返回頭部 expires 字段值。
8、 long getIfModifiedSince()
返回對象的 ifModifiedSince 字段值。
9、 public void setDoInput(boolean input)
URL 連接可用於輸入和/或輸出。如果打算使用 URL 連接進行輸入,則將 DoInput 標誌設置為 true;如果不打算使用,則設置為 false。默認值為 true。
10、 public void setDoOutput(boolean output)
URL 連接可用於輸入和/或輸出。如果打算使用 URL 連接進行輸出,則將 DoOutput 標誌設置為 true;如果不打算使用,則設置為 false。默認值為 false。
11、 public InputStream getInputStream() throws IOException
返回URL的輸入流,用於讀取資源
12、 public OutputStream getOutputStream() throws IOException
返回URL的輸出流, 用於寫入資源。
13、 public URL getURL()
返回 URLConnection 對象連接的URL

Java常見網絡操作(URL類,InetAddress類,URLConnection類)