在JAVA中,Java.net包里面的類是進行網絡編程的,其中java.net.URL類和java.net.URLConection類使編程者方便地利用URL在Internet上進行網絡通信。
1、創建URL對象
URL類有多種形式的構造函數:
(1) URL ( String url)
url代表一個絕對地址,URL對象直接指向這個資源,如:
URL urll=new URL(http://www.cqwu.edu.cn);
(2) URL ( URL baseURL , String relativeURL)
其中,baseURL代表絕對地址,relativeURL代表相對地址。如:
URL urll=new URL(http://www.cqwu.edu.cn);
URL lib=new URL(urll , "library / library.asp");
(3) URL ( String protocol , String host , String file)
其中,protocol代表通信協議,host代表主機名,file代表文件名。如:
new URL ("http" , www.cqwu.edu.cn, "/ test / test.asp");
(4) URL ( String protocol , String host , int port , String file)
URL lib = new URL ("http" , www.cqwu.edu.cn, 80 , "/ test / test.asp");
2、獲取URL對象的屬性
getDefaultPort(): 返回默認的端口號。
getFile(): 獲得URL指定資源的完整文件名。
getHost(): 返回主機名。
getPath(): 返回指定資源的文件目錄和文件名。
getPort(): 返回端口號,默認為-1。
getProtocol(): 返回表示URL中協議的字符串對象。
getRef(): 返回URL中的HTML文檔標記,即#號標記。
getUserInfo: 返回用戶信息。
toString: 返回完整的URL字符串。
二、Internet尋址
java.net包可以用32位int形式來操作32位的IP地址(即Internet主機地址)。類InetAddress實際上是可以把Internet地址換算成代表該地址的對象。Java就是靠這個類來顯示Internet地址已經相關信息的。
InetAddress有以下常用方法:
getAddress(): 返回IP地址的字節形式。
getAllByName(): 返回指定主機名的IP地址。
getbyAddress(): 返回指定字節數組的IP地址形式。
getByName(): 返回指定主機名的IP地址對象。
getHostAddress(): 返回主機地址的字符串形式。
getLocalHost(): 返回當前主機名。
hastCode(): 返回InetAddress對象的哈希碼。
toString: 返回地址轉換成的字符串。
InetAddress類沒有提供返回構造函數,所以不能用new()方法來創建它的對象,而只可以調用靜態方法getLocalHost()、getByName()、getByAddress()等來生成InetAddress類的實質。

import java.net.*;
import java.io.*;
public class InetAddDemo //extends Applet
{
?public void testOperate()
?{
??try
??{
???InetAddress address=InetAddress.getLocalHost();
???log("本機地址字符串:"+address.getHostAddress());
???log("本機主機名:"+address.getHostName());
???log("本機主機名:"+address.getLocalHost());
???log("哈希碼:"+address.hashCode());
???byte b[]=address.getAddress();
???System.out.println("字符形式:"+b);
???log("地址字符串:"+address.toString());
??}
??catch(Exception e)
??{
???//e.printStackTrace("不能打開這個URL");
??}
?}
?
?public void log(String strInfo)
?{
??System.out.println(strInfo);
?}
?
?public static void main(String args[])
?{
??InetAddDemo IAdd=new InetAddDemo();
??IAdd.testOperate();
?}
}
import java.io.*;
public class InetAddDemo //extends Applet
{
?public void testOperate()
?{
??try
??{
???InetAddress address=InetAddress.getLocalHost();
???log("本機地址字符串:"+address.getHostAddress());
???log("本機主機名:"+address.getHostName());
???log("本機主機名:"+address.getLocalHost());
???log("哈希碼:"+address.hashCode());
???byte b[]=address.getAddress();
???System.out.println("字符形式:"+b);
???log("地址字符串:"+address.toString());
??}
??catch(Exception e)
??{
???//e.printStackTrace("不能打開這個URL");
??}
?}
?
?public void log(String strInfo)
?{
??System.out.println(strInfo);
?}
?
?public static void main(String args[])
?{
??InetAddDemo IAdd=new InetAddDemo();
??IAdd.testOperate();
?}
}
有兩種方法可以用來訪問Internet。一是利用URL類的openStream()方法;二是使用openConnection()方法創建一個URLConnection類的對象。
其中,方法openStream()與指定的URL建立連接并返回InputStream類的對象,以從這一連接中讀取數據。

import java.net.*;
import java.io.*;
public class ReadURL
{
?public static void main(String args[]) throws Exception
?{
??try
??{
???URL url=new URL("http://www.baidu.com");
?? InputStreamReader isr=new InputStreamReader(url.openStream());
?? BufferedReader br=new BufferedReader(isr);
??
?? String str;
?? while((str=br.readLine())!=null)
?? {
??? System.out.println(str);
?? }
??
?? br.close();
?? isr.close();
?? }
?? catch(Exception e)
?? {
?? ?System.out.println(e);
?? }
?}
}
import java.io.*;
public class ReadURL
{
?public static void main(String args[]) throws Exception
?{
??try
??{
???URL url=new URL("http://www.baidu.com");
?? InputStreamReader isr=new InputStreamReader(url.openStream());
?? BufferedReader br=new BufferedReader(isr);
??
?? String str;
?? while((str=br.readLine())!=null)
?? {
??? System.out.println(str);
?? }
??
?? br.close();
?? isr.close();
?? }
?? catch(Exception e)
?? {
?? ?System.out.println(e);
?? }
?}
}
上例首先創建URL對象url,并在其基礎上打開輸入流獲取InputStreamReader對象,再由此對象創建BufferedReader對象br,從br中讀取數據即可得到url所指定的資源文件。
上面的openStream()方法只能讀取網絡資源,若要既能讀取又能發送數據,則要用到URL類的openConnection()方法來創建一個 URLConnection類的對象,此對象在本地機和URL指定的遠程節點建立一條HTTP協議的數據通道,可進行雙向數據傳輸。
類URLConnection提供了很多設置和獲取連接參數的方法,最常用到的是getInputStream()和getOutputStream()方法,如:
URL sum=new URL("http://java.sum.com/cgi-bin/backwards");
URLConnection suncon=buaa.openConnection();
sumcon.setDoOutput(true);
DataInputStream dis=new DataInputStream(suncon.getInputStream());
PrintStream ps=new PrintStream(suncon.getOutputStream());
String str=dis.readLine();
ps.println("來自客戶機的信息:.......");