• About Me
  • Java基礎教學
  • 部落格聯播

[Java]簡單的Socket Client Server

這是一個超簡單的Client Server範例,Server部份利用Thread來常駐執行,而Client利用Socket去連接指定的port,送出一個字元組給OutputStream,而Server接收到請求後,使用InputStream來取得資料。

這裡有篇介紹Socket Server的原理Thread應用-Java SocketServer,還有一篇傳送物件Serializable序列化Socket傳送範例,這篇算是比較進階。

程式碼包裝在jar裡,利用二個command視窗,一個執行Server一個執行Client,結果如下:

Java Socket Client Server

原始碼及jar下載:

詳細文章

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