親愛的老師您好 感謝您選用本書作為授課教材, 博碩文化準備本書精選簡報檔, 特別摘錄重點提供給您授課專用 說明 : 1 本教具為非賣品, 不得作為商業之用 2 本教具僅授權使用原著作為授課教材之教師作為教學或研究等學術用途 3 本教具未授權提供學生任何拷貝 影印 引用 翻印等行為 4 教師若需申請網站或內容授權, 可透過您的博碩業務協助處理, 謝謝 博碩文化 : 總公司 : 新北市汐止區新台五路一段 112 號 10 樓 A 棟電話 :(02) 2696-2869 分機 313 傳真 :(02) 2696-2867 網址 :www.drmaster.com.tw 客服信箱 :school@drmaster.com.tw 出書提案信箱 schoolbook@drmaster.com.tw 網路程式設計 請老師填入姓名主講 課本 : 網路程式設計初學指引 - 使用 Java 博碩文化出版發行 第一章網路程式設計導論 章節大綱 前言 1-4 UDP 協定應用 課前指引本章帶領讀者初步認識 Java 語言在網路程式上的應用, 並介紹常用的網路軟體應用如 FTP 網頁 遊戲等, 並以簡短的 Java 程式說明如何實作出 TCP 與 UDP 協定 讀者可以瀏覽章節內容與認識學習的方式, 瞭解網路程式的應用領域, 並認識實作國際標準通訊協定的知識 1-2 實作的方法 1-3 TCP 協定應用 1-5 IPv6 1-6 網際網路標準 1-7 圖形介面備註 : 可依進度點選小節
前言 Java 語言沒有指標 具有自動回收記憶體機制 原本是要應用在機上盒 原始設計即運行在類似網路環境上的程式語言 前言 Java 語言開發網路程式的限制 Java 不支援低階的網路協定如 ICMP ping 受到安全機制的限定 Java applet 必須被限定在瀏覽器的安全機制當中一般 Java application 或 servlet 這類獨立執行的程式則不在此限 5 6 透過通訊協定的製定, 才能在這個基礎下進行網路服務的設計 網頁服務 如 firefox IE 等檔案傳輸 如 FileZilla CuteFTP 等遠端登入 如 PCMan Putty telnet 等遊戲 facebook 遊戲 地圖 RPG 遊戲等 傳輸資料 網路應用程式最常用來讀取資料, 例如用 FTP 傳輸遠端主機上的檔案, 或利用瀏覽器觀看某個網頁, 股票看盤軟體從伺服器取得目前股價, 甚至某銀行與分行之間的資料傳送 FileZilla 檔案傳輸軟體 7 8
遊戲 線上遊戲是目前很熱門的一項娛樂, 從帳號登入 讀取記錄 地圖讀取到裝備替換的過程, 都使用到網路程式設計的方式, 將有關資料儲存或傳輸至伺服器, 或即時讀取伺服器中的資料至客戶端遊戲應用程式中, 經過解析後繪製在用戶端軟體上 Facebook 的遊戲 即時訊息 即時訊息是現代人溝通訊息的重要方式, 利用 MSN Messenger 或 Skype 溝通能得到即時的回應, 而 MSN 有其自定義的通訊協定, 目的是為了帳號登入與即時訊息的傳送與接收, 伺服器則負責記錄使用者的目前狀態, 如離線 線上等, 伺服器, 亦幫使用者儲存聯絡人清單與離線訊息 微型部落格亦是目前常用的訊息發表平台, 如 Plurk 與 Twitter 等, 而這些平台大都是使用網頁 Web 建置, 使用的是 HTTP 通訊協定 9 10 即時訊息 伺服器服務 (service) 是在背景執行的一支程式, 通常系統服務都會占住一個埠號 (port), 等待外部連線的要求 網頁伺服器傾聽 80 port 檔案伺服器傾聽 21port 電子郵件伺服器傾聽 25 port MSN 用戶端執行的情形, 提供了即時訊息溝通的圖型介面 11 12
1-2 實作的方法 開發服務軟體前, 需要一個溝通的規範, 這個為需求與服務而訂定的標準與規範就是通訊協定 通訊協定就像是日常生活中的 語言 實作方法使用現有的協定創造協定 1-2 實作的方法 使用現有的協定 網頁服務 : 使用 HTTP 通訊協定 13 14 1-2 實作的方法 使用現有的協定 檔案傳輸 : 使用 FTP 通訊協定 1-2 實作的方法 使用現有的協定 MSN 即時通訊 : 使用 MSNP 通訊協定, 基礎版本為 MSNP8, 目前版本為 MSNP15 15 16
1-2 實作的方法 創造協定 特別的用途需要自行定義一個新的通訊協定 例如一家國際金融公司需要與其海外分公司互相傳送資料遊戲前端軟體與後端的伺服器互相溝通 1-2 實作的方法創造協定公司私有資料傳輸遊戲自訂義協定 證券商與用戶資料傳輸協定 17 18 1-3 TCP 協定應用 特色是連線導向, 適合需要穩定連線且較可靠傳輸機制的用途使用能確保資料到達另一端時的順序例如 : 需要使用者登入的協定時, 應先傳送登入帳號的訊息 1-3 TCP 協定應用 Java 語言支援 TCP/IP 協定用戶端 (client)-socket 類別 Socket socket = new Socket("ptt.cc", 23); socket.connect(); 伺服器 -ServerSocket // 建立 ServerSocket 物件, 並指定傾聽埠為 23 ServerSocket server = new ServerSocket(23); // 開始等待客戶端連線至 23 埠 Socket socket = server.accept(); // 客戶端連線完成, 取得 socket 物件 // 進行通訊協定實作 19 20
1-4 UDP 協定應用兩方傳輸資料之前不需事先建立連線 UDP 省去了連線的建立時間不需要如 TCP 必須加載的封包表頭資料效能的提昇 1-4 UDP 協定應用 Java 的 UDP 應用不為其設計 Socket 物件, 而是採用 java.net.datagramsocket 類別 UDP 用戶端 ( 送出端 ) 產生一個 UDP 封包, 並指定將送達目的地主機資訊與埠號 String s = "ABC"; byte[] data = s.getbytes(); SocketAddress dest = new InetSocketAddress("192.168.1.10", 9996); DatagramPacket packet = new DatagramPacket(data, data.length, dest); DatagramSocket ds = new DatagramSocket(); ds.send(packet); 21 22 1-4 UDP 協定應用 UDP 伺服器 ( 接收端 ) 為將來到的 UDP 封包準備一個 DatagramPackage 物件後, 使用 DatagramSocket 傾聽特定埠號 byte[] buffer = new byte[10]; DatagramPacket pkt = new DatagramPacket(buffer, 10); DatagramSocket ds = new DatagramSocket(9950); ds.receive(pkt); 1-5 IPv6 IPv4 採用 32 位元的位址表示網路上的主機位址 IPV6 是 IPv4 的下一個版本, 採用 128 個位元長度 JDK1.4 以上 ( 含 ) 的版本支援 IPv4 與 IPv6 Java 語言將許多 IPv6 的轉換都早已實作在 JDK 中開發時使用了網域名稱 (domain name), 將更不用煩惱 IPv6 23 24
1-5 IPv6 Java 程式的執行過程中, 提供了系統變數 java.net.preferipv4stack, 預設值是 false, 代表同時支援 IPv4 與 IPv6, 若設為 true, 則代表只使用 IPv4 java.net.preferipv6addresses, 此系統值代表 偏好使用 IPv6, 預設值為 false System.setProperty("java.net.preferIPv6Addresses", "true"); 1-6 網際網路標準 本書將使用 HTTP FTP TELNET 這些國際標準的通訊協定, 並討論如何實作其規範與方法, 這些通訊協定是由許多國際組織所訂定的, 與網路程式設計最有關係的組織就屬 網際網路工程任務小組 IETF(Internet Engineering Task Force) 與 全球資訊網協會 W3C(World Wide Web Consortium) 這兩個具代表性的團隊 25 26 1-6 網際網路標準 網際網路工程任務小組 IETF(Internet Engineering Task Force) 負責研究與制定網際網路標準的任務組的集合 每個工作群組由委員會協助制定或研發新的標準 全球資訊網協會 W3C(World Wide Web Consortium) 為了解決不同平台在提供網頁服務技術時所衍生出不相容的問題是一個網頁服務標準的制定者制定了 HTML XML DOM 與 CSS 等 1-7 圖形介面 設計網路程式需要圖形介面嗎? 每個人都有不同的見解, 如果是學習階段, 在原本日漸複雜的程式碼中加入圖形介面設計, 很有可能會顧此失彼, 模糊了網路程式的重點是協定的使用與程式與主機之間的互動, 因此在初學階段, 應著重於網路相關類別的活用 本書第 16 章使用 Google 在收購 Instantiations 公司後所開放使用的熱門產品 WindowBuilder Pro, 可快速設計出圖形介面, 能夠在最短的時間為網路程式創造出適合的介面 27 28
本章結束 Q&A 討論時間 29