這個範例可以利用java.net.HttpURLconnection來摸擬瀏覽網頁
做form submit動作
public boolean doPost(String sURL,String data,String cookie,String referer,String charset)
post部份需要傳入
sURL:Action的url
data :要傳送的的資料也就是像id=123&test=456之類的
cookie:是否要傳送cookie資料,可為null,像 __utma=114386561.1334910113.1250671126.1251247266.1251279995.24;
referer:傳那裡來的,是一個網址,可為null
charset:傳送及取回的資料編碼為何
public boolean doGet(String sURL,String cookie,String referer,String charset)
跟post唯一不同的地方為
sURL:Action的url 再加上?data ,像http://www.aaa.com/123.jsp?id=123&test=456
詳細文章
java Socket傳送過程中,可利用ObjectInputStream及ObjectOutputStream傳接送物件當做資料,傳送後的資料可以直接取用,省去需要再讀取xml、文字、json等格式的麻煩。
要利用socket傳送首先需先定義一個Object,而Object必需implements java.io.Serializable介面才可以。Serializable可以參考Serializable序列化
package test;
public class DataTest implements java.io.Serializable {
private int x = 0 ;
public DataTest()
{
}
public void setP(int x)
{
this.x = x;
}
public int getP()
{
return x;
}
}
詳細文章
Java的Serializable序列化是個很好用的東西,平常可能很少會遇到使用。
Serializable大概來說就是把Java Object變成序列,可以傳輸到其它Java的應用程式上,最好的例子就是ServerSocket應用,大部份的二個不同的Service要相互利用socket溝通。
最簡單的方式就是傳送文字指令、xml、編碼過的資訊,而在Java裡提供了一個很好用的機制,當二邊Socket Service均使用Java開發時,則可在二邊放置相同的class Object(含有相同的package路徑),再利用java.io.ObjectInputStream及java.io.ObjectOutputStream來傳送及接到,可以設計一個Java Bean,在client接設定屬性後傳送給Server,在由Server接收後,直接取用Bean的值。
底下提供一個Java Bean implements Serializable的範列
詳細文章
Thread的應用,最好的例子就是SocketServer,
Thread簡介可以參考Java Thread簡介
Apache Tomcat用最簡單的方式看,它也是個SocketServer,服務http要求及回覆,
底下有一個簡單的例子,可以建立一個SocketServer,等待Connection的連入
概念是建立一個port Waiting,有人連入後,則再回到Waiting
順便說明implement java.lang.Runnable的用法
public class SocketServer implements java.lang.Runnable { private int port; private java.net.ServerSocket ss; public SocketServer(int port) throws java.io.IOException { this.port = port; // 建立一個ServerSocket this.ss = new java.net.ServerSocket(port); } public void run() { java.net.Socket sk = null; while (true)// 永遠執行 { // 等待連入 System.out.println("waiting..."); try { // 取得連線Socket sk = this.ss.accept(); // 取得Client連線Address System.out.println(sk.getLocalAddress()); sk.close(); } catch (java.io.IOException e) { e.printStackTrace(); } } } public static void main(String args[]) throws java.io.IOException { // runable要new一個Thread,再把runnable置入 java.lang.Thread thread = new java.lang.Thread(new SocketServer(81)); thread.start(); } } |
可利利用Browser來測試結果,
在網址列打入http://localhost:81 http://ServerIP:port
可以看到Server程式回應如下:
waiting...
0.0.0.0/0.0.0.0
waiting...
取得連線Socket後馬上又accept等待了。