網路應用程式的基礎

在網路時空裡,網路應用程式會使用獨立的埠號執行。當Client端發出請求後,Server端的程式會建立一個Socket物件,並透過這個物件與Client端連線,以便進行資料的傳遞,Socket可以說是程式與網路之間的一種介面,要把資訊傳送到網路,就必須透過Socket的服務。Java裡提供了ServerSocket與Socket類別,可將Client端的電腦連上伺服器,並可從伺服器傳遞資料給Client端。

常聽到的「主從(C/S)模式」基本架構包含:
Client: 通常僅具備使用者介面,大部份的服務都是由Server提供。
Server: 不一定具備使用者介面,但一定要持續等待客戶端連線並提供服務。

建立新專案

請在Package Explorer中右鍵建立新專案,此過程如有問題可以參考 這裡



建立專案的主要目的是要將相同章節的程式放在同一個資料夾
以免和其它專案的程式混淆,在編譯或執行中發生問題。

建立簡易接收程式(Server)

請在專案中的 src目錄中建立新類別名為 Socket01




請在 Socket01 建立以下內容
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

public class Socket01 {

 public static void main(String[] args) throws IOException {

  BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
  System.out.print("請輸入連接埠號: ");
  int port = Integer.parseInt(buf.readLine()); // 讀取指令參數的值當成port

  ServerSocket SS = new ServerSocket(port); // 以port產生一個伺服器

  System.out.print("本機位址: " + InetAddress.getLocalHost().getHostAddress());
  System.out.println(" 開放連接埠: " + port);
  System.out.println("伺服器已建立, 等待連接...");

  Socket socket = SS.accept(); // 設定網路平台可以開始接收
  System.out.println("已經和 " + socket.getInetAddress().getHostAddress() + "連接");
  socket.close(); // 結束連線

 }

}

建立Socket時,主機端Server需要指定並開放連接埠準備接收
ServerSocket SS = new ServerSocket(8081); // 以port產生一個伺服器
Socket socket = SS.accept(); // 設定網路平台可以開始接收

建立簡易發送程式(Clinet)

請在專案中的 src目錄中建立新類別名為 Socket02 並在 Socket01 建立以下內容
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.Socket;

public class Socket02 {

 public static void main(String args[]) throws IOException {

  BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
  System.out.print("請輸入IP: ");
  String ip = buf.readLine();// 讀取輸入值為IP

  System.out.print("請輸入連接埠: ");
  int port = Integer.parseInt(buf.readLine()); // 讀取輸入值為port

  Socket socket = new Socket(InetAddress.getByName(ip), port);// 建立Socket連線
  socket.close();// 結束連線

 }

}

建立客戶端Client需要指定想要連線的IP位址和連接埠,其中需要InetAddress類別
SSocket socket = new Socket(InetAddress.getByName("127.0.0.1"), 8081);



傳輸控制協定(Transmission Control Protocol, TCP)是以位元組流的傳輸層通信協定,由國際組織定義。在簡化的電腦網路OSI模型中,它完成第四層傳輸層所指定的功能。而用戶資料報協定(User Datagram Protocol, UDP)也是個重要的傳輸協定,但是在普通場合應用的機會較少。Socket則是在這些協定中溝通的基本方式,比如說瀏覽器與網頁伺服器(WebServer)GET/POST資料、訊息(SMPP)收發、檔案伺服器(FTP)的上傳與下載等...在網路環境中無所不在。Socket 也應不同的需求或作業系統衍生出很多版本,這個系列的例子主要是討論 Linux/Windows 環境下的 socket ,並專注在TCP實現 。

沒有留言:

張貼留言