第12章Java網(wǎng)絡(luò)程序設(shè)計_第1頁
第12章Java網(wǎng)絡(luò)程序設(shè)計_第2頁
第12章Java網(wǎng)絡(luò)程序設(shè)計_第3頁
第12章Java網(wǎng)絡(luò)程序設(shè)計_第4頁
第12章Java網(wǎng)絡(luò)程序設(shè)計_第5頁
已閱讀5頁,還剩64頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、第第12章章 Java網(wǎng)絡(luò)程序設(shè)計網(wǎng)絡(luò)程序設(shè)計Java網(wǎng)絡(luò)程序設(shè)計2nJava提供的網(wǎng)絡(luò)功能有三大類: URL, Socket, Datagram.nURL是三大功能中最高級的一種,通過URL Java程序可以直接送出或讀入網(wǎng)絡(luò)上的數(shù)據(jù).nSocket是傳統(tǒng)網(wǎng)絡(luò)程序最常用的方式,可以想象為兩個不同的程序通過網(wǎng)絡(luò)的通信信道.nDatagram是更低級的網(wǎng)絡(luò)傳輸方式,它把數(shù)據(jù)的目的記錄在數(shù)據(jù)包中,然后直接放在網(wǎng)絡(luò)上.Java網(wǎng)絡(luò)程序設(shè)計3主要內(nèi)容主要內(nèi)容n12.1 Java與網(wǎng)絡(luò)通信n1. TCP/IP協(xié)議n2. Java中的網(wǎng)絡(luò)功能n3. 端口n4. Socket通信機制n12.2 URL通信n

2、12.2.1 InetAddress類n12.2.2 URL類n12.2.3 URLConnection類n12.3 TCP Socket通信n1. URL通信與Socket通信的區(qū)別n2. 使用Socket通信過程n3. Socket類n4. ServerSocket類n12.4 數(shù)據(jù)報通信n作業(yè)Java網(wǎng)絡(luò)程序設(shè)計412.1 Java與網(wǎng)絡(luò)通信與網(wǎng)絡(luò)通信njava語言是Internet上的世界語。借助借助HTML從網(wǎng)上下載從網(wǎng)上下載applet在程序中通過在程序中通過URL訪問網(wǎng)上資源訪問網(wǎng)上資源通過通過包中的類包中的類直接在程序中實現(xiàn)網(wǎng)絡(luò)通訊直接在程序中實現(xiàn)網(wǎng)絡(luò)通訊Java網(wǎng)絡(luò)程序設(shè)計5

3、1. TCP/IP協(xié)議協(xié)議應(yīng)用層:應(yīng)用程序間溝通的層應(yīng)用層:應(yīng)用程序間溝通的層傳輸層:提供了結(jié)點間的數(shù)據(jù)傳送傳輸層:提供了結(jié)點間的數(shù)據(jù)傳送服務(wù)使用服務(wù)使用Socket、ServerSocket 類類網(wǎng)際層:負(fù)責(zé)提供基本的數(shù)據(jù)封包網(wǎng)際層:負(fù)責(zé)提供基本的數(shù)據(jù)封包傳送功能。傳送功能。網(wǎng)絡(luò)接口層:對實際的網(wǎng)絡(luò)媒體的網(wǎng)絡(luò)接口層:對實際的網(wǎng)絡(luò)媒體的管理,定義如何使用實際網(wǎng)絡(luò)來傳管理,定義如何使用實際網(wǎng)絡(luò)來傳送數(shù)據(jù)。送數(shù)據(jù)。應(yīng)用層應(yīng)用層(HTTP, FTP, telnet)傳輸層傳輸層(TCP, UDP,.)網(wǎng)際層網(wǎng)際層(IP)網(wǎng)絡(luò)接口層網(wǎng)絡(luò)接口層一般應(yīng)用程序是靠一般應(yīng)用程序是靠TCP(而不是而不是IP)實

4、現(xiàn)通訊功能,因為它們需要大實現(xiàn)通訊功能,因為它們需要大量數(shù)據(jù)的無差錯傳輸量數(shù)據(jù)的無差錯傳輸。Java網(wǎng)絡(luò)程序設(shè)計61. TCP/IP協(xié)議協(xié)議Java網(wǎng)絡(luò)程序設(shè)計72. Java中的網(wǎng)絡(luò)功能中的網(wǎng)絡(luò)功能針對網(wǎng)絡(luò)通信的不同層次,針對網(wǎng)絡(luò)通信的不同層次,Java提供的網(wǎng)絡(luò)功能有四提供的網(wǎng)絡(luò)功能有四大類:大類:InetAddress 、URLs、Sockets、Datagram。n InetAddress面向的是面向的是IP層,用于標(biāo)識網(wǎng)絡(luò)上的硬層,用于標(biāo)識網(wǎng)絡(luò)上的硬件資源。件資源。n URL面向的是應(yīng)用層,通過面向的是應(yīng)用層,通過URL,Java程序可以直程序可以直接送出或讀入網(wǎng)絡(luò)上的數(shù)據(jù)。接送出或

5、讀入網(wǎng)絡(luò)上的數(shù)據(jù)。nSockets和和Datagram面向的則是傳輸層。面向的則是傳輸層。Sockets使用的是使用的是TCP協(xié)議,這是傳統(tǒng)網(wǎng)絡(luò)程序最常用的方式,協(xié)議,這是傳統(tǒng)網(wǎng)絡(luò)程序最常用的方式,可以想象為兩個不同的程序通過網(wǎng)絡(luò)的通信信道進(jìn)行可以想象為兩個不同的程序通過網(wǎng)絡(luò)的通信信道進(jìn)行通信。通信。Datagram則使用則使用UDP協(xié)議,是另一種網(wǎng)絡(luò)傳協(xié)議,是另一種網(wǎng)絡(luò)傳輸方式,它把數(shù)據(jù)的目的地記錄在數(shù)據(jù)包中,然后直輸方式,它把數(shù)據(jù)的目的地記錄在數(shù)據(jù)包中,然后直接放在網(wǎng)絡(luò)上。接放在網(wǎng)絡(luò)上。Java網(wǎng)絡(luò)程序設(shè)計包中的主要的類包中的主要的類n面向面向IP層的類:層的類:InetAddressn面

6、向應(yīng)用層的類:面向應(yīng)用層的類:URL、URLConnectionn面向傳輸層的類:面向傳輸層的類:nTCP協(xié)議相關(guān)類協(xié)議相關(guān)類:Socket、ServerSocketnUDP協(xié)議相關(guān)類:協(xié)議相關(guān)類:DatagramPacket、DatagramSocket、MulticastSocketn可能產(chǎn)生的可能產(chǎn)生的異常異常:nBindException、ConnectException、MalformedURLException、NoRouteToHostException、ProtocolException、SocketException、UnknownHostException、UnknownS

7、erviceExceptionJava網(wǎng)絡(luò)程序設(shè)計93. 端口端口nInternet上傳輸?shù)臄?shù)據(jù)都帶有標(biāo)識目的主機與端上傳輸?shù)臄?shù)據(jù)都帶有標(biāo)識目的主機與端口號的地址信息,主機的地址由口號的地址信息,主機的地址由32位的位的IP地址標(biāo)識,地址標(biāo)識,IP協(xié)議通過該地址把數(shù)據(jù)發(fā)送到正確的目的主機;協(xié)議通過該地址把數(shù)據(jù)發(fā)送到正確的目的主機;端口號由一個端口號由一個16位的數(shù)字標(biāo)識,位的數(shù)字標(biāo)識,TCP與與UDP協(xié)議根協(xié)議根據(jù)端口號把數(shù)據(jù)傳送給正確的應(yīng)用程序。據(jù)端口號把數(shù)據(jù)傳送給正確的應(yīng)用程序。n端口號的范圍是端口號的范圍是065535,其中,其中11023之間的之間的端口號是為端口號是為HTTP、FTP

8、等系統(tǒng)應(yīng)用保留等系統(tǒng)應(yīng)用保留的,的,F(xiàn)TP協(xié)協(xié)議的端口號是議的端口號是21,HTTP協(xié)議的端口號是協(xié)議的端口號是80,Telnet協(xié)議的端口號是協(xié)議的端口號是23,用戶應(yīng)用程序只能使用,用戶應(yīng)用程序只能使用1024以上的端口號,其中以上的端口號,其中10244999可任意被用可任意被用戶用作客戶端套接字端口,戶用作客戶端套接字端口,500065535可任意被可任意被用戶用作服務(wù)端套接字端口用戶用作服務(wù)端套接字端口。Java網(wǎng)絡(luò)程序設(shè)計10Java網(wǎng)絡(luò)程序設(shè)計114. Socket通信機制通信機制nSocket通信機制提供了兩種通信方式:通信機制提供了兩種通信方式:有連接有連接方式(方式(TCP

9、)和無連接方式()和無連接方式(UDP數(shù)據(jù)報)數(shù)據(jù)報)。n有連接方式中,通信雙方在開始時必須進(jìn)行一次連接過有連接方式中,通信雙方在開始時必須進(jìn)行一次連接過程,建立一條程,建立一條通信鏈路通信鏈路。通信鏈路提供了。通信鏈路提供了可靠的、全雙可靠的、全雙工的字節(jié)流服務(wù)工的字節(jié)流服務(wù)。n無連接方式中,通信雙方不存在一個連接過程,一次網(wǎng)無連接方式中,通信雙方不存在一個連接過程,一次網(wǎng)絡(luò)絡(luò)I/O以一個數(shù)據(jù)報形式進(jìn)行,而且每次網(wǎng)絡(luò)以一個數(shù)據(jù)報形式進(jìn)行,而且每次網(wǎng)絡(luò)I/O可以可以和不同主機的不同進(jìn)程進(jìn)行。無連接方式開銷小于有連和不同主機的不同進(jìn)程進(jìn)行。無連接方式開銷小于有連接方式,但是所提供的數(shù)據(jù)傳輸服務(wù)接

10、方式,但是所提供的數(shù)據(jù)傳輸服務(wù)不可靠不可靠,不能保證,不能保證數(shù)據(jù)報一定到達(dá)目的地。數(shù)據(jù)報一定到達(dá)目的地。nJava語言同時支持有連接和數(shù)據(jù)報通信方式,語言同時支持有連接和數(shù)據(jù)報通信方式,在這兩種方式中都在這兩種方式中都采用了采用了Socket表示通信過程中表示通信過程中的端點的端點。Java網(wǎng)絡(luò)程序設(shè)計124. Socket通信機制通信機制nSocket通信機制提供了兩種通信方式:通信機制提供了兩種通信方式:有連接有連接方式(方式(TCP)和無連接方式()和無連接方式(UDP數(shù)據(jù)報)數(shù)據(jù)報)。n有連接方式中,通信雙方在開始時必須進(jìn)行一次連接過有連接方式中,通信雙方在開始時必須進(jìn)行一次連接過程

11、,建立一條程,建立一條通信鏈路通信鏈路。通信鏈路提供了。通信鏈路提供了可靠的、全雙可靠的、全雙工的字節(jié)流服務(wù)工的字節(jié)流服務(wù)。n無連接方式中,通信雙方不存在一個連接過程,一次網(wǎng)無連接方式中,通信雙方不存在一個連接過程,一次網(wǎng)絡(luò)絡(luò)I/O以一個數(shù)據(jù)報形式進(jìn)行,而且每次網(wǎng)絡(luò)以一個數(shù)據(jù)報形式進(jìn)行,而且每次網(wǎng)絡(luò)I/O可以可以和不同主機的不同進(jìn)程進(jìn)行。無連接方式開銷小于有連和不同主機的不同進(jìn)程進(jìn)行。無連接方式開銷小于有連接方式,但是所提供的數(shù)據(jù)傳輸服務(wù)接方式,但是所提供的數(shù)據(jù)傳輸服務(wù)不可靠不可靠,不能保證,不能保證數(shù)據(jù)報一定到達(dá)目的地。數(shù)據(jù)報一定到達(dá)目的地。nJava語言同時支持有連接和數(shù)據(jù)報通信方式,語言

12、同時支持有連接和數(shù)據(jù)報通信方式,在這兩種方式中都在這兩種方式中都采用了采用了Socket表示通信過程中表示通信過程中的端點的端點。Java網(wǎng)絡(luò)程序設(shè)計13Socket通信通信n端到端的連接與通信端到端的連接與通信n網(wǎng)絡(luò)上的兩個程序(進(jìn)程)通過一個雙向的通信網(wǎng)絡(luò)上的兩個程序(進(jìn)程)通過一個雙向的通信連接實現(xiàn)數(shù)據(jù)的交換。連接實現(xiàn)數(shù)據(jù)的交換。n雙向鏈路的一端稱為一個雙向鏈路的一端稱為一個socket(套接字)套接字)n主機主機端口(用于區(qū)分同一臺主機上的不同的通端口(用于區(qū)分同一臺主機上的不同的通信應(yīng)用進(jìn)程:信應(yīng)用進(jìn)程:01023系統(tǒng)系統(tǒng) 102465535用戶)用戶)Java網(wǎng)絡(luò)程序設(shè)計14Soc

13、ket與與I/O流流n一個socket可以持有兩個流輸入流與輸出流Java網(wǎng)絡(luò)程序設(shè)計15Socket通信過程通信過程n服務(wù)器端的程序首先選擇一個端口服務(wù)器端的程序首先選擇一個端口(port)注冊注冊,然后調(diào)用然后調(diào)用accept()方法對此端口進(jìn)行方法對此端口進(jìn)行監(jiān)聽監(jiān)聽,即等,即等待其它程序的連接申請。如果客戶端的程序申請和待其它程序的連接申請。如果客戶端的程序申請和此端口連接,那么服務(wù)器端就利用此端口連接,那么服務(wù)器端就利用accept()方法方法來取得這個連接的來取得這個連接的Socket??蛻舳说某绦蚪ⅰ?蛻舳说某绦蚪ocket時必須指定服務(wù)器的地址時必須指定服務(wù)器的地址(ho

14、st)和通信的和通信的端口端口(port),這個端口必須與服務(wù)器端監(jiān)聽的端口,這個端口必須與服務(wù)器端監(jiān)聽的端口保持一致。保持一致。Java網(wǎng)絡(luò)程序設(shè)計1612.2 URL通信通信nURL(Uniform Resource Locator)是統(tǒng)一資源是統(tǒng)一資源定位器的簡稱,它表示定位器的簡稱,它表示Internet/Intranet上一個上一個資源的引用或地址,這些資源可以是一個文件、一資源的引用或地址,這些資源可以是一個文件、一個目錄或一個對象。個目錄或一個對象。 nURL是由一個字符串來描述的,是由一個字符串來描述的,URL包括協(xié)議包括協(xié)議和資源名稱兩部分,協(xié)議表示訪問資源所需的協(xié)議,和資源

15、名稱兩部分,協(xié)議表示訪問資源所需的協(xié)議,如如HTTP、FTP等;資源名稱表示要訪問的資源地等;資源名稱表示要訪問的資源地址。址。 n:8080Java網(wǎng)絡(luò)程序設(shè)計1712.2.1 InetAddress類類n類類InetAddress可以用于標(biāo)識網(wǎng)絡(luò)上的硬件資源,可以用于標(biāo)識網(wǎng)絡(luò)上的硬件資源,它提供了一系列方法以描述、獲取及使用網(wǎng)絡(luò)資源。它提供了一系列方法以描述、獲取及使用網(wǎng)絡(luò)資源。nInetAddress類沒有構(gòu)造函數(shù),因此不能用類沒有構(gòu)造函數(shù),因此不能用new來來構(gòu)造一個構(gòu)造一個InetAddress實例。通常是用它提供的靜態(tài)實例。通常是用它提供的靜態(tài)方法來獲

16、?。悍椒▉慝@取:npublic static InetAddress getByName(String host) :host可以是一個機器名,也可以是一個形如可以是一個機器名,也可以是一個形如“%d.%d.%d.%d”的的IP地址或一個地址或一個DSN域名。域名。npublic static InetAddress getLocalHost() npublic static InetAddress getAllByName(String host)n這三個方法通常會產(chǎn)生這三個方法通常會產(chǎn)生UnknownHostException例外,應(yīng)在程序中捕獲處理。例外,應(yīng)在程序中捕獲處理。Java網(wǎng)絡(luò)

17、程序設(shè)計18InetAddress類的幾個主要方法:類的幾個主要方法:npublic byte getAddress():獲得本對象的獲得本對象的IP地址(存放在字節(jié)數(shù)組中)。地址(存放在字節(jié)數(shù)組中)。npublic String getHostAddress():獲得本對象獲得本對象的的IP地址地址“%d.%d.%d.%d”。npublic String getHostName():獲得本對象的獲得本對象的機器名。機器名。n獲得本地主機的獲得本地主機的IP地址:地址:InetAddress addr=InetAddress.getLocalHost();import .*;public cl

18、ass TestInetAddressClass public static void main(String args) try InetAddress address=InetAddress.getByName();String hostName = address.getHostName(); / 獲得主機名獲得主機名String IPName = address.getHostAddress(); / 獲得獲得IP地址地址System.out.println(hostName);System.out.println(IPName); catch (UnknownHostExceptio

19、n e) e.printStackTrace(); Java網(wǎng)絡(luò)程序設(shè)計19【例12.1】TestInetAddressClass.javaJava網(wǎng)絡(luò)程序設(shè)計2012.2.2 URL類類npublic URL(String spec)n/參數(shù)參數(shù)spec是描述文件名的字符串。是描述文件名的字符串。npublic URL(String protocol, String host, String file)n/參數(shù)中的參數(shù)中的protocol為協(xié)議名;為協(xié)議名;host為主機名;為主機名;file為文為文件名;端口號使用默認(rèn)值。件名;端口號使用默認(rèn)值。npublic URL(String pro

20、tocol,String host,String port,String file)npublic URL(URL context,String spec)n/參數(shù)參數(shù)context為為URL對象,用于指定對象,用于指定URL位置。位置。注意注意:類:類URL的構(gòu)造方法都聲明拋出非運行時異常的構(gòu)造方法都聲明拋出非運行時異常(MalformedURLException),因此生成),因此生成URL對象時,我對象時,我們必須要對這一異常進(jìn)行處理,用們必須要對這一異常進(jìn)行處理,用trycatch語句進(jìn)行捕獲。語句進(jìn)行捕獲。Java網(wǎng)絡(luò)程序設(shè)計2112.2.2 URL類類一個一個URL對象生成后,其屬

21、性是不能被改變的,但可對象生成后,其屬性是不能被改變的,但可以通過它給定的方法來獲取這些屬性:以通過它給定的方法來獲取這些屬性:getDefaultport():返回缺省的端口號。返回缺省的端口號。getFile():獲得獲得URL指定資源的完整文件名指定資源的完整文件名getHost():返回主機名。返回主機名。getPath():返回指定資源文件目錄和文件名返回指定資源文件目錄和文件名getPort():返回端口號,默認(rèn)返回端口號,默認(rèn)-1getProtocol():返回表示返回表示URL中協(xié)議的字符串對象中協(xié)議的字符串對象getRef():返回返回URL中的中的HTML文檔標(biāo)記,即文檔標(biāo)

22、記,即#號標(biāo)記號標(biāo)記getUserInfo():返回用戶信息。返回用戶信息。toExternalForm():返回完整的返回完整的URL字符串。字符串。toString():返回完整返回完整URL字符串。字符串。/生成一個生成一個URL對象,并獲取它的各個屬性。對象,并獲取它的各個屬性。URL MyURL = null;try MyURL=new URL(http:/ catch (MalformedURLException e) System.out.println(MalformedURLException: + e); System.out.println(URL String: + M

23、yURL.toString();System.out.println(Protocol: + MyURL.getProtocol();System.out.println(Host: + MyURL.getHost();System.out.println(Port: + MyURL.getPort();System.out.println(File: + MyURL.getFile();Java網(wǎng)絡(luò)程序設(shè)計22【例【例12.2】 TestURLObject.javaJava網(wǎng)絡(luò)程序設(shè)計23通過通過URL讀取讀取www信息信息通過URL類提供的方法openStream(),就可以讀取一個URL

24、對象所指定的資源。public final InputStream openStream() 方法openStream()與指定的URL建立連接并返回一個InputStream對象,將URL位置的資源轉(zhuǎn)成一個數(shù)據(jù)流。通過這個InputStream對象,就可以讀取資源中的數(shù)據(jù)。URLJava 程序程序InputStreamJava網(wǎng)絡(luò)程序設(shè)計24【例【例12.3】 TestURLHtml.javan用用URL類的類的openStream()成員方法獲取指定的成員方法獲取指定的HTML頁面的源代碼。頁面的源代碼。try URL url = new URL(/ch1/W

25、ebForm1-1.aspx);/ 用用URL對象打開一個輸入流對象打開一個輸入流DataInputStream d = new DataInputStream(url.openStream();String inputLine;while (inputLine = d.readLine() != null) / 從輸入流讀入數(shù)據(jù)從輸入流讀入數(shù)據(jù)System.out.println(inputLine); / 將數(shù)據(jù)顯示到系統(tǒng)標(biāo)準(zhǔn)輸出上將數(shù)據(jù)顯示到系統(tǒng)標(biāo)準(zhǔn)輸出上d.close(); / 關(guān)閉輸入流關(guān)閉輸入流 catch (MalformedURLException me) catch (IOE

26、xception ioe) Java網(wǎng)絡(luò)程序設(shè)計25【例【例12.3】 TestURLHtml.javan在在JDK1.1以后以后DataInputStream的的readLine方法就過期方法就過期了了,換用換用BufferedReader。將代碼將代碼DataInputStream d = new DataInputStream(url.openStream();改為改為BufferedReader d=new BufferedReader(new InputStreamReader(url.openStream();就可以了就可以了Java網(wǎng)絡(luò)程序設(shè)計26【例【例12.3】 TestUR

27、LHtml.javan說明:由于說明:由于URL的的openStream()成員方法返回的成員方法返回的是是InputStream類的對象,所以只能通過類的對象,所以只能通過read()方方法逐個字節(jié)地去讀法逐個字節(jié)地去讀URL地址處的資源信息。這里利用地址處的資源信息。這里利用DataInputStream對原始信息流進(jìn)行了包裝和處理,對原始信息流進(jìn)行了包裝和處理,以提高以提高I/O效率。效率。Java網(wǎng)絡(luò)程序設(shè)計2712.2.3 URLConnection類類n通過通過URL類提供的方法類提供的方法openConnection(),就可以就可以獲得一個獲得一個URL連接(連接(URLCon

28、nection)對象。對象。npublic URLConnection openConnection()n通過通過URL的方法的方法openStream(),只能從網(wǎng)絡(luò)上讀取只能從網(wǎng)絡(luò)上讀取資源中的數(shù)據(jù)。通過資源中的數(shù)據(jù)。通過URLConnection類,可以在應(yīng)用類,可以在應(yīng)用程序和程序和URL資源之間進(jìn)行交互,既可以從資源之間進(jìn)行交互,既可以從URL中讀取中讀取數(shù)據(jù),也可以向數(shù)據(jù),也可以向URL中發(fā)送數(shù)據(jù)。中發(fā)送數(shù)據(jù)。URLConnection類類表示了應(yīng)用程序和表示了應(yīng)用程序和URL資源之間的通信連接。資源之間的通信連接??蛻舳丝蛻舳薺ava程序程序OutputStreamInputSt

29、reamCGI程序程序STDINSTDOUT服務(wù)器服務(wù)器connectiongetchar()putchar()Java網(wǎng)絡(luò)程序設(shè)計2812.2.3 URLConnection類類1創(chuàng)建創(chuàng)建URLConnection類的對象類的對象URLConnection類是一個抽象類,創(chuàng)建URLConnection對象分兩步完成:首先創(chuàng)建一個URL對象,然后調(diào)用該URL對象的openConnection()方法返回一個對應(yīng)其URL地址的URLConnection對象。例如:nURL MyURL=new URL(http:/ con= MyURL.openConnection();Java網(wǎng)絡(luò)程序設(shè)計291

30、2.2.3 URLConnection類類2向服務(wù)器端寫數(shù)據(jù)向服務(wù)器端寫數(shù)據(jù)首先建立輸出數(shù)據(jù)流:首先建立輸出數(shù)據(jù)流: nPrintStream out=new PrintStream(con.getOutputStream(); 然后向服務(wù)器寫入信息:然后向服務(wù)器寫入信息: nout.println(String data);Java網(wǎng)絡(luò)程序設(shè)計3012.2.3 URLConnection類類3從服務(wù)器端讀數(shù)據(jù)從服務(wù)器端讀數(shù)據(jù)首先建立輸入數(shù)據(jù)流:首先建立輸入數(shù)據(jù)流:nInputStreamReader ins=new InputStreamReader(con.getInputStream()

31、;nBufferedReader in=new BufferedReader(ins);或:或:nDataInputStream dis=newDataInputStream(con.getInputStream();然后從服務(wù)器讀信息:然后從服務(wù)器讀信息:in.readLine(); 或:dis.readLine();Java網(wǎng)絡(luò)程序設(shè)計31【例【例12.4】 CommunicationCgi.javan使用使用URLConnection類從遠(yuǎn)方主機獲取信息。類從遠(yuǎn)方主機獲取信息。n由于安全性的約束,由于安全性的約束,Java程序只能對特定的程序只能對特定的URL進(jìn)行寫的操作,這種進(jìn)行寫的操

32、作,這種URL就是服務(wù)器上的就是服務(wù)器上的CGI程序。程序。CGI是公共網(wǎng)關(guān)接口是公共網(wǎng)關(guān)接口(CommonGatewayInterface)的簡稱,它是客戶端瀏覽器與服務(wù)器端的應(yīng)用程序進(jìn)的簡稱,它是客戶端瀏覽器與服務(wù)器端的應(yīng)用程序進(jìn)行通信的接口。行通信的接口。Java網(wǎng)絡(luò)程序設(shè)計32【例【例12.4】 CommunicationCgi.java/ 建立指向網(wǎng)絡(luò)中建立指向網(wǎng)絡(luò)中CGI的的URL對象,對象,backwards為服務(wù)器端為服務(wù)器端CGI程序程序URL url = new URL(http:/);URLConnection connection = url.openConnectio

33、n();/將將 doOutput 標(biāo)志設(shè)置為標(biāo)志設(shè)置為 true,表示使用,表示使用URL連接進(jìn)行輸入。連接進(jìn)行輸入。 connection.setDoOutput(true);/讀取或?qū)懭脒h(yuǎn)方的計算機節(jié)點的信息時,首先要建立輸入或輸出數(shù)據(jù)流,利用讀取或?qū)懭脒h(yuǎn)方的計算機節(jié)點的信息時,首先要建立輸入或輸出數(shù)據(jù)流,利用URLConnection類的方法類的方法 getlnputStream()或或getOutputStream()PrintStream out = new PrintStream(connection.getOutputStream();out.println(12345); /向

34、遠(yuǎn)方計算機節(jié)點寫入信息向遠(yuǎn)方計算機節(jié)點寫入信息,服務(wù)器輸出數(shù)據(jù)服務(wù)器輸出數(shù)據(jù)out.close();InputStreamReader ins = new InputStreamReader(connection.getInputStream();BufferedReader in = new BufferedReader(ins);String inputLine;while (inputLine = in.readLine() != null) /讀取遠(yuǎn)方計算機節(jié)點的信息讀取遠(yuǎn)方計算機節(jié)點的信息System.out.println(inputLine); / 輸出從服務(wù)器讀出的數(shù)據(jù)輸出從服

35、務(wù)器讀出的數(shù)據(jù)in.close();Java網(wǎng)絡(luò)程序設(shè)計3312.3 TCP Socket通信通信nTCP(Transport Control Protocol)n兩主機之間兩主機之間有連接的、可靠的、端對端有連接的、可靠的、端對端(end-to-end)的的數(shù)據(jù)流的傳輸數(shù)據(jù)流的傳輸.n如如http, ftp, telnet 的傳輸層均使用此協(xié)議的傳輸層均使用此協(xié)議Java網(wǎng)絡(luò)程序設(shè)計3412.3 TCP Socket通信通信n為了支持為了支持TCP/IP面向連接的網(wǎng)絡(luò)程序的開發(fā),面向連接的網(wǎng)絡(luò)程序的開發(fā),包提供了包提供了Socket類與類與ServerSocket類,類,ServerSock

36、et類和類和Socket類均直接繼承于類均直接繼承于Java的的Object根類。根類。nServerSocket類用于服務(wù)端程序,它有一個類用于服務(wù)端程序,它有一個accept方法專門用來監(jiān)聽客戶端的連接,并產(chǎn)生一個方法專門用來監(jiān)聽客戶端的連接,并產(chǎn)生一個與客戶端連接相對應(yīng)的與客戶端連接相對應(yīng)的Socket對象;對象;nSocket類則是服務(wù)端程序和客戶端程序都要用到的類則是服務(wù)端程序和客戶端程序都要用到的類,該類專門用來處理連接雙方的數(shù)據(jù)通信。一個類,該類專門用來處理連接雙方的數(shù)據(jù)通信。一個Socket由一個由一個IP地址和一個端口號唯一確定。地址和一個端口號唯一確定。Java網(wǎng)絡(luò)程序設(shè)計

37、351. URL通信與通信與Socket通信的區(qū)別通信的區(qū)別nURL通信與通信與Socket通信都是面向連接的通信。它們通信都是面向連接的通信。它們的區(qū)別在于:的區(qū)別在于:(1) Socket通信方式為通信方式為主動主動等待客戶端的服務(wù)請求方式。而等待客戶端的服務(wù)請求方式。而URL通信方式為通信方式為被動被動等待客戶端的服務(wù)請求方式。等待客戶端的服務(wù)請求方式。(2) 利用利用Socket進(jìn)行通信時,在服務(wù)器端運行了一個進(jìn)行通信時,在服務(wù)器端運行了一個Socket通通信程序,不停地監(jiān)聽客戶端的連接請求,當(dāng)接到客戶端請求后,信程序,不停地監(jiān)聽客戶端的連接請求,當(dāng)接到客戶端請求后,馬上建立連接并進(jìn)行

38、通信。利用馬上建立連接并進(jìn)行通信。利用URL進(jìn)行通信時,在服務(wù)器端常進(jìn)行通信時,在服務(wù)器端常駐一個駐一個CGI程序,但它一直處于睡眠狀態(tài),只有當(dāng)客戶端的連接程序,但它一直處于睡眠狀態(tài),只有當(dāng)客戶端的連接請求到達(dá)時才被喚醒,然后建立連接并進(jìn)行通信。請求到達(dá)時才被喚醒,然后建立連接并進(jìn)行通信。(3) 在在Socket通信方式中,服務(wù)器端的程序可以打開多個線程通信方式中,服務(wù)器端的程序可以打開多個線程與多個客戶端進(jìn)行通信,并且還可以通過服務(wù)器使各個客戶端之與多個客戶端進(jìn)行通信,并且還可以通過服務(wù)器使各個客戶端之間進(jìn)行通信,這種方式適合于一些較復(fù)雜的通信。而在間進(jìn)行通信,這種方式適合于一些較復(fù)雜的通信

39、。而在URL通信通信方式中,服務(wù)器端的程序只能與一個客戶進(jìn)行通信,這種方式比方式中,服務(wù)器端的程序只能與一個客戶進(jìn)行通信,這種方式比較適合于較適合于B/S通信模式。通信模式。361.Socket通信機制的基本概念通信機制的基本概念(1)建立連接)建立連接n當(dāng)兩臺計算機進(jìn)行通信時,首先要在兩者之間建立當(dāng)兩臺計算機進(jìn)行通信時,首先要在兩者之間建立一個連接,也就是兩者分別運行不同的程序,由一一個連接,也就是兩者分別運行不同的程序,由一端發(fā)出連接請求,另一端等候連接請求。端發(fā)出連接請求,另一端等候連接請求。n當(dāng)?shù)群蚨耸盏秸埱蟛⒔邮苷埱蠛?,兩個程序就建立當(dāng)?shù)群蚨耸盏秸埱蟛⒔邮苷埱蠛螅瑑蓚€程序就建立起一個

40、連接,之后通過這個連接可以進(jìn)行數(shù)據(jù)交換。起一個連接,之后通過這個連接可以進(jìn)行數(shù)據(jù)交換。此時,請求方稱為此時,請求方稱為客戶端客戶端,接收方稱為,接收方稱為服務(wù)器端服務(wù)器端。n應(yīng)用在這兩端的應(yīng)用在這兩端的TCP Socket分別稱為分別稱為服務(wù)器服務(wù)器Socket和和客戶客戶Socket。n基本原理類似于電話系統(tǒng)。基本原理類似于電話系統(tǒng)。371.Socket通信機制的基本概念通信機制的基本概念(2)連接地址)連接地址n為了建立連接,需要有一個程序向另一臺計算機上為了建立連接,需要有一個程序向另一臺計算機上的程序發(fā)出請求,其中,能夠唯一識別對方機器的,的程序發(fā)出請求,其中,能夠唯一識別對方機器的,

41、就是計算機的名稱或就是計算機的名稱或IP地址地址,稱為,稱為連接地址連接地址,類似,類似于電話系統(tǒng)中的電話號碼。于電話系統(tǒng)中的電話號碼。n計算機上的每個程序有一個唯一的端口號,通過端計算機上的每個程序有一個唯一的端口號,通過端口號指定要連接的程序。所以一個完整的連接應(yīng)該口號指定要連接的程序。所以一個完整的連接應(yīng)該是是IP+端口端口。n兩個程序進(jìn)行連接之前要約定好端口號。由服務(wù)器兩個程序進(jìn)行連接之前要約定好端口號。由服務(wù)器端分配端口號并等候請求,客戶端利用這個端口號端分配端口號并等候請求,客戶端利用這個端口號發(fā)出連接請求,當(dāng)兩個程序所設(shè)定的端口號一致時發(fā)出連接請求,當(dāng)兩個程序所設(shè)定的端口號一致時

42、連接成功。連接成功。381.Socket通信機制的基本概念通信機制的基本概念(3)TCP/IP Socket通信通信nSocket在在TCP/IP協(xié)議中定義,針對一個特定的連接,協(xié)議中定義,針對一個特定的連接,每臺機器上都有一個每臺機器上都有一個“套接字套接字”,可以想象在它們,可以想象在它們之間有一條虛擬的之間有一條虛擬的“線纜線纜”,線纜的每一端都插入,線纜的每一端都插入一個一個“套接字套接字”或或“插座插座”里。里。n在在Java語言中,服務(wù)器端套接字使用語言中,服務(wù)器端套接字使用ServerSocket類,客戶端套接字使用類,客戶端套接字使用Socket類。類。39SOCKET連接過程

43、連接過程n套接字之間的連接過程可以分為三個步驟:套接字之間的連接過程可以分為三個步驟:n服務(wù)器監(jiān)聽服務(wù)器監(jiān)聽:服務(wù)器端套接字并不定位具體的客戶端套接字,:服務(wù)器端套接字并不定位具體的客戶端套接字,而是處于而是處于等待連接的狀態(tài)等待連接的狀態(tài),實時監(jiān)控網(wǎng)絡(luò)狀態(tài)。,實時監(jiān)控網(wǎng)絡(luò)狀態(tài)。n客戶端請求客戶端請求:是指由客戶端的套接字提出連接請求,要連接:是指由客戶端的套接字提出連接請求,要連接的目標(biāo)是服務(wù)器端的套接字。為此,客戶端的套接字必須首的目標(biāo)是服務(wù)器端的套接字。為此,客戶端的套接字必須首先描述它要連接的服務(wù)器的套接字,先描述它要連接的服務(wù)器的套接字,指出服務(wù)器端套接字的指出服務(wù)器端套接字的地址和

44、端口號地址和端口號,然后就向服務(wù)器端套接字,然后就向服務(wù)器端套接字提出連接請求提出連接請求。n連接確認(rèn)連接確認(rèn):是指當(dāng)服務(wù)器端套接字監(jiān)聽到或者說接收到客戶:是指當(dāng)服務(wù)器端套接字監(jiān)聽到或者說接收到客戶端套接字的連接請求,它就響應(yīng)客戶端套接字的請求,建立端套接字的連接請求,它就響應(yīng)客戶端套接字的請求,建立一個新的線程,把服務(wù)器端套接字的描述發(fā)給客戶端,一旦一個新的線程,把服務(wù)器端套接字的描述發(fā)給客戶端,一旦客戶端確認(rèn)了此描述,連接就建立好了。而服務(wù)器端套接字客戶端確認(rèn)了此描述,連接就建立好了。而服務(wù)器端套接字繼續(xù)處于監(jiān)聽狀態(tài),繼續(xù)接收其他客戶端套接字的連接請求。繼續(xù)處于監(jiān)聽狀態(tài),繼續(xù)接收其他客戶端

45、套接字的連接請求。4016.3.2 基于連接的基于連接的Socket通信程序設(shè)計通信程序設(shè)計Java網(wǎng)絡(luò)程序設(shè)計412. 使用使用Socket通信過程通信過程n利用利用socket進(jìn)行有連接的通信過程包括以下三個進(jìn)行有連接的通信過程包括以下三個步驟:步驟:(1) 創(chuàng)建創(chuàng)建socket,建立連接,建立連接包中的兩個類包中的兩個類Socket與與ServerSocket分分別表示連接的別表示連接的Client端和端和Server端,進(jìn)行網(wǎng)絡(luò)通信端,進(jìn)行網(wǎng)絡(luò)通信的方法也都封裝在這兩個類中。建立連接首先要創(chuàng)的方法也都封裝在這兩個類中。建立連接首先要創(chuàng)建這兩個類的對象并把它們關(guān)聯(lián)起來。建這兩個類的對象并

46、把它們關(guān)聯(lián)起來。(2) 打開連接到打開連接到Socket的輸入輸出流,按照一定的的輸入輸出流,按照一定的協(xié)議對協(xié)議對Socket進(jìn)行讀寫操作進(jìn)行讀寫操作.連接建立后,要進(jìn)一步獲取連接上的連接建立后,要進(jìn)一步獲取連接上的I/O流,并通過流,并通過這些流進(jìn)行數(shù)據(jù)傳輸。這些流進(jìn)行數(shù)據(jù)傳輸。(3) 關(guān)閉關(guān)閉Socket.Java網(wǎng)絡(luò)程序設(shè)計423. Socket類類socket類構(gòu)造方法類構(gòu)造方法npublic Socket(String host, int port) 創(chuàng)建一個流套接字并將其連接到指定主機上的指定端口號。創(chuàng)建一個流套接字并將其連接到指定主機上的指定端口號。 npublic Socke

47、t(InetAddress address, int port) 創(chuàng)建一個流套接字并將其連接到指定創(chuàng)建一個流套接字并將其連接到指定 IP 地址的指定端口號地址的指定端口號 npublic Socket(String host, int port, InetAddress localAddr, int localPort)創(chuàng)建一個套接字并將其連接到指定遠(yuǎn)程地址上的指定遠(yuǎn)程端口創(chuàng)建一個套接字并將其連接到指定遠(yuǎn)程地址上的指定遠(yuǎn)程端口npublic Socket(InetAddress address, int port, InetAddress localAddr,int localPort)創(chuàng)建一

48、個套接字并將其連接到指定遠(yuǎn)程地址上的指定遠(yuǎn)程端口創(chuàng)建一個套接字并將其連接到指定遠(yuǎn)程地址上的指定遠(yuǎn)程端口這些方法都將拋出例外這些方法都將拋出例外IOException,程序中需要捕獲處理。,程序中需要捕獲處理。兩兩個構(gòu)造函數(shù)都創(chuàng)建了一個基于個構(gòu)造函數(shù)都創(chuàng)建了一個基于Socket的連接服務(wù)器端流套接字的的連接服務(wù)器端流套接字的流套接字流套接字。43Socket 類常用方法類常用方法nSocket的輸入的輸入/輸出流管理輸出流管理public InputStream getInputStream()/獲取與獲取與Socket相關(guān)聯(lián)的字節(jié)輸入流,用于從相關(guān)聯(lián)的字節(jié)輸入流,用于從Socket中讀數(shù)據(jù)中讀

49、數(shù)據(jù)public OutputStream getOutputStream() /獲取與獲取與Socket相關(guān)聯(lián)的字節(jié)輸出流,用于向相關(guān)聯(lián)的字節(jié)輸出流,用于向Socket中寫數(shù)據(jù)中寫數(shù)據(jù)n這些方法都將拋出例外這些方法都將拋出例外IOException,程序中需要捕獲,程序中需要捕獲處理。處理。n 關(guān)閉關(guān)閉Socketpublic void close() throws IOException44Socket 類常用方法類常用方法n設(shè)置設(shè)置/獲取獲取Socket數(shù)據(jù)數(shù)據(jù)public InetAddress getInetAddress():獲取創(chuàng)建獲取創(chuàng)建Socket對象時指定的計算機對象時指定

50、的計算機IP地址。地址。public InetAddress getLocalAddress():獲取創(chuàng)建獲取創(chuàng)建Socket對象時客戶計算機的對象時客戶計算機的IP地址。地址。public int getPort() :獲取創(chuàng)建獲取創(chuàng)建Socket對象時遠(yuǎn)程主機對象時遠(yuǎn)程主機的端口號的端口號public int getLocalPort()public void setSoTimeout(int timeout):設(shè)定客戶端接:設(shè)定客戶端接口所需等到的時間限度口所需等到的時間限度n 這些方法都將拋出例外這些方法都將拋出例外SocketException。Java網(wǎng)絡(luò)程序設(shè)計454. Serv

51、erSocket類類n構(gòu)造方法:構(gòu)造方法:npublic ServerSocket(int port)npublic ServerSocket(int port, int backlog):支支持指定數(shù)目的連接持指定數(shù)目的連接npublic ServerSocket(int port, int backlog, InetAddress bindAddr)n這些方法都將拋出例外這些方法都將拋出例外IOException,程序中需要捕程序中需要捕獲處理。獲處理。Java網(wǎng)絡(luò)程序設(shè)計464. ServerSocket類類主要方法主要方法npublic Socket accept() :在服務(wù)器端的指

52、定端口監(jiān)聽在服務(wù)器端的指定端口監(jiān)聽客戶端發(fā)來的連接請求,并與之連接??蛻舳税l(fā)來的連接請求,并與之連接。npublic void close() :關(guān)閉:關(guān)閉Socketnpublic InetAddress getInetAddress() :返回服務(wù)器返回服務(wù)器的的IP地址地址npublic int getLocalPort() :取得取得服務(wù)器的端口號服務(wù)器的端口號Java網(wǎng)絡(luò)程序設(shè)計47基于基于TCP的的socket編程編程n服務(wù)器程序編寫:服務(wù)器程序編寫:調(diào)用調(diào)用ServerSocket(int port)創(chuàng)建一個服務(wù)器創(chuàng)建一個服務(wù)器端套接字,并綁定到指定端口上;端套接字,并綁定到指定

53、端口上;調(diào)用調(diào)用accept(),監(jiān)聽連接請求,如果客戶端請,監(jiān)聽連接請求,如果客戶端請求連接,則接受連接,返回通信套接字。求連接,則接受連接,返回通信套接字。調(diào)用調(diào)用Socket類的類的getOutputStream()和和getInputStream獲取輸出流和輸入流,開始網(wǎng)絡(luò)獲取輸出流和輸入流,開始網(wǎng)絡(luò)數(shù)據(jù)的發(fā)送和接收。數(shù)據(jù)的發(fā)送和接收。最后關(guān)閉通信套接字。最后關(guān)閉通信套接字。Java網(wǎng)絡(luò)程序設(shè)計48基于基于TCP的的socket編程編程n客戶端程序編寫:客戶端程序編寫:調(diào)用調(diào)用Socket()創(chuàng)建一個流套接字,并連接到服創(chuàng)建一個流套接字,并連接到服務(wù)器端;務(wù)器端;調(diào)用調(diào)用Socket類

54、的類的getOutputStream()和和getInputStream獲取輸出流和輸入流,開始網(wǎng)絡(luò)獲取輸出流和輸入流,開始網(wǎng)絡(luò)數(shù)據(jù)的發(fā)送和接收。數(shù)據(jù)的發(fā)送和接收。 最后關(guān)閉通信套接字。最后關(guān)閉通信套接字。Java網(wǎng)絡(luò)程序設(shè)計49基于基于TCP的的socket編程編程ServerServerServerSocket(int port)Socket accept()OutputStream Socket.getOutputStream()InputStream Socket.getInputSream()Socket.close()ClientSocket(InetAddress address

55、, int port)OutputStream Socket.getOutputStream()InputStream Socket.getInputStream()Socket.close()Java網(wǎng)絡(luò)程序設(shè)計505. TCP Socket通信程序設(shè)計舉例通信程序設(shè)計舉例n【例例12.5】一個完整的實現(xiàn)一個完整的實現(xiàn)Socket通信的通信的Java程序,分別為服務(wù)器端程序和客戶端程序。在這個程序,分別為服務(wù)器端程序和客戶端程序。在這個程序中,程序中,TCP服務(wù)器在服務(wù)器在8000端口上傾聽,等待與端口上傾聽,等待與客戶端連接。當(dāng)建立連接后,客戶端向服務(wù)器端發(fā)客戶端連接。當(dāng)建立連接后,客戶端

56、向服務(wù)器端發(fā)送一條信息,服務(wù)器收到后再向客戶端發(fā)送一條信送一條信息,服務(wù)器收到后再向客戶端發(fā)送一條信息,直到客戶端發(fā)送息,直到客戶端發(fā)送bye結(jié)束消息傳遞,并拆除客結(jié)束消息傳遞,并拆除客戶端與服務(wù)器端的連接。戶端與服務(wù)器端的連接。 nserver.java client.javan分析如圖示: Java網(wǎng)絡(luò)程序設(shè)計51創(chuàng)建服務(wù)器創(chuàng)建服務(wù)器(端口號端口號)定義數(shù)據(jù)成員定義數(shù)據(jù)成員服務(wù)器等待服務(wù)器等待網(wǎng)絡(luò)連接網(wǎng)絡(luò)連接建立建立socket流流發(fā)送談話信息發(fā)送談話信息接收用戶談話信息接收用戶談話信息創(chuàng)建創(chuàng)建Socket實例實例定義數(shù)據(jù)成員定義數(shù)據(jù)成員建立建立socket流流發(fā)送談話信息發(fā)送談話信息接收

57、服務(wù)器談話信息接收服務(wù)器談話信息關(guān)閉流關(guān)閉流accept() 80008000結(jié)束談話結(jié)束談話(Bye.)結(jié)束談話結(jié)束談話(Bye.)關(guān)閉流關(guān)閉流服務(wù)器端服務(wù)器端客戶端客戶端Java網(wǎng)絡(luò)程序設(shè)計525. TCP Socket通信程序設(shè)計舉例通信程序設(shè)計舉例Java網(wǎng)絡(luò)程序設(shè)計536.多線程的多線程的TCP服務(wù)器服務(wù)器n在【例在【例12.5】中,服務(wù)器端的程序是單線程的,不】中,服務(wù)器端的程序是單線程的,不能支持多個客戶端的并發(fā)訪問。而實際應(yīng)用中有很多能支持多個客戶端的并發(fā)訪問。而實際應(yīng)用中有很多客戶端客戶端/服務(wù)器端服務(wù)器端應(yīng)用程序,其服務(wù)器端需要同時為應(yīng)用程序,其服務(wù)器端需

58、要同時為多個客戶端提供服務(wù),支持多客戶端的并發(fā)訪問。這多個客戶端提供服務(wù),支持多客戶端的并發(fā)訪問。這種訪問模式的實現(xiàn)思想是種訪問模式的實現(xiàn)思想是服務(wù)器端應(yīng)用程序采用多線服務(wù)器端應(yīng)用程序采用多線程機制程機制。n其工作過程是:主線程只負(fù)責(zé)監(jiān)聽,一旦有客戶機其工作過程是:主線程只負(fù)責(zé)監(jiān)聽,一旦有客戶機發(fā)出連接請求,主線程將創(chuàng)建一個子線程,由該子線發(fā)出連接請求,主線程將創(chuàng)建一個子線程,由該子線程負(fù)責(zé)該客戶機的通信,主線程繼續(xù)監(jiān)聽其他客戶機程負(fù)責(zé)該客戶機的通信,主線程繼續(xù)監(jiān)聽其他客戶機的連接請求。的連接請求。Java網(wǎng)絡(luò)程序設(shè)計54 解決方案:解決方案:n 將服務(wù)器寫成多線程的,主程序監(jiān)聽一端口,等待客

59、戶接入;同時構(gòu)造一個線程類,準(zhǔn)備接管會話。當(dāng)一個Socket會話產(chǎn)生后,將這個會話交給線程處理,然后主程序繼續(xù)監(jiān)聽。while (true) accept a connection ; create a thread to deal with the client ; end while Serverclient1client2serverthread2serverthread1Java網(wǎng)絡(luò)程序設(shè)計55此外此外:服務(wù)器應(yīng)能支持客戶間的通信服務(wù)器應(yīng)能支持客戶間的通信n可以在服務(wù)器端將與各客戶進(jìn)行通信的Socket和線程管理起來,從而各客戶之間可以在服務(wù)器端的協(xié)助下進(jìn)行通信。服務(wù)器服務(wù)器(4444

60、)acceptsocket客客戶戶2IP1 client1線程線程1客客戶戶1IP2 client2線程線程2Java網(wǎng)絡(luò)程序設(shè)計56【例12.6】多線程的TCP服務(wù)器程序。服務(wù)器端的部分運行結(jié)果如圖12.3所示。Java網(wǎng)絡(luò)程序設(shè)計5712.4 數(shù)據(jù)報通信數(shù)據(jù)報通信n用戶數(shù)據(jù)報協(xié)議用戶數(shù)據(jù)報協(xié)議UDP是傳輸層的是傳輸層的無連接無連接通信協(xié)議。通信協(xié)議。數(shù)據(jù)報是一種在網(wǎng)絡(luò)中獨立傳播的自身包含地址信息數(shù)據(jù)報是一種在網(wǎng)絡(luò)中獨立傳播的自身包含地址信息的消息,它能否到達(dá)目的地、到達(dá)的時間以及到達(dá)時的消息,它能否到達(dá)目的地、到達(dá)的時間以及到達(dá)時內(nèi)容能否保持不變,這些都是不能保證的。由于內(nèi)容能否保持不變,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論