常聽到的「主從(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實現 。
沒有留言:
張貼留言