280 likes | 414 Vues
網路程式設計 Network Programming Ch.1 網路程式設計導論. 陳冠中 國立高雄應用科技大學. 前言. Java 語言沒有指標 具有自動回收記憶體機制 原本是要應用在機上盒 原始設計即運行在類似網路環境上的程式語言. 前言. Java 語言開發網路程式的限制 Java 不支援低階的網路協定 如 ICMP 、 ping 受到安全機制的限定 Java applet 必須被限定在瀏覽器的安全機制當中 一般 Java application 或 servlet 這類獨立執行的程式則不在此限. 1-1 網路程式的應用.
E N D
網路程式設計Network ProgrammingCh.1 網路程式設計導論 陳冠中 國立高雄應用科技大學 2012 網路程式設計
前言 • Java語言沒有指標 • 具有自動回收記憶體機制 • 原本是要應用在機上盒 • 原始設計即運行在類似網路環境上的程式語言 2012 網路程式設計
前言 • Java語言開發網路程式的限制 • Java不支援低階的網路協定 • 如ICMP、ping • 受到安全機制的限定 • Java applet必須被限定在瀏覽器的安全機制當中 • 一般Java application或servlet這類獨立執行的程式則不在此限 2012 網路程式設計
1-1 網路程式的應用 • 特定需求所設計的網路服務都要靠Network Protocol,才能在這個基礎下進行網路服務的設計。 • 網頁服務 • 如firefox、IE等 • 檔案傳輸 • 如FileZilla、CuteFTP等 • 遠端登入 • 如PCMan、Putty、telnet等 • 遊戲 • facebook遊戲、地圖、RPG遊戲等 2012 網路程式設計
1-1 網路程式的應用 • TCP/IP網路協定Internet應用的基礎。 • IP協定提供每一台電腦在網路上的主機定址標準。 • 網路程式應用的範圍非常廣泛,這些網路應有許多都是用Java所設計的。 2012 網路程式設計
1-1 網路程式的應用 • 傳輸資料 • 網路應用程式最常用來讀取資料,例如用FTP傳輸遠端主機上的檔案,或利用瀏覽器觀看某個網頁,股票看盤軟體從伺服器取得目前股價,甚至某銀行與分行之間的資料傳送。 FileZilla檔案傳輸軟體 2012 網路程式設計
1-1 網路程式的應用 • 遊戲 • 線上遊戲從帳號登入、讀取記錄、地圖讀取到裝備替換的過程,都使用到網路程式設計的方式,將有關資料儲存或傳輸至伺服器,或即時讀取伺服器中的資料至客戶端遊戲應用程式中,經過解析後繪製在用戶端軟體上。 • 購買食材或配件時,皆需要使用網路程式將玩家所點擊的動作傳輸至Server,所賺的點數亦需要即時以程式傳送至Server驗證及確認。 Facebook的遊戲 2012 網路程式設計
1-1 網路程式的應用 • 即時訊息 • 即時訊息是現代人溝通訊息的重要方式,利用MSN Messenger或Skype溝通能得到即時的回應,而MSN有其自定義的通訊協定,目的是為了帳號登入與即時訊息的傳送與接收,伺服器則負責記錄使用者的目前狀態,如離線、線上等,伺服器,亦幫使用者儲存聯絡人清單與離線訊息。 • 微型部落格亦是目前常用的訊息發表平台,如Plurk與Twitter等,而這些平台大都是使用網頁Web建置,使用的是HTTP通訊協定。 2012 網路程式設計
1-1 網路程式的應用 • 即時訊息 MSN用戶端執行的情形,提供了即時訊息溝通的圖型介面 2012 網路程式設計
1-1 網路程式的應用 • 伺服器 • 服務(service)是在背景執行的一支程式,通常系統服務都會占住一個埠號(port),等待外部連線的要求。 • 網頁伺服器傾聽80 port • IIS, Apache • 檔案伺服器傾聽21 port • vsftpd (Linux) • telnet傾聽23 port • 電子郵件伺服器傾聽25 port • Exchange, sendmail 2012 網路程式設計
1-1 網路程式的應用 • 伺服器 • Server實作網路服務方式與Client端略有不同,它需要持續listen一個特定的port,等待Client軟體的連線,當連線建立後,仍需要為此連線過程提供資料的對應傳輸,並符合該Server所使用的通訊協定。 • 使用Browser開啟Apache伺服器的測試頁面: 2012 網路程式設計
1-2 實作的方法 • 開發服務軟體前,需要一個溝通的規範,這個為需求與服務而訂定的標準與規範就是通訊協定。 • 通訊協定就像是日常生活中的「語言」 • 實作方法 • 使用現有的協定 • 網路的應用已進行了數十年,網頁、檔案傳輸、聊天室等需求早已有完善的通訊協定,以避免使用不同協定的資源浪費,避免學習成本大於得到的效益。 • 這些常用協定是學習網路程式設計必要的基礎,也才能實作出常用的網路應用服務軟體。 2012 網路程式設計
1-2 實作的方法 • 使用現有的協定 • 網頁服務:使用HTTP通訊協定 • 使用現有的協定 • 檔案傳輸:使用FTP通訊協定 2012 網路程式設計
1-2 實作的方法 • 使用現有的協定 • MSN即時通訊:使用MSNP通訊協定,基礎版本為MSNP8,目前版本為MSNP18 • 創造協定 • 特別的用途需要自行定義一個新的通訊協定 • 例如一家國際金融公司需要與其海外分公司互相傳送資料 • 遊戲前端軟體與後端的伺服器互相溝通 2012 網路程式設計
1-2 實作的方法 • 設計協定時必須確認目標,只要兩方溝通的程式共同遵循此協定,並共同實作對話機制即可。 • 協定制定的初期通常要決定使用TCP、UDP或其它協定。 • 公司私有資料傳輸 • 遊戲自定義協定 • 證券商與用戶資料傳輸協定 2012 網路程式設計
1-3TCP協定應用 • 特色是連線導向,適合需要穩定連線且較可靠傳輸機制的用途使用。 • 能確保資料到達另一端時的順序。 • 例如:需要使用者登入的協定時,應先傳送登入帳號的訊息,等使用者輸入帳號後才傳送輸入密碼的訊息,而TCP協定可確保登入帳號會比輸入密碼的訊息先傳輸至遠端主機。 2012 網路程式設計
1-3TCP協定應用 • Java語言支援TCP/IP協定 • Socket類別 • Java語言提供了java.net.Socket類別,代表TCP協定中的連線通道,當user要連線到Server時,必須產生一個Socket物件,並呼叫Socket類別的connect方法以建立實際的連線。 • 而Server需建立ServerSocket類別,等到user實際連線再得到Socket物件。 • 用戶端(client)-Socket類別 • Socket socket = new Socket("ptt.cc", 23); • socket.connect(); 2012 網路程式設計
1-3TCP協定應用 • Socketsocket = new Socket("ptt.cc", 23); • socket.connect(); • Java語言支援TCP/IP協定 • 用戶端(client)-Socket類別 • 伺服器-ServerSocket Java語言以java.net.ServerSocket類別建立伺服器的傾聽通道,當連線建立後可由該類別到Socket物件,開發人員可利用Socket物件進行通訊協定的實際運作方法,完成一個Client端的服務階段。 • //建立ServerSocket物件,並指定傾聽埠為23 • ServerSocket server = new ServerSocket(23); • //開始等待客戶端連線至23埠 • Socket socket = server.accept(); • //客戶端連線完成, 取得socket物件 • //進行通訊協定實作 2012 網路程式設計
1-4UDP協定應用 • UDP的非連線性是與TCP最大的不同點,兩方傳輸資料之前不需事先建立連線,而是直接將目的地主機的位址與埠號指定完成後即送出資料封包。 • UDP省去了連線的建立時間,亦不需要如TCP必須加載的封包表頭資料,靠著犧牲連線可靠性以換取其效能的提昇。 2012 網路程式設計
1-4UDP協定應用 • Java語言也支援UDP封包的傳送與接收,由於UDP並不具備連線特性,因此Java語言也不為其設計Socket物件,而是採用java.net.DatagramSocket類別。 • DatagramSocket類別用途是傳送UDP封包,包含欲傳送的資料、資料的長度、接收端的主機名稱(或IP位址)及埠號。 • 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); 2012 網路程式設計
1-4UDP協定應用 • UDP伺服器(接收端) • 為將來到的UDP封包準備一個DatagramPackage物件後,使用DatagramSocket傾聽特定埠號 • byte[] buffer = newbyte[10]; • DatagramPacket pkt = new DatagramPacket(buffer, 10); • DatagramSocket ds = new DatagramSocket(9950); • ds.receive(pkt); 2012 網路程式設計
1-5IPv6 • IPv4採用32位元的位址表示網路上的主機位址 • IPV6是IPv4的下一個版本,採用128個位元長度 • JDK1.4以上(含)的版本支援IPv4與IPv6 • Java語言將許多IPv6的轉換都早已實作在JDK中 • 開發時使用了網域名稱(domain name),將更不用煩惱IPv6 2012 網路程式設計
1-5IPv6 • Java程式的執行過程中,提供了系統變數 • java.net.preferIPv4Stack,預設值是false,代表同時支援IPv4與IPv6,若設為true,則代表只使用IPv4。 • java.net.preferIPv6Addresses,此系統值代表「偏好使用IPv6」,預設值為false 。 • 如果所要連接的主機只支援IPv6,只需要在連線伺服器的程式碼之前,先啟用Java的IPv6: • System.setProperty("java.net.preferIPv6Addresses", "true"); 2012 網路程式設計
1-6 網際網路標準 • 本書將使用HTTP、FTP、TELNET這些國際標準的通訊協定,並討論如何實作其規範與方法,這些通訊協定是由許多國際組織所訂定的,與網路程式設計最有關係的組織就屬「網際網路工程任務小組IETF(Internet Engineering Task Force)」與「全球資訊網協會W3C(World Wide Web Consortium)」這兩個具代表性的團隊。 2012 網路程式設計
1-6 網際網路標準 • 「網際網路工程任務小組IETF(Internet Engineering Task Force)」 • 負責研究與制定網際網路標準的任務組的集合 • 每個工作群組由委員會協助制定或研發新的標準 • 「全球資訊網協會W3C(World Wide Web Consortium)」 • 為了解決不同平台在提供網頁服務技術時所衍生出不相容的問題 • 是一個網頁服務標準的制定者 • 制定了HTML、XML、DOM與CSS等 2012 網路程式設計
1-7 圖形介面 • 設計網路程式需要圖形介面嗎?每個人都有不同的見解,如果是學習階段,在原本日漸複雜的程式碼中加入圖形介面設計,很有可能會顧此失彼,模糊了網路程式的重點是協定的使用與程式與主機之間的互動,因此在初學階段,應著重於網路相關類別的活用。 • 本書第16章使用Google在收購Instantiations公司後所開放使用的熱門產品WindowBuilder Pro,可快速設計出圖形介面,能夠在最短的時間為網路程式創造出適合的介面。 2012 網路程式設計
說明: 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 2012 網路程式設計
Any Question? 2012 網路程式設計