常聽到的「主從(C/S)模式」基本架構包含:
Client: 通常僅具備使用者介面,大部份的服務都是由Server提供。
Server: 不一定具備使用者介面,但一定要持續等待客戶端連線並提供服務。
建立新專案
請在Package Explorer中右鍵建立新專案,此過程如有問題可以參考 這裡。建立專案的主要目的是要將相同章節的程式放在同一個資料夾
以免和其它專案的程式混淆,在編譯或執行中發生問題。
建立簡易接收程式(Server)
請在專案中的 src目錄中建立新類別名為 Socket01請在 Socket01 建立以下內容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | 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需要指定並開放連接埠準備接收
12ServerSocket SS =
new
ServerSocket(
8081
);
// 以port產生一個伺服器
Socket socket = SS.accept();
// 設定網路平台可以開始接收
建立簡易發送程式(Clinet)
請在專案中的 src目錄中建立新類別名為 Socket02 並在 Socket01 建立以下內容1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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類別
1SSocket 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實現 。
沒有留言:
張貼留言