Microsoft Word - 投影片ch22

Similar documents
Microsoft PowerPoint - CH05.ppt [相容模式]

Microsoft Word - 投影片ch14

Microsoft Word - 投影片ch13

内 容 简 介 本 书 是 一 本 关 于 语 言 程 序 设 计 的 教 材, 涵 盖 了 语 言 的 基 本 语 法 和 编 程 技 术, 其 中 包 含 了 作 者 对 语 言 多 年 开 发 经 验 的 总 结, 目 的 是 让 初 学 的 读 者 感 受 到 语 言 的 魅 力, 并 掌

JavaIO.PDF

Microsoft Word - 投影片ch11

Microsoft Word - 投影片ch15

投影片 1

Socket Socket TcpClient Socket.Connect TcpClient.Connect Socket.Send / Receive NetworkStream 6-5


CHAPTER VC#

1: public class MyOutputStream implements AutoCloseable { 3: public void close() throws IOException { 4: throw new IOException(); 5: } 6:

1.JasperReport ireport JasperReport ireport JDK JDK JDK JDK ant ant...6

Microsoft PowerPoint - CH06.ppt [相容模式]

Microsoft Word - Java Socket 連線的建立課程_柯志亨老師_電子書.doc

新・解きながら学ぶJava

chp6.ppt

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit

Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0,

用手機直接傳值不透過網頁連接, 來當作搖控器控制家電 ( 電視遙控器 ) 按下按鍵發送同時會回傳值來確定是否有送出 問題 :1. 應該是使用了太多 thread 導致在傳值上有問題 2. 一次按很多次按鈕沒辦法即時反應

ASP.NET MVC Visual Studio MVC MVC 範例 1-1 建立第一個 MVC 專案 Visual Studio MVC step 01 Visual Studio Web ASP.NET Web (.NET Framework) step 02 C:\M

EJB-Programming-4-cn.doc

雲端 Cloud Computing 技術指南 運算 應用 平台與架構 10/04/15 11:55:46 INFO 10/04/15 11:55:53 INFO 10/04/15 11:55:56 INFO 10/04/15 11:56:05 INFO 10/04/15 11:56:07 INFO

Chapter 9: Objects and Classes

ebook

Java 1 Java String Date


内 容 提 要 将 JAVA 开 发 环 境 迁 移 到 Linux 系 统 上 是 现 在 很 多 公 司 的 现 实 想 法, 而 在 Linux 上 配 置 JAVA 开 发 环 境 是 步 入 Linux 下 JAVA 程 序 开 发 的 第 一 步, 本 文 图 文 并 茂 地 全 程 指

The Embedded computing platform

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP: ******************* * 关于 Java 测试试题 ******

第 11 章 互聯網技術 11.1 互聯 網 和 萬 維 網 的 發 展 歷 史 A. 互聯網的發展 互聯網是由 ARPANET 開 始發展的 1969 年 美國國防部高級研究計劃署 (ARPA) 把部分軍事研究所和大 的電腦連接起來 建造了㆒個實驗性的電腦網絡 稱為 ARPANET 並 列 的功能

BPS6.0 Web服务集成和短流程功能使用手册

<4D F736F F F696E74202D20A1B6CFEEC4BFD2BB20B3F5CAB6BCC6CBE3BBFACDF8C2E7A1B7C8CECEF1C8FD20CAECCFA A1A24950D0ADD2E9BACD4950B5D8D6B72E707074>

Microsoft Word - 第3章.doc

FileMaker 15 ODBC 和 JDBC 指南

Microsoft Word - 投影片ch03

TCP/IP TCP/IP OSI IP TCP IP IP TCP/IP TCP/IP

FileMaker 16 ODBC 和 JDBC 指南


SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基

Microsoft PowerPoint - C_Structure.ppt

WebSphere Studio Application Developer IBM Portal Toolkit... 2/21 1. WebSphere Portal Portal WebSphere Application Server stopserver.bat -configfile..

untitled

untitled

天津天狮学院关于修订2014级本科培养方案的指导意见

The golden pins of the PCI card can be oxidized after months or years

untitled

Learning Java

臺北市私立文德女中99學年度第1學期ㄧ年級 科教學計畫

Spyder Anaconda Spyder Python Spyder Python Spyder Spyder Spyder 開始 \ 所有程式 \ Anaconda3 (64-bit) \ Spyder Spyder IPython Python IPython Sp

untitled

關於本書 Part 3 CSS XHTML Ajax Part 4 HTML 5 API JavaScript HTML 5 API Canvas API ( ) Video/Audio API ( ) Drag and Drop API ( ) Geolocation API ( ) Part 5

Python a p p l e b e a r c Fruit Animal a p p l e b e a r c 2-2

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

TopTest_Adminstrator.doc

電機工程系認可證照清單 /7/1

Microsoft PowerPoint - 17_JavaSocketProgramming.ppt

untitled

2009年9月全国计算机等级考试二级Java真题及答案

epub 61-2

穨CAS1042中文手冊.doc

项目采购需求编写模板

chapter 2 HTML5 目錄iii HTML HTML HTML HTML HTML canvas


超連結 03 URI (Universal Resource Identifier) URI Web URL (Universal Resource Locator) URI URI :// [: ]/ [/ 2...]/

Microsoft Word - DIR-615_B2_Manual_1.00_T_.doc

0 0 = 1 0 = 0 1 = = 1 1 = 0 0 = 1

穨CAS1042快速安速說明.doc

Transcription:

Java2 JDK5.0 教學手冊第三版洪維恩編著博碩文化出版書號 pg20210 第二十二章網路程式設計 本章學習目標認識網路學習如何取得文件的內容資訊學習如何建立 socket 連線學習如何建立 TCP 伺服程式與客戶程式

網路程式設計 22-2 22.1 網址與 InetAddress 類別的使用 IP 位址是以 4 個 8 bits 的數值, 以 10 進位來表示, 用來區分網路上的每一台電腦 例如, 銘傳大學放置 Web 主機的 IP 位址為 140.131.73.20 只要在瀏覽器內建入 http://140.131.73.20 即可進到銘傳大學的首頁

網路程式設計 22-3 習慣上會把電腦取一個簡單易記, 且能代表此一電腦的名稱, 這個名稱稱為 host name( 主機名稱 ) Host name 雖然好記, 但電腦只認得 IP 位址, 於是有 DNS(Domain name service) 伺服器的產生 DNS 伺服器可以將 host name 轉成相對應的 IP 位址

網路程式設計 22-4 InetAddress 類別 Java 以 InetAddress 類別來處理有關 host name 與 IP 位址的取得 下表列出了 InetAddress 類別常用的 method: 表 22.1.1 java.net.inetaddress 常用的 method method static InetAddress[] getallbyname(string host) static InetAddress getbyname(string host) String gethostaddress() String gethostname() static InetAddress getlocalhost() 主要功能 給予電腦的 host name, 取得該主機下所有提供服務的 IP 位址 給予電腦的 host name, 取得該主機的 IP 位址 取得電腦的 IP 位址 取得電腦的 host name 取得本地端電腦的 host name 與 IP 位址

網路程式設計 22-5 下面的程式碼是取得本機的名稱與 IP 位址之範例 : /* app22_1 OUTPUT----- 01 // app22_1, 取得本機的名稱與 IP 位址 169.254.180.217 02 import java.net.*; buffalo 03 buffalo/169.254.180.217 04 public class app22_1 ----------------------*/ 05 { 06 public static void main(string args[]) 07 { 08 try 09 { 10 InetAddress adr=inetaddress.getlocalhost(); 11 System.out.println(adr.getHostAddress()); 12 System.out.println(adr.getHostName()); 13 System.out.println(adr); 14 } 15 catch(unknownhostexception e) // 捕捉由 InetAddress() 拋出的例外 16 { 17 System.out.println(" 無法取得 IP 位址 "); 18 } 19 } 20 }

網路程式設計 22-6 InetAddress 類別裡的 getbyname() method 也允許由電腦 host name 取得相對應的 IP 位址, 如下面的範例 : 01 // app22_2, 取得本機的名稱與 IP 位址 02 import java.net.*; 03 04 class app22_2 05 { 06 public static void main(string args[]) 07 { 08 try 09 { 10 InetAddress adr; // 宣告 InetAddress 類別型態的變數 adr 11 adr=inetaddress.getbyname("udn.com"); // 取得 IP 位址 12 System.out.println(adr); 13 } 14 catch(unknownhostexception e) 15 { 16 System.out.println(" 無法取得 IP 位址 "); 17 } 18 } 19 } /* app22_2 OUTPUT----- udn.com/210.244.31.152 ----------------------*/

網路程式設計 22-7 22.2 認識 URL URL 是 universal resource locator 之意, 用來表示網路上資源的位址 下面的網址便是一個 URL 的範例 : http://udn.com:80/news/main.html

網路程式設計 22-8 Java 以 URL 類別來處理 URL 相關的資訊 : 表 22.2.1 java.net.url 常用的建構元與 method 建構元 URL(String spec) URL(String protocol, String host, String file) URL(URL context, String spec) 主要功能 由字串 spec 建立 URL 物件 以通訊協定 host name 與檔案路徑的字串建立 URL 物件 以一個絕對路徑的 URL 物件, 以及相對路徑的檔案名稱建立 URL 物件 method Object getcontent() String getfile() String gethost() String getpath() int getport() String getprotocol() URLConnection openconnection() 主要功能取得 URL 檔案的內容取得 URL 的檔案名稱取得 URL 的 host name 取得 URL 的路徑取得 URL 的埠號取得 URL 的通訊協定名稱建立一個 URL 連線, 並傳回 URLConnection 物件

網路程式設計 22-9 下面的範例說明了如何建立一個 URL 物件, 及如何利用 URL 物件來取得該物件裡的資訊 : 01 // app22_3, 使用 URL 類別 02 import java.net.*; 03 04 public class app22_3 05 { 06 public static void main(string args[]) 07 { 08 try 09 { /* app22_3 OUTPUT----- 通訊協定名稱為 http host name 為 udn.com 埠號為 -1 檔名為 /NEWS/main.html ----------------------*/ 10 URL u=new URL("http://udn.com/NEWS/main.html"); 11 12 System.out.println(" 通訊協定名稱為 "+u.getprotocol()); 13 System.out.println("host name 為 "+u.gethost()); 14 System.out.println(" 埠號為 "+u.getport()); 15 System.out.println(" 檔名為 "+u.getfile()); 16 } 17 catch(malformedurlexception e) 18 { 19 System.out.println(" 發生了 " +e+ " 例外 "); 20 } 21 } 22 }

網路程式設計 22-10 建立 URL 物件之後, 即可利用 URL 物件呼叫 getcontent() method, 取得 URL 內的資源, 如下面的範例 : 01 // app22_4, 載入 URL 的檔案內容 02 import java.net.*; 03 import java.io.*; 04 05 public class app22_4 06 { 07 public static void main(string args[]) 08 { 09 String str; 10 11 try 12 { 13 URL u=new URL("file:/c:\\java\\poem.txt"); 14 15 Object obj=u.getcontent(); // 取得 URL 的內容 16 InputStreamReader isr=new InputStreamReader((InputStream) obj); 17 BufferedReader br=new BufferedReader(isr); 18 19 while((str=br.readline())!=null) 20 System.out.println(str);

網路程式設計 22-11 21 br.close(); 22 } 23 catch(ioexception e) 24 { 25 System.out.println(" 發生了 "+e+" 例外 "); 26 } 27 } 28 } /* app22_4 OUTPUT---- 床前明月光, 疑是地上霜 舉頭望明月, 低頭思故鄉 --------------------*/

網路程式設計 22-12 使用 URLConnection 類別 如果要取得檔案的大小與類型等資訊, 可利用 URLConnection 類別 下表列出了兩個 URLConnection 類別所提供的 method: 表 22.2.2 java.net.urlconnection 常用 method method int getcontentlength() int getcontenttype() 主要功能 取得資料所佔的位元數 取得資料的型態

網路程式設計 22-13 下面的程式碼說明了如何利用 getcontentlength() 取得檔案的大小 : 01 // app22_5, 使用 URLConnection 類別 02 import java.net.*; 03 import java.io.*; 04 05 class app22_5 06 { 07 public static void main(string args[]) 08 { 09 try 10 { 11 URL u1=new URL("http://www.drmaster.com.tw"); 12 URL u2=new URL("file:/c:\\java\\star.txt"); 13 URL u3=new URL("file:/c:\\java\\pic0.jpg"); 14 15 URLConnection uc1=u1.openconnection(); 16 URLConnection uc2=u2.openconnection(); 17 URLConnection uc3=u3.openconnection(); 18 19 System.out.print(" 主網頁的大小為 " + uc1.getcontentlength()); 20 System.out.println(", 類型為 " + uc1.getcontenttype()); 21 System.out.print("star.txt 的大小為 " + uc2.getcontentlength()); 22 System.out.println(", 類型為 " + uc2.getcontenttype());

網路程式設計 22-14 23 System.out.print("pic0.jpg 的大小為 " + uc3.getcontentlength()); 24 System.out.println(", 類型為 " + uc3.getcontenttype()); 25 } 26 catch(ioexception e) 27 { 28 System.out.println(" 發生了 "+e+" 例外 "); 29 } 30 } 31 } /* app22_5 OUTPUT---------------------- 主網頁的大小為 1068, 類型為 text/html star.txt 的大小為 62, 類型為 text/plain pic0.jpg 的大小為 6280, 類型為 image/jpeg ----------------------------------------*/

網路程式設計 22-15 22.3 建立主從架構程式 -- 使用 Socket 類別 主從架構裡, 不同的伺服程式會使用不同的埠號, 同時在伺服器裡執行 如有 client 端 ( 客戶端 ) 的請求送來時, 則 server 端 ( 伺服端 ) 的伺服程式會對此一請求做出回應 : 3 處理 2 接收請求 1 提出服務請求 Server 端 傳送處理結果 4 接收結果 5 Client 端

網路程式設計 22-16 ServerSocket 與 Socket 類別, 可將客戶端的電腦連上伺服器, 並可從伺服器傳遞資料給客戶端 client-server 的運作的流程如下圖所示 : ServerSocket accept() 提出連線請求 Socket Socket read request close() response read close() Server 端 Client 端

網路程式設計 22-17 下面列出了 ServerSocket 與 Socket 類別所提供的建構元與 method: 表 22.3.1 java.net.serversocket 常用的建構元與 method 建構元 ServerSocket(int port) 主要功能 以埠號 port 建立 server socket 連線 method Socket accept() void close() 主要功能 監控客戶端的請求 當客戶端有請求時, 便建立 socket 物件與客戶端連繫 關閉 socket

網路程式設計 22-18 表 22.3.2 java.net.socket 常用的建構元與 method 建構元 Socket() Socket(InetAddress address, int port) 主要功能 建立 socket 物件 根據 IP 位址與埠號建立 socket 物件 method void close() InetAddress getinetaddress() InetAddress getlocaladdress() InputStream getinputstream() OutputStream getoutputstream() int getlocalport() int getport() 主要功能關閉 socket 連線取得 socket 所連線的 IP 位址取得 socket 連線的本地端 IP 位址取得 socket 連線的輸入串流取得 socket 連線的輸出串流取得 socket 連線的本地端埠號取得 socket 連線時遠端的埠號

網路程式設計 22-19 建立 Server 端的伺服程式 本範例將建立一個 server 端的伺服端程式 : 01 // app22_6, 建立 Server 端的伺服程式 02 import java.net.*; 03 import java.io.*; 04 05 public class app22_6 06 { 07 public static void main(string args[]) 08 { 09 try 10 { 11 ServerSocket svs=new ServerSocket(2525); 12 13 System.out.println(" 等候客戶端的請求中..."); 14 Socket s=svs.accept(); // 等候客戶端的請求 15 System.out.println(" 客戶端已和本機連上線..."); 16 17 OutputStream out=s.getoutputstream(); // 取得輸出串流 18 String str="hello Java"; 19 System.out.println(" 資料正在傳送中..."); 20 out.write(str.getbytes());// 將字串轉成 Byte 陣列, 再寫入串流中

21 out.close(); // 關閉輸出串流 22 s.close(); // 關閉 socket 23 System.out.println(" 資料傳送完畢..."); 24 } 25 catch(exception e) 26 { 27 System.out.println(" 發生了 "+e+" 例外 "); 28 } 29 } 30 } 網路程式設計 22-20

網路程式設計 22-21 建立 Client 端的伺服程式 接下來是一個客戶端的程式, 撰寫如下 : 01 // app22_7, 建立 Client 端的伺服程式 02 import java.net.*; 03 import java.io.*; 04 05 public class app22_7 06 { 07 public static void main(string args[]) 08 { 09 byte buff[]=new byte[1024]; // 建立 byte 型態的陣列 10 try 11 { 12 System.out.println(" 正在與伺服器建立連線..."); 13 Socket s=new Socket("127.0.0.1",2525); // 建立 socket 物件 14 System.out.println(" 已經與伺服器取得連線..."); 15 InputStream in=s.getinputstream(); // 建立輸入串流 16 int n=in.read(buff); // 從串流讀入資料 17 System.out.print(" 從伺服端收到 : "); 18 System.out.println (new String(buff,0,n));// 印出讀入的內容 19 in.close(); 20 s.close();

網路程式設計 22-22 21 } 22 catch(exception e) 23 { 24 System.out.println(" 發生了 "+e+" 例外 "); 25 } 26 } 27 } app22_6 與 app22_7 的執行結果如下所示 : /* app22_6 OUTPUT---- 等候客戶端的請求中... 客戶端已和本機連上線... 資料正在傳送中... 資料傳送完畢... ----------------------*/ /* app22_7 OUTPUT------- 正在與伺服器建立連線... 已經與伺服器取得連線... 從伺服端收到 : Hello Java -------------------------*/

網路程式設計 22-23