顯示具有 網路 標籤的文章。 顯示所有文章
顯示具有 網路 標籤的文章。 顯示所有文章

2011年8月8日 星期一

Java 網路程式 - HttpClient 實現 Get 請求

以下透過 org.apache.commons.httpclient 來模擬一個 GET 請求


httpclient 提供了一些簡單的 API 讓程式設計師可以使用一些簡單的HTTP溝通


底下透過一個範例來介紹 Get 請求的作法

//.....
String targetUrl = "http://localhost:8080/test/LoginAction.do"  //請求路徑
HttpClient client = new HttpClient();  //建立一個 HttpClient 物件
HttpMethod method = new GetMethod(targetUrl );  //建立一個 Get Http method

NameValuePair param1 = new NameValuePair("account","tester1");  //加入請求參數
NameValuePair param2 = new NameValuePair("password","123456")   //加入請求參數

method.setQueryString(new NameValuePair[]{param1 ,param2});  //設定所有請求參數

int statusCode = client.executeMethod(method);  //發出 Request,並返回 Http 狀態碼

System.out.println("Http status : " + HttpStatus.getStatusText(statusCode));
method.getResponseBodyAsString();  //取得回應內容 為String
// or
method,getResponseBodyAsStream();   // 取得回應的輸入串流
method.releaseConnection();



2011年8月7日 星期日

Java 網路程式 - org.apache.commons.httpclient 傳送檔案給 Servlet

本篇介紹運用 apache commons 中的 httpClient 模擬一個 Http Post 的方法

關於 詳情可以看 RFC1867:

他同樣是運用 Form-based File Upload in HTML

將檔案送到一個 Servlet,在 Servlet 中運用 apache commons 的 fileUpload 執行存檔動作

以下為簡圖說明之











在 Client 端部分不限於 Servlet 裡,已下看看Client程式的sample

2011年3月15日 星期二

Java 網路程式 - 網路對播

透過 Java Socket 的 Client/Server 的實作來達成 雙方間一對一的通訊

但是同一時間只能有一方傳送資料,且 Server 端只能同時服務一個 Client

這樣的對播較容易實作,如需服務多個 Client 實則需透過執行緒去處理

這個之後我在發文吧,先來看看以下簡易的網路對播程式 在 Server/Client 的作法都類似

透過 flag 變數去控制目前是該等待接收資料 還是 輸入傳送資料

end 變數則是控制目前對話的狀態,true 為中止。以下片斷程式以 Client 為例

while(!end)
{
          while(flag == 0){       //傳送
                  //.....
                  if(message.equals("@"))    //遇到 @ 時,轉換 flag
           }
           while(flag ==1){     //接收
                 //.....
                 if(message.equals("@"))    //遇到 @ 時,轉換 flag
           }
}

2011年3月4日 星期五

Java 網路程式 - Client/Server 通訊實作

本篇介紹以 Java Socket 實做 Client/Server 的簡單通訊實做

主要以 Socket 實現一個Server 端來接收 Client 的連線  往後在介紹更多的 Client/Server 的通訊方法

首先先說明常用於網路串流的 DataInputStream 和 DataOutputStream

不過你也是可以利用其他的串流類別,如: PrintWriter

通常再某一端(Client) 如要讀取Server的資料或是傳送資料給Server 時

都需要取得串流在能夠讀取或是寫入,而都是以

java.net.SocketgetInputStream()getOutputStream() 這兩個方法來取得串流

並加載於 DataInputStream 或是 DataOutputStream 上,例如以下所示

DataInputStream datain = new DataInputStream(socket.getInputStream());

2010年9月11日 星期六

Java 網路程式 - Socket

java.net.Socket 類別是 Java 拿來進行用戶端 TCP 操作的一個基礎類別

首先來看看兩個比較常見的 Socket 建構式

1. public Socket(String host, int port)
       throws UnknownHostException, IOException
    參數 host 代表一個主機的名稱,而參數 int 是代表遠端連線的通訊埠
    例如:Socket socket = new Socket("tw.yahoo.com", 80);
    以上會建立一個TCP socket 並連接到所指定的遠端主機及通訊埠


2.public Socket(InetAddress host, int port)
       throws IOException
   這邊比較不同的是 host 是一個 InetAddress 物件
   例如:
   InetAddress host = InetAddress.getByName("tw.yahoo.com");
 Socket socket = new Socket(host, 80);

2010年9月6日 星期一

Java 網路程式 - 利用 URLConnection 模擬 HTTP request

以下我是利用 JSP 先撰寫一個請求表單(form),再利用 Java 的 java.net.URLConnection

模擬 form 送出的 HTTP 請求和所代之參數,最後在取得回傳網頁的內容。

先來介紹一下 URLConnection 這個抽象類別,首先

它針對了與伺服器(HTTP伺服器)的互動提供了更多的方法和一些控制

通常都是透過 URL 的 openConnection() 取得 URLConnection,例如以下:
try{
     URL url = new URL("http://tw.yahoo.com");
     URLConnection conn = url.openConnection();
}
catch(MalformedURLException e){...}
catch(IOException e){...}

2010年9月4日 星期六

Java 網路程式 - InetAddress

Java 對於主機的 IP 定址以及主機名稱的相關訊息主要就是透過  java.net.InetAddress 


特別的是  InetAddress 沒有建構子

但是可以透過以下三個類別方法來取得 InetAddress 的實例

1. getLocalHost()   他會回傳目前本地端主機的 InetAddress 實例


    範例:InetAddress myHost = InetAddress.getLocalHost();


2. getByName(String)  會回傳指向傳入參數的主機之 InetAddress 實例   


    範例:InetAddress addr = InetAddress.getByName("192.168.x.yy");

2010年8月28日 星期六

Java 網路程式 - URL

在 Java 程式裡一切有關網路方面的類別都包含在 java.net 裡面
對於一般我們看到的網址即是 URL,對於 Java 來說可以透過 URL 類別將網址以字串來建立一個物件。

URL sun = new URL("http://java.sun.com");

以上的 http://java.sun.com 我們可以稱之為 "絕對URL",如果要建立"相對URL",說明如下:

譬如今天你寫了一張網頁 MyPage.html,如果在這網頁裡有一些連結可以前往其他頁面
這些頁面都是和 MyPage.html 在相同的主機以及相同的目錄之下
如:MyAlbum.html 和 MyHomework.html(如下)