C# Thread應用

Java的Thread是利用繼承Thread或是實作Runable來實現的,而C#確是不一樣的, C#利用一個new System.Threading.Thread物件,建構時傳入想要在執行緒裡動作的事件,
啟動方法跟Java一樣,利用Start()來開始這個執行序,

System.Threading.Thread t = new System.Threading.Thread(要執行的Function名稱);

啟動方式

t.Start();

那如果有參數要傳入呢?

可以撰寫一個Class,先建構及設定好需要的參數,再把這個class實作的物件及方法傳入實作的System.Threading.Thread物件裡

Object x = new Object();

System.Threading.Thread t = new System.Threading.Thread(x.方法);

這裡有一個範例可以參考一下

先建立一個Class,名叫thread1

利用無窮迴圈讓內容一直跑,再利用Sleep(毫秒)來使其停一秒再執行。

Read More

[Java]Serializable序列化Socket傳送範例

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; 
  } 
}
Read More

[Java]Serializable序列化

Java的Serializable序列化是個很好用的東西,平常可能很少會遇到使用。

Serializable大概來說就是把Java Object變成序列,可以傳輸到其它Java的應用程式上,最好的例子就是ServerSocket應用,大部份的二個不同的Service要相互利用socket溝通。

最簡單的方式就是傳送文字指令、xml、編碼過的資訊,而在Java裡提供了一個很好用的機制,當二邊Socket Service均使用Java開發時,則可在二邊放置相同的class Object(含有相同的package路徑),再利用java.io.ObjectInputStreamjava.io.ObjectOutputStream來傳送及接到,可以設計一個Java Bean,在client接設定屬性後傳送給Server,在由Server接收後,直接取用Bean的值。

底下提供一個Java Bean implements Serializable的範列

Read More

Thread應用-Java SocketServer

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等待了。