freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

java語(yǔ)言程序設(shè)計(jì)基礎(chǔ)教程(下)ppt-文庫(kù)吧

2025-09-19 14:50 本頁(yè)面


【正文】 + ())。 ? } ? } 程序的執(zhí)行結(jié)果如下所示: URL讀取 WWW網(wǎng)絡(luò)資源 ? 當(dāng)我們得到一個(gè) URL對(duì)象后,就可以通過(guò)它讀取指定的 WWW資源。這時(shí)我們將使用 URL的方法 openStream(),其定義為: ? InputStream openStream()。 ? 方法 openSteam()與指定的 URL建立連接并返回 InputStream類的對(duì)象,以便從這一連接中讀取數(shù)據(jù)。 【 例 102】 讀取網(wǎng)絡(luò) URL資源。 ? import 。 ? import 。 ? import 。 ? public class URLReader { ? public static void main(String[] args) throws Exception { ? // 聲明拋出所有例外 ? URL tirc = new URL( /)。 ? // 構(gòu)建一 URL對(duì)象 ? BufferedReader in = new BufferedReader(new InputStreamReader(tirc ? .openStream()))。 ? // 使用 openStream得到一輸入流并由此構(gòu)造一個(gè) BufferedReader對(duì)象 ? String inputLine。 ? while ((inputLine = ()) != null) ? // 從輸入流不斷的讀數(shù)據(jù),直到讀完為止 ? (inputLine)。 // 把讀入的數(shù)據(jù)打印到屏幕上 ? ()。 // 關(guān)閉輸入流 ? } ? } ? 程序執(zhí)行后,會(huì)根據(jù)指定的 URL地址 URL對(duì)象,然后調(diào)用此 URL對(duì)象的 openStream()方法獲取URL資源,生成 in輸入流,在 while循環(huán)中讀取輸入流,調(diào)用 println()方法,把讀入的數(shù)據(jù)流打印到屏幕上。在這個(gè)例子中,就是把 URL資源對(duì)應(yīng)的頁(yè)面文件源代碼輸出到屏幕上。 URLConction連接 WWW ? 通過(guò) URL的方法 openStream(),我們只能從網(wǎng)絡(luò)上讀取數(shù)據(jù),如果我們同時(shí)還想輸出數(shù)據(jù),例如向服務(wù)器端的 CGI程序發(fā)送一些數(shù)據(jù),我們必須先與 URL建立連接,然后才能對(duì)其進(jìn)行讀寫,這時(shí)就要用到類 URLConnection了。 ? 類 URLConnection也在包 ,它表示 Java程序和 URL在網(wǎng)絡(luò)上的通信連接。當(dāng)與一個(gè) URL建立連接時(shí),首先要在一個(gè) URL對(duì)象上通過(guò)方法 openConnection()生成對(duì)應(yīng)的URLConnection對(duì)象。 ? 下面的例子程序中首先生成一個(gè)指向地址 的對(duì)象,然后用openConnection()打開該 URL對(duì)象上的一個(gè)連接,返回一個(gè) URLConnection對(duì)象。如果連接過(guò)程失敗,將產(chǎn)生 IOException。 ? 【 例 104】 ? import 。 ? import 。 ? import 。 ? import 。 ? public class ep10_4 { ? public static void main(String[] args) { ? try { ? URL chinaren = new URL( ? URLConnection tc = ()。 ? } catch (MalformedURLException e) { //創(chuàng)建 URL()對(duì)象失敗 ? // … ? } catch (IOException e) { //openConnection()失敗 ? // … ? } ? } ? } ? 類 URLConnection提供了很多方法來(lái)設(shè)置或獲取連接參數(shù),程序設(shè)計(jì)時(shí)最常使用的是getInputStream()和 getOurputStream(),其定義為: ? InputSteram getInputSteram()。 ? OutputSteram getOutputStream()。 ? 通過(guò)返回的輸入 /輸出流我們可以與遠(yuǎn)程對(duì)象進(jìn)行通信。 IAdress類 ? 我們已經(jīng)學(xué)習(xí)過(guò) Inter上的主機(jī)有兩種方式表示地址: ? 域名: ? IP地址: ? IAddress類對(duì)象含有一個(gè) Inter主機(jī)的域名和 IP地址如: ? ? 域名比較容易記憶,當(dāng)我們?cè)谶B接網(wǎng)絡(luò)輸入一個(gè)主機(jī)的域名后,域名服務(wù)器( DNS)負(fù)責(zé)將域名轉(zhuǎn)換成 IP地址,這樣我們就和主機(jī)建立了連接。 1.獲取 Inter主機(jī)的地址 ? 我們可以使用 IAddress類的靜態(tài)方法getByname(String s)將一個(gè)域名或者一個(gè) IP地址傳遞給該方法的參數(shù) s,獲得一個(gè)IAdress的對(duì)象該對(duì)象就會(huì)包含如下信息: ? , ? 另外 IAddress類中含有兩個(gè)實(shí)例方法: ? public String getHostName()獲取域名 ? public String getHostAddress()獲得 IP地址 2.獲取本地主機(jī)地址 ? 使用 IAddress類的靜態(tài)方法,getLocalHost()獲得的對(duì)象中包含我們本機(jī)的域名和 IP地址。 Java網(wǎng)絡(luò)編程 ? 網(wǎng)絡(luò)上的兩個(gè)程序通過(guò)一個(gè)雙向的通訊連接實(shí)現(xiàn)數(shù)據(jù)的交換,這個(gè)雙向鏈路的一端稱為一個(gè)Socket。 Socket通常用來(lái)實(shí)現(xiàn)客戶方和服務(wù)方的連接。 Socket是 TCP/IP協(xié)議的一個(gè)十分流行的編程界面,一個(gè) Socket由一個(gè) IP地址和一個(gè)端口號(hào)唯一確定。 Socket通訊 ? 在傳統(tǒng)的 UNIX環(huán)境下可以操作 TCP/IP協(xié)議的接口不止 Socket一個(gè), Socket所支持的協(xié)議種類也不光TCP/IP一種,因此兩者之間是沒(méi)有必然聯(lián)系的。在Java環(huán)境下, Socket編程主要是指基于 TCP/IP協(xié)議的網(wǎng)絡(luò)編程。 ? 說(shuō) Socket編程是低層次網(wǎng)絡(luò)編程并不等于它功能不強(qiáng)大,恰恰相反,正因?yàn)閷哟蔚停?Socket編程比基于URL的網(wǎng)絡(luò)編程提供了更強(qiáng)大的功能和更靈活的控制,但是卻要更復(fù)雜一些。由于 Java本身的特殊性,Socket編程在 Java中可能已經(jīng)是層次最低的網(wǎng)絡(luò)編程接口,在 Java中要直接操作協(xié)議中更低的層次,需要使用 Java的本地方法調(diào)用( JNI),在這里就不予討論了。 Socket通訊的一般過(guò)程 ? 前面已經(jīng)提到 Socket通常用來(lái)實(shí)現(xiàn) C/S結(jié)構(gòu)。 ? 使用 Socket進(jìn)行 Client/Server程序設(shè)計(jì)的一般連接過(guò)程是這樣的: Server端 Listen(監(jiān)聽 )某個(gè)端口是否有連接請(qǐng)求, Client端向 Server端發(fā)出 Connect(連接 )請(qǐng)求, Server端向 Client端發(fā)回 Accept(接受)消息。一個(gè)連接就建立起來(lái)了。 Server端和 Client端都可以通過(guò) Send,Write等方法與對(duì)方通信。 ? 工作過(guò)程包含以下四個(gè)基本的步驟: ? ( 1) 創(chuàng)建 Socket; ? ( 2) 打開連接到 Socket的輸入 /出流; ? ( 3) 按照一定的協(xié)議對(duì) Socket進(jìn)行讀 /寫操作; ? ( 4) 關(guān)閉 Socket. ? 第三步是程序員用來(lái)調(diào)用 Socket和實(shí)現(xiàn)程序功能的關(guān)鍵步驟,其他三步在各種程序中基本相同。 ? 以上 4個(gè)步驟是針對(duì) TCP傳輸而言的,使用 UDP進(jìn)行傳輸時(shí)略有不同,在后面會(huì)有具體講解。 Socket ? java在包 Socket和ServerSocket,分別用來(lái)表示雙向連接的客戶端和服務(wù)端。這是兩個(gè)封裝得非常好的類,使用很方便。其構(gòu)造方法如下: ? Socket(IAddress address, int port)。 ? Socket(IAddress address, int port, boolean stream)。 ? Socket(String host, int prot)。 ? Socket(String host, int prot, boolean stream)。 ? Socket(SocketImpl impl) ? Socket(String host, int port, IAddress localAddr, int localPort) ? Socket(IAddress address, int port, IAddress localAddr, int localPort) ? ServerSocket(int port)。 ? ServerSocket(int port, int backlog)。 ? ServerSocket(int port, int backlog, IAddress bindAddr) ? 其中 address、 host和 port分別是雙向連接中另一方的 IP地址、主機(jī)名和端口號(hào), stream指明 socket是流 socket還是數(shù)據(jù)報(bào) socket,localPort表示本地主機(jī)的端口號(hào), localAddr和 bindAddr是本地機(jī)器的地址( ServerSocket的主機(jī)地址), impl是 socket的父類,既可以用來(lái)創(chuàng)建 serverSocket又可以用來(lái)創(chuàng)建 Socket。 count則表示服務(wù)端所能支持的最大連接數(shù)。 ? 例如: ? Socket client = new Socket(., 80)。 ? ServerSocket server = new ServerSocket(80)。 ? 注意,在選擇端口時(shí),必須小心。每一個(gè)端口提供一種特定的服務(wù),只有給出正確的端口,才能獲得相應(yīng)的服務(wù)。 0~1023的端口號(hào)為系統(tǒng)所保留,例如 服務(wù)的端口號(hào)為 80, tel服務(wù)的端口號(hào)為 21, ftp服務(wù)的端口號(hào)為 23, 所以我們?cè)谶x擇端口號(hào)時(shí),最好選擇一個(gè)大于 1023的數(shù)以防止發(fā)生沖突。 ? 在創(chuàng)建 socket時(shí)如果發(fā)生錯(cuò)誤,將產(chǎn)生 IOException,在程序中必須對(duì)之作出處理。所以在創(chuàng)建 Socket或ServerSocket是必須捕獲或拋出例外。 Socket ? 【 例 106】 一個(gè)典型的創(chuàng)建客戶端 Socket的過(guò)程。 ? import 。 ? import 。 ? public class ep10_6 { ? public static void main(String[] args) { ? try { ? Socket socket = new Socket(, 4700)。 ? // TCP/IP協(xié)議中默認(rèn)的本機(jī)地址 ? } catch (IOException e) { ? (Error: + e)。 ? } ? } ? } ? 這是最簡(jiǎn)單的在客戶端創(chuàng)建一個(gè) Socket的一個(gè)小程序段,也是使用 Socket進(jìn)行網(wǎng)絡(luò)通訊的第一步,程序相當(dāng)簡(jiǎn)單,在這里不作過(guò)多解釋了。在后面的程序中會(huì)用到該小程序段。 ServerSocket ? 【 例 107】 一個(gè)典型的創(chuàng)建 Server端 ServerSocket的過(guò)程。 ? import 。 ? import 。 ? import 。 ? public class ep10_7 { ? public static void main(String[] args) { ? ServerSocket server = null。 ? try { ? server = new ServerSocket(4700)。 ? //創(chuàng)建一個(gè) ServerSocket在端口 4700監(jiān)聽客戶請(qǐng)求 ? } catch (IOException e) { ? (can not listen to : + e)。 ? } ? Socket socket = null。 ? try { ? socket = ()。 ? //accept()是一個(gè)阻塞的方法,一旦有客戶請(qǐng)求,它就會(huì)返回一個(gè) Socket對(duì)象用于同客戶進(jìn)行交互 ? } catch (IOException e) { ? (Error: + e)。 ? } ? } ? } ? 以上的程序是 Server的典型工作模式,只不過(guò)在這里Server只能接收一個(gè)請(qǐng)求,接受完后 Server就退出了。實(shí)際的應(yīng)用中總是讓它不停的循環(huán)接收,一旦有客戶請(qǐng)求, Server總是會(huì)創(chuàng)建一個(gè)服務(wù)線程來(lái)服務(wù)新來(lái)的客戶,而自己繼續(xù)監(jiān)聽。程序中 accept()是一個(gè)阻塞函數(shù),所謂阻塞性方法就是說(shuō)該方法被調(diào)用后,將等待客戶的請(qǐng)求,直到有一個(gè)客戶啟動(dòng)并請(qǐng)求連接到相同的端口,然后 accept()返回一個(gè)對(duì)應(yīng)于客戶的socket。這時(shí),客戶方和服務(wù)方都建立了用于通信的socket,接下來(lái)就是由各個(gè) socket分別打開各自的輸入 /輸出流。 /出流 ? 類 Socket提供了方法 getInput
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1