第9章 網(wǎng)絡多媒體應用_第1頁
第9章 網(wǎng)絡多媒體應用_第2頁
第9章 網(wǎng)絡多媒體應用_第3頁
第9章 網(wǎng)絡多媒體應用_第4頁
第9章 網(wǎng)絡多媒體應用_第5頁
已閱讀5頁,還剩30頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1 第九章第九章 網(wǎng)網(wǎng)絡絡多媒體多媒體應應用用 9 1 網(wǎng)網(wǎng)絡編絡編程基程基礎(chǔ)礎(chǔ) URL 編編程和程和 Socket 編編程程 9 1 1 URL 編編程程 URL Uniform Resource Locator 統(tǒng)統(tǒng)一一資資源定位器源定位器 用于表示用于表示 Internet 上上資資源源 的地址的地址 即網(wǎng)即網(wǎng)絡絡上數(shù)據(jù)的位置上數(shù)據(jù)的位置 資資源源為為文件文件 目目錄錄 對對象的引用象的引用 利用利用 URL 的表示的表示 和建立和建立 Java 程序可直接程序可直接讀讀入網(wǎng)入網(wǎng)絡絡上的數(shù)據(jù)上的數(shù)據(jù) 或把數(shù)據(jù)或把數(shù)據(jù)傳傳送到網(wǎng)送到網(wǎng)絡絡的另一端的另一端 J 包定包定義義了了對應對應的的 URL 類類 其常用其常用 4 個構(gòu)造方法如下個構(gòu)造方法如下 1 public URL String spec 這這個構(gòu)造方法用指定的個構(gòu)造方法用指定的 URL 來來創(chuàng)創(chuàng)建建 URL 對對象象 參參 數(shù)數(shù)為為 URL 的的 IP 地址和文件地址和文件 如如 try URL u1 new URL catch Malformed URLException e 2 public URL URL context String spec 該該構(gòu)造方法用已存在的構(gòu)造方法用已存在的 URL 對對象象 的的 context 創(chuàng)創(chuàng)建建 URL 對對象例如象例如 try URL u2 new URL u1 welcome html catch Malformed URLException e 3 public URL String protocol String host String file 該該構(gòu)造方法用指定的構(gòu)造方法用指定的 協(xié)議協(xié)議 主機名主機名 路路經(jīng)經(jīng)及文件名及文件名創(chuàng)創(chuàng)建的建的 URL 對對象例如象例如 try URL u3 new URL http index html catch Malformed URLException e 4 public URL String protocol String host int port String file 該該構(gòu)造方法用構(gòu)造方法用 指定的指定的協(xié)議協(xié)議 主機名主機名 端口號端口號 文件路文件路經(jīng)經(jīng)及文件名及文件名創(chuàng)創(chuàng)建的一個建的一個 URL 對對象例如象例如 try URL u3 new URL http 8080 index html catch Malformed URLException e 使用使用 URL 類類的的 openStream 方法可以方法可以連連接和接和獲獲取取 URL 對對象的內(nèi)容象的內(nèi)容 即返回一即返回一 個個輸輸入流入流對對象象讀讀 URL 數(shù)據(jù)數(shù)據(jù) 方法格式方法格式為為 2 public final InputStream openStream throws IOException URL 類類的常用方法的常用方法 public final Object getContent 取的取的傳輸協(xié)義傳輸協(xié)義 public String getFile 取的取的資資源文件名源文件名 public String getHost 取的主機名取的主機名 public String getPort 取的端口號取的端口號 public String getProtocol 取的取的傳輸協(xié)義傳輸協(xié)義 public String toString 用于把用于把 URL 轉(zhuǎn)轉(zhuǎn)化化為為字符串字符串 例例 URL 編編程程讀讀取取 yahoo 站點地址的內(nèi)容站點地址的內(nèi)容 import java io import class URLReader public static void main String args try 用指定的用指定的 URL 來來創(chuàng)創(chuàng)建建 URL 對對象象 URL tirc new URL 創(chuàng)創(chuàng)建建緩緩沖區(qū)沖區(qū)輸輸入流入流 BufferedReader in new BufferedReader new InputStreamReader tirc openStream String s 接收數(shù)據(jù)的字符串接收數(shù)據(jù)的字符串變變量量 s while s in readLine null System out println s in close 關(guān)關(guān)閉閉 BufferedReader 輸輸入流入流 catch MalformedURLException e 捕捉捕捉 URL 缺陷異常缺陷異常 System out println e 輸輸出缺陷異常信息出缺陷異常信息 catch IOException e 捕捉捕捉 I O 異常異常 System out println e tirc openStream 用用創(chuàng)創(chuàng)建建 URL 對對象象 tirc 的的 openStream 方法建立到當前方法建立到當前 3 URL 的的連連接并返回一個從接并返回一個從該連該連接地址接地址讀讀取數(shù)據(jù)的取數(shù)據(jù)的輸輸入流入流對對 象象 InputStreamReader InputStream in 從字從字節(jié)節(jié)流到字符流的流到字符流的橋橋梁梁 它它讀讀取字取字節(jié)節(jié)流流 并并轉(zhuǎn)為轉(zhuǎn)為字符流字符流 in 一個一個輸輸入流由入流由 tirc openStream 代表代表輸輸入流入流 并用并用 new 創(chuàng)創(chuàng)建字建字 節(jié)節(jié)流流轉(zhuǎn)為轉(zhuǎn)為字符流字符流對對象象 BufferedReader Reader in int sz 構(gòu)造方法參數(shù)構(gòu)造方法參數(shù) in 閱讀閱讀器器 sz 輸輸入入緩緩沖區(qū)大沖區(qū)大 小小 本例本例創(chuàng)創(chuàng)建一個建一個緩緩沖字符沖字符輸輸入流入流對對象象 用用 in 引用它引用它 輸輸入入緩緩沖區(qū)大小沖區(qū)大小為為默默認認 再再 調(diào)調(diào)用它的用它的讀讀入行方法將字符流入行方法將字符流賦給賦給 存入存入 變變量量 s 中中 再再輸輸出字符流出字符流 9 1 2 Socket 編編程程 套接字套接字 Socket 是由伯克利大學首是由伯克利大學首創(chuàng)創(chuàng)的的 它允它允許許程序把網(wǎng)程序把網(wǎng)絡連絡連接當成一個流接當成一個流 可以可以 在在這這個流中個流中讀讀取字取字節(jié)節(jié) 包中定包中定義義的兩個的兩個類類 Socket Client 端套接字端套接字 和和 ServerSocket Server 端套接字端套接字 分分別別用用 java 的流模型技的流模型技術(shù)術(shù)來來實現(xiàn)實現(xiàn)客客戶戶端和服端和服務務 器端或兩臺器端或兩臺計計算機之算機之間間的網(wǎng)的網(wǎng)絡絡通信通信 當套接字當套接字連連接建立后接建立后 也就是一條通信也就是一條通信線線路被路被 建立起來了建立起來了 Socket 通信模型如下通信模型如下圖圖 4 輸入流 客戶端 Socket 輸出流 輸出流 輸入流 服務器端 Socket 互相連接 互相連接 套接字能套接字能執(zhí)執(zhí)行行 7 種基本操作種基本操作 1 連連接到接到遠遠程程計計算機算機 2 綁綁定到端口定到端口 3 接收從接收從遠遠程程計計算機來的算機來的綁綁定端口上的定端口上的連連接接 4 監(jiān)監(jiān)聽到達的數(shù)據(jù)聽到達的數(shù)據(jù) 5 發(fā)發(fā)送數(shù)據(jù)送數(shù)據(jù) 6 接收數(shù)據(jù)接收數(shù)據(jù) 7 關(guān)關(guān)閉連閉連接接 客客戶戶端端 常用套接字常用套接字 Socket 類類構(gòu)造方法構(gòu)造方法 1 public Socket String host int port throws unknownHostException IOException 建立一個建立一個 IP 地址代表的服地址代表的服務務器主機器主機 host 端口號端口號為為 port 的套接字的套接字 0 1023 為為通信口通信口 一般用一般用 1024 65535 口口 連連接到服接到服務務器上器上 例如例如 Try Socket soc new Socket 80 發(fā)發(fā)送數(shù)據(jù)送數(shù)據(jù) http 占用占用 80 口口 catch unknownHostException uex catch IOException e 2 Socket 類類常用方法常用方法 5 1 public InetAddress getInetAddress 調(diào)調(diào)用用 Socket 對對象的象的 getInetAddress 方法方法 返回返回連連接到接到遠遠程主機的程主機的 IP 地址地址 如果如果連連接失接失敗敗 則則返回返回 以前以前連連接的主機接的主機 例如例如 Try Socket soc new Socket 80 InetAddress host soc getInetAddress catch unknownHostException uex catch IOException e 2 public int getPort 返回返回 Socket 連連接到接到遠遠程主機的端口號程主機的端口號 例如例如 try Socket socket new Socket 80 int port socket getPort catch unknownHostException uex catch IOException e 3 public int getLocalPort 一個一個 Socket 連連接兩個接兩個終終端端 返回本地返回本地連連接接終終 端的端口號端的端口號 4 public InetAddress getLocalAddress 返回用返回用戶戶 Socket 綁綁定在網(wǎng)定在網(wǎng)絡絡 哪個接口地址哪個接口地址 5 public OutputStream getOutputStream throws IOException 返回一返回一 個原始的個原始的輸輸出流出流 6 public InputStream getInputStream throws IOException 返回一個返回一個 輸輸入出流入出流 服服務務器端構(gòu)造方法器端構(gòu)造方法 1 public ServerSocket int port throws IOException BindException 建建 立一個立一個綁綁定在定在 端口號端口號為為 port 的服的服務務器套接字器套接字對對象象 網(wǎng)網(wǎng)絡編絡編程程 4 個步個步驟驟 1 創(chuàng)創(chuàng)建建 Socket 2 打開打開連連接到接到 Socket 的的輸輸入入 輸輸出流出流 3 按照一定的按照一定的協(xié)議對協(xié)議對 Socket 進進行行讀讀寫操作寫操作 4 關(guān)關(guān)閉閉 Socket 6 j3 35 java 1 服服務務器端程序器端程序 在在 DOS 下先下先執(zhí)執(zhí)行行 import import java io class TestServer public static void main String args try 創(chuàng)創(chuàng)建服建服務務器套接字器套接字對對象 運行在服象 運行在服務務器器 8888 端口上端口上 ServerSocket s new ServerSocket 8888 while true ServerSocket 對對象象調(diào)調(diào)用用 accept 方法在指定方法在指定 8888 端口上端口上監(jiān)監(jiān)聽客聽客戶戶端到來的端到來的連連 接 接 這這個端口個端口讓讓客客戶戶端程序端程序連連接 接 Socket s1 s accept 監(jiān)監(jiān)聽器通聽器通過過 getOutputStream 方法方法獲獲得返回一個原始的得返回一個原始的輸輸出流出流 OutputStream os s1 getOutputStream 包含包含輸輸出流出流創(chuàng)創(chuàng)建數(shù)據(jù)建數(shù)據(jù)輸輸出字出字節(jié)節(jié)流流對對象象 DataOutputStream dos new DataOutputStream os 以以 UTF 編碼編碼格式格式 寫出寫出 返回返回連連接的接的遠遠程主機程主機 客客戶戶端端 的地址的地址 和客和客戶戶端端發(fā)發(fā)出出請請 求的端口號求的端口號 1032 dos writeUTF Hello s1 getInetAddress port s1 getPort nbye dos close 關(guān)關(guān)閉輸閉輸出字出字節(jié)節(jié)流流對對象象 s1 close 關(guān)關(guān)閉閉服服務務器套接字器套接字對對象象 catch IOException e System out println 程序運行出程序運行出錯錯 e j3 36 java 2 客客戶戶端程序端程序 使用使用 JCreator 執(zhí)執(zhí)行行 import import java io 7 class TestClient public static void main String args try 創(chuàng)創(chuàng)建客建客戶戶端套接字端套接字對對象象實現(xiàn)實現(xiàn)與本地服與本地服務務器器 IP 地址地址 127 0 0 1 連連接服接服務務器端器端 口口 8888 Socket s1 new Socket 127 0 0 1 8888 套接字套接字對對象通象通過過 getInputStream 方法方法獲獲得一個得一個輸輸入流入流讀讀取服取服務務器放入器放入 線線路路 輸輸出流出流 的數(shù)據(jù)的數(shù)據(jù) InputStream is s1 getInputStream 包含字包含字節(jié)輸節(jié)輸入流入流創(chuàng)創(chuàng)建數(shù)據(jù)建數(shù)據(jù)輸輸入字入字節(jié)節(jié)流流對對象象 DataInputStream dis new DataInputStream is 數(shù)據(jù)數(shù)據(jù)輸輸入流入流對對象以象以 UTF 編碼編碼格式格式讀讀入服入服務務器器發(fā)發(fā)出的出的輸輸出流數(shù)據(jù)并在客出流數(shù)據(jù)并在客戶戶端端 顯顯示示 System out println dis readUTF dis close 關(guān)關(guān)閉輸閉輸入字入字節(jié)節(jié)流流對對象象 s1 close 關(guān)關(guān)閉閉 Socket catch ConnectException connExc System err println 服服務務器器連連接失接失敗敗 catch IOException e 例例 11 5 Client java 8 1 客客戶戶端程序 端程序 import java io import public class Client public static void main String args String s null Socket mysocket DataInputStream in null 聲明數(shù)據(jù)聲明數(shù)據(jù)輸輸入流入流對對象象 DataOutputStream out null 聲明數(shù)據(jù)聲明數(shù)據(jù)輸輸出流出流對對象象 try mysocket new Socket 127 0 0 1 4331 聲明客聲明客戶戶端套接字端套接字對對象象 連連 接服接服務務器通信端口器通信端口為為 4331 創(chuàng)創(chuàng)建客建客戶戶端數(shù)據(jù)端數(shù)據(jù)輸輸入流入流對對象象讀讀取服取服務務器端器端輸輸出流出流 in new DataInputStream mysocket getInputStream 創(chuàng)創(chuàng)建客建客戶戶端數(shù)據(jù)端數(shù)據(jù)輸輸出流出流對對象放入服象放入服務務器端器端線線路路輸輸入流中入流中 out new DataOutputStream mysocket getOutputStream for int k 1 k 100 k k 2 out writeUTF k 向服向服務務器端器端發(fā)發(fā)送奇數(shù)送奇數(shù) s in readUTF in 讀讀取服取服務務器端器端輸輸出流出流發(fā)發(fā)來的信息 堵塞來的信息 堵塞 狀狀態(tài)態(tài) System out println 客客戶戶收到收到 s 輸輸出服出服務務器端器端發(fā)發(fā)來來 的信息的信息 Thread sleep 500 catch Exception e System out println 服服務務器已斷開器已斷開 e 例例 11 5 Server java 9 2 服服務務器端程序器端程序 import java io import public class Server public static void main String args ServerSocket server null 聲明服聲明服務務器套接字器套接字對對象象 Socket you null 聲明聲明連連接客接客戶戶端端監(jiān)監(jiān)聽器聽器對對象引用象引用變變量量 String s null 聲明接收客聲明接收客戶戶端端輸輸入流數(shù)據(jù)字符串入流數(shù)據(jù)字符串 DataOutputStream out null 聲明聲明輸輸出流出流對對象象 DataInputStream in null 聲明聲明輸輸入流入流對對象象 try server new ServerSocket 4331 創(chuàng)創(chuàng)建服建服務務器套接字器套接字對對象 使用服象 使用服務務 器器 4331 端口端口 catch IOException e1 System out println e1 try System out println 等待客等待客戶戶呼叫呼叫 you server accept 堵塞狀堵塞狀態(tài)態(tài)等待客等待客戶戶呼叫 除非有客呼叫 除非有客戶戶呼叫 取呼叫 取 的客的客戶戶端端連連接 接 out new DataOutputStream you getOutputStream 包含客包含客戶戶端端 連連接接輸輸出流出流創(chuàng)創(chuàng)建建輸輸出流出流對對象象 in new DataInputStream you getInputStream 包含客包含客戶戶端端連連接接 輸輸入流入流創(chuàng)創(chuàng)建建輸輸入流入流對對象象 while true s in readUTF in 讀讀取客取客戶輸戶輸出流放入出流放入 線線路路 里的奇數(shù)信息 里的奇數(shù)信息 堵塞狀堵塞狀態(tài)態(tài) int m Integer parseInt s 轉(zhuǎn)換為轉(zhuǎn)換為整數(shù)整數(shù)賦給變賦給變量量 m 10 out writeUTF 你好你好 我是服我是服務務器器 服服務務器端將器端將 2 m 后放入后放入輸輸出流由客出流由客戶戶端端輸輸入流入流讀讀取取 out writeUTF 你你說說的數(shù)是乘的數(shù)是乘 2 后是后是 2 m System out println 服服務務器收到器收到 s 服服務務器端器端輸輸出收到客出收到客戶戶 端的奇數(shù)信息端的奇數(shù)信息 Thread sleep 500 catch Exception e System out println 客客戶戶已斷開已斷開 e 例例 11 6 1 Client1 java 客客戶戶端程序 端程序 import import java io import java awt import java awt event import javax swing public class Client1 public static void main String args new ComputerClient 創(chuàng)創(chuàng)建建計計算三角形面算三角形面積積窗口窗口對對象象 定定義義 ComputerClient 子子類繼類繼承窗口承窗口類類 實現(xiàn)實現(xiàn) Runnable ActionListener 接口接口 class ComputerClient extends Frame implements Runnable ActionListener Button connection send 聲明聲明連連接和接和發(fā)發(fā)送按送按鈕對鈕對象象 TextField inputText showResult 聲明聲明 2 個文本框個文本框?qū)ο笥脕硐笥脕磔斴斎肴侨肴?形三形三邊長邊長和和顯顯示面示面積結(jié)積結(jié)果果 Socket socket null 聲明客聲明客戶戶端端 Socket 對對象象 DataInputStream in null 聲明聲明 DataInputStream 對對象象 DataOutputStream out null 聲明聲明 DataOutputStream 對對象象 Thread thread 聲明聲明 Thread 對對象象 ComputerClient 構(gòu)造函數(shù)構(gòu)造函數(shù) socket new Socket 創(chuàng)創(chuàng)建客建客戶戶端端 Socket 對對象象 setLayout new FlowLayout 設設置窗口置窗口為為流布局流布局 Box box Box createVerticalBox 創(chuàng)創(chuàng)建立式盒式容器建立式盒式容器對對象象 connection new Button 連連接服接服務務器器 創(chuàng)創(chuàng)建建連連接和接和發(fā)發(fā)送按送按鈕對鈕對象象 11 send new Button 發(fā)發(fā)送送 send setEnabled false 設設置置發(fā)發(fā)送按送按鈕對鈕對象不可用象不可用 inputText new TextField 12 創(chuàng)創(chuàng)建建 2 個文本框個文本框?qū)ο笙?showResult new TextField 12 box add connection 將將連連接按接按鈕鈕添加到盒式容器中添加到盒式容器中 box add new Label 輸輸入三角形三入三角形三邊邊的的長長度度 用逗號或空格分隔用逗號或空格分隔 添加添加標簽標簽到盒式容器中到盒式容器中 box add inputText 添加添加輸輸入文本框到盒式容器中入文本框到盒式容器中 box add send 添加添加發(fā)發(fā)送按送按鈕對鈕對象到盒式容器中象到盒式容器中 box add new Label 收到的收到的結(jié)結(jié)果 果 添加添加標簽標簽到盒式容器中到盒式容器中 box add showResult 添加添加顯顯示文本框到盒式容器中示文本框到盒式容器中 connection addActionListener this 注冊注冊連連接和接和發(fā)發(fā)送按送按鈕監(jiān)鈕監(jiān)聽器聽器 send addActionListener this thread new Thread this 創(chuàng)創(chuàng)建建線線程程對對象象 add box 添加盒式容器到窗體容器中添加盒式容器到窗體容器中 setBounds 10 30 300 400 設設置窗體在屏幕中的大小和置窗體在屏幕中的大小和顯顯示位置示位置 setVisible true 設設置置組組件可件可見見 validate addWindowListener new WindowAdapter 包含適配器注冊窗包含適配器注冊窗 口口監(jiān)監(jiān)聽器聽器 public void windowClosing WindowEvent e System exit 0 public void actionPerformed ActionEvent e if e getSource connection 如果事件源來自如果事件源來自連連接按接按鈕鈕 try 請請求和服求和服務務器建立套接字器建立套接字連連接 接 if socket isConnected 如果和服如果和服務務器器連連接接為為真就不需建立套真就不需建立套 接字接字連連接接 else 否否則則就和服就和服務務器建立套接字器建立套接字連連接接 InetAddress address InetAddress getByName 127 0 0 1 取得客取得客戶戶端端 IP 地址地址 創(chuàng)創(chuàng)建建 InetSocketAddress 對對象象 InetSocketAddress socketAddress new InetSocketAddress address 4331 socket connect socketAddress 和服和服務務器建立套接字器建立套接字連連 接接 包含套接字包含套接字輸輸入流入流對對象象創(chuàng)創(chuàng)建客建客戶戶端數(shù)據(jù)端數(shù)據(jù)輸輸入流入流對對象象 in new DataInputStream socket getInputStream 包含套接字包含套接字輸輸出流出流對對象象創(chuàng)創(chuàng)建客建客戶戶端數(shù)據(jù)端數(shù)據(jù)輸輸出流出流對對象象 out new DataOutputStream socket getOutputStream send setEnabled true 和服和服務務器器連連接成功后接成功后設設置置發(fā)發(fā)送按送按 鈕鈕可用可用 thread start 啟啟動線動線程程調(diào)調(diào)用用 run 方法運行方法運行線線程體程體 catch IOException ee 12 if e getSource send 如果事件源來自如果事件源來自發(fā)發(fā)送按送按鈕鈕 String s inputText getText 取得文本框的內(nèi)容取得文本框的內(nèi)容 if s null 如果文本內(nèi)容不如果文本內(nèi)容不為為空空 try out writeUTF s 將內(nèi)容數(shù)據(jù)寫入流送到服將內(nèi)容數(shù)據(jù)寫入流送到服務務器器 由服由服 務務器器輸輸入流取得數(shù)據(jù)入流取得數(shù)據(jù) catch IOException e1 public void run 運行運行線線程體程體 String s null while true try s in readUTF 讀讀服服務務器器輸輸出流返回的數(shù)據(jù)出流返回的數(shù)據(jù) showResult setText s 讀讀回的服回的服務務器數(shù)據(jù)在文本框器數(shù)據(jù)在文本框 中中顯顯示出來示出來 catch IOException e showResult setText 與服與服務務器已斷開器已斷開 break 例例 11 6 2 Server1 java 服服務務器端程序器端程序 import java io import import java util public class Server1 public static void main String args ServerSocket server null Server thread thread Socket you null while true try server new ServerSocket 4331 創(chuàng)創(chuàng)建服建服務務器套接字器套接字對對 象象 catch IOException e1 System out println 正在正在監(jiān)監(jiān)聽聽 ServerSocket 對對象不能象不能 重復重復創(chuàng)創(chuàng)建建 13 try System out println 等待客等待客戶戶呼叫呼叫 you server accept 接受客接受客戶戶端的套接字端的套接字連連接呼叫接呼叫 System out println 客客戶戶的地址的地址 you getInetAddress 取得客取得客戶戶端端 IP 地址地址 catch IOException e System out println 正在等待客正在等待客戶戶 if you null 如果如果連連接接請請求求對對象不象不為為空空 new Server thread you start 為為每個客每個客戶戶啟啟動動一個一個專門專門 的的線線程程 class Server thread extends Thread Socket socket DataOutputStream out null DataInputStream in null String s null boolean quesion false Server thread Socket t 構(gòu)造函數(shù)構(gòu)造函數(shù) socket t try 包含套接字包含套接字輸輸出流出流創(chuàng)創(chuàng)建服建服務務器端數(shù)據(jù)器端數(shù)據(jù)輸輸出流出流對對象象 out new DataOutputStream socket getOutputStream 包含套接字包含套接字輸輸入流入流創(chuàng)創(chuàng)建服建服務務器端器端輸輸入流入流對對象象 in new DataInputStream socket getInputStream catch IOException e public void run 運行運行線線程體程體 while true double a new double 3 創(chuàng)創(chuàng)建建 3 個個長長度的度的實實數(shù)數(shù)數(shù)數(shù)組組接收客接收客戶戶 端的端的 3 個個邊長邊長數(shù)據(jù)數(shù)據(jù) int i 0 try s in readUTF 堵塞狀堵塞狀態(tài)態(tài) 除非 除非讀讀取到信息取到信息 從客從客戶戶端端輸輸 出流接收數(shù)據(jù)出流接收數(shù)據(jù) quesion false 先將先將問題標識設為問題標識設為 false 從客從客戶戶端端讀讀取的取的 數(shù)據(jù)格式正確數(shù)據(jù)格式正確 StringTokenizer fenxi new StringTokenizer s 創(chuàng)創(chuàng)建建 字符分隔解析器字符分隔解析器對對象象 while fenxi hasMoreTokens 還還有逗號分隔符有逗號分隔符時時 String temp fenxi nextToken 取出逗號分隔符取出逗號分隔符 前的字符串前的字符串 將數(shù)字字符串將數(shù)字字符串轉(zhuǎn)換為轉(zhuǎn)換為雙精度數(shù)并存入數(shù)雙精度數(shù)并存入數(shù)組組 14 try a i Double valueOf temp doubleValue i catch NumberFormatException e 捕捉數(shù)據(jù)格式捕捉數(shù)據(jù)格式 輸輸入不正確異常入不正確異常 out writeUTF 請輸請輸入數(shù)字字符入數(shù)字字符 將提示信息將提示信息 送到客送到客戶戶端端 quesion true 將將問題標識設為問題標識設為 true 表示數(shù)據(jù)表示數(shù)據(jù) 格式不正確格式不正確 if quesion false 如果數(shù)據(jù)格式正確如果數(shù)據(jù)格式正確 double p a 0 a 1 a 2 2 0 從數(shù)從數(shù)組組中取的三角形中取的三角形 三個三個邊長邊長相加除相加除 2 將三角形面將三角形面積為積為數(shù)據(jù)送到客數(shù)據(jù)送到客戶戶端端 out writeUTF Math sqrt p p a 0 p a 1 p a 2 catch IOException e System out println 客客戶戶離開離開 return 15 例例 10 2 采用采用 TCP Socket 通信通信實現(xiàn)實現(xiàn)的點的點對對點聊天點聊天 1 ChatTCPServer java 服服務務端程序端程序 先運行先運行 import import java io import Chat ChatTCPSocketJFrame public class ChatTCPServer public ChatTCPServer int port String name throws IOException 構(gòu)造函構(gòu)造函 數(shù)數(shù)約約定端口定端口 2001 網(wǎng)名花仙子 網(wǎng)名花仙子 本機本機 IP 地址和指定端口構(gòu)成服地址和指定端口構(gòu)成服務務端的端的 Socket ServerSocket server new ServerSocket port 創(chuàng)創(chuàng)建建 ServerSocket 提供提供 TCP 連連接服接服務務 Socket client server accept 等待接收客等待接收客戶戶端的端的連連接接 申申請請 new ChatTCPSocketJFrame name client 服服務務端的聊天室 端的聊天室 圖圖形用形用 戶戶界面同客界面同客戶戶端端 server close public static void main String args throws IOException new ChatTCPServer 2001 花仙子花仙子 啟啟動動服服務務端 端 約約定端口定端口 16 2001 指定網(wǎng)名花仙子 指定網(wǎng)名花仙子 2 ChatTCPSocketJFrame java 客客戶戶端程序及聊天室的端程序及聊天室的圖圖形用形用戶戶界面界面 package Chat import java awt event import javax swing import java io import InetAddress import Socket public class ChatTCPSocketJFrame extends JFrame implements ActionListener private String name 網(wǎng)名網(wǎng)名 private Socket socket TCP Socket 對對象象 private JTextArea text receiver 顯顯示示對話對話內(nèi)容的文本區(qū)內(nèi)容的文本區(qū) private JTextField text sender 輸輸入入發(fā)發(fā)送內(nèi)容的文本行送內(nèi)容的文本行 private JButton button send button leave 發(fā)發(fā)送和離送和離線線按按鈕鈕 private PrintWriter cout 字符字符輸輸出流出流對對象象 提供提供圖圖形用形用戶戶界面界面 public ChatTCPSocketJFrame String name Socket socket throws IOException 17 super 聊天室聊天室 name InetAddress getLocalHost socket getLocalPort this setBounds 320 240 400 240 this setDefaultCloseOperation EXIT ON CLOSE this text receiver new JTextArea this text receiver setEditable false 文本區(qū)不可文本區(qū)不可編輯編輯 this getContentPane add new JScrollPane this text receiver JPanel panel new JPanel this getContentPane add panel South this text sender new JTextField 16 panel add this text sender button send new JButton 發(fā)發(fā)送送 panel add button send button send addActionListener this button leave new JButton 離離線線 panel add button leave button leave addActionListener this this setVisible true this name name this socket socket 獲獲得客得客戶戶端端 Socket 對對象的象的輸輸出流 立即出流 立即 flush this cout new PrintWriter socket getOutputStream true this cout println name 發(fā)發(fā)送自己網(wǎng)名送自己網(wǎng)名給對給對方方 獲獲得服得服務務端端 Socket 對對象的象的輸輸入流 入流 創(chuàng)創(chuàng)建字符建字符輸輸入流入流 BufferedReader cin new BufferedReader new InputStreamReader socket getInputStream String aline cin readLine 接收到接收到對對方網(wǎng)名方網(wǎng)名 text receiver append 連連接接 aline 成功成功 r n 顯顯示示對對方方發(fā)發(fā) 來的內(nèi)容 來的內(nèi)容 aline cin readLine 18 while aline null 顯顯示示對對方方發(fā)發(fā)來的內(nèi)容來的內(nèi)容 aline cin readLine cin close cout close 關(guān)關(guān)閉輸閉輸出流出流對對象象 socket close 關(guān)關(guān)閉閉 Socket 連連接接 button send setEnabled false button leave setEnabled false 客客戶戶端端 public ChatTCPSocketJFrame String name String host int port throws IOException 客客戶戶端向指定主機的端口端向指定主機的端口發(fā)發(fā)出出 TCP 連連接接請請求求 this name new Socket host port public void actionPerformed ActionEvent e if e getSource button send 發(fā)發(fā)送按送按鈕鈕 this cout println name 說說 text sender getText 通通過過流流 發(fā)發(fā)送送給對給對方方 text receiver append 我我說說 text sender getText n text sender setText if e getSource button leave 離離線線 19 text receiver append 我離我離線線 n this cout println name 離離線線 n bye 發(fā)發(fā)送送給對給對方離方離線約線約定定 button send setEnabled false button leave setEnabled false public static void main String args throws IOException new ChatTCPSocketJFrame 小蜜蜂小蜜蜂 127 0 0 1 2001 創(chuàng)創(chuàng)建客建客戶戶 端聊天室窗口端聊天室窗口 9 2 Applet 編編程基程基礎(chǔ)礎(chǔ) Applet 小程序是從它的初始化小程序是從它的初始化 init 方法作方法作為為程序切入點開始的程序切入點開始的 Applet 小程序小程序 需在需在 HTML Hypertext Markup Language 超文本超文本標記語標記語言言 中中調(diào)調(diào)用加用加載載它的字它的字 節(jié)碼節(jié)碼 class 文件運行文件運行 還還可以在可以在 HTML 中向中向 Applet 傳遞傳遞參數(shù)參數(shù) Applet 類類是容器是容器 默默認認布局布局為為 FlowLayout Applet 的生命周期 的生命周期 Apple 類類有四種基方法控制其運行狀有四種基方法控制其運行狀態(tài)態(tài) init 方法方法 start 方法方法 stop 方法方法 20 destroy 方法方法 瀏覽瀏覽器在器在調(diào)調(diào)用運行用運行 Applet 時時 將自將自動調(diào)動調(diào)用用這這四個方法四個方法 一個一個 Applet 的生命周期是由初始化的生命周期是由初始化 開始運行開始運行 停止運行停止運行 撤消清理撤消清理這這四個四個過過程構(gòu)成程構(gòu)成 一個一個 Applet 的生命周期與的生命周期與 Web 頁頁面有關(guān)面有關(guān) 當首次加當首次加載載含有含有 Applet 的的頁頁面面時時 瀏覽瀏覽器器 調(diào)調(diào)用用 init 方法完成方法完成 Applet 的初始化的初始化 然后然后調(diào)調(diào)用用 start 方法或方法或 paint 方法啟方法啟動動程程 序或序或繪繪制制 Applet 內(nèi)容面板內(nèi)容面板 當離開當離開頁頁面面時時 瀏覽瀏覽器器調(diào)調(diào)用用 stop 方法停止小程序運方法停止小程序運 行行 若關(guān)若關(guān)閉瀏覽閉瀏覽器將使器將使 Applet 停止運行停止運行 瀏覽瀏覽器器調(diào)調(diào)用用 destroy 方法方法終終止并止并釋釋放小放小 程序所占內(nèi)存程序所占內(nèi)存資資源源 只要不關(guān)只要不關(guān)閉瀏覽閉瀏覽器器 重新加重新加載頁載頁面面 瀏覽瀏覽器器則則只只調(diào)調(diào)用用 paint 方方 法或法或 start 方法重新方法重新繪繪制并運行小程序制并運行小程序 Applet 類類是所有是所有 Applet 應應用的基用的基類類 所有 所有 java 小程序都必小程序都必須繼須繼承承該類該類 Applet 類類的構(gòu)造函數(shù)只有一種 的構(gòu)造函數(shù)只有一種 public Applet 其常用方法如下 其常用方法如下 public final void setStub Applet Stubstub 設設置置 Applet 的的 stub stub 是是 Java 和和 C 之之間轉(zhuǎn)換間轉(zhuǎn)換參數(shù)并返回的代參數(shù)并返回的代碼為碼為 由系 由系統(tǒng)統(tǒng)自自動設動設定 定 public Boolean isActive 判斷判斷 Applet 是否是否處處于活于活動動狀狀態(tài)態(tài) public URL getDocumentBase 取得嵌入取得嵌入 Applet 程序的程序的 HTML 文件文件 URL public URL getCodeBase 取得取得 Applet class 程序文件的程序文件的 URL public String getParameter 取得取得 Applet 由參數(shù)名由參數(shù)名 name 指定的參數(shù)指定的參數(shù)值值 public AppletContext get AppletContext 返回返回瀏覽瀏覽器或器或 Applet 運行運行環(huán)環(huán)境 境 public void resize int width int height 調(diào)調(diào)整整 Applet 運行的窗口尺寸 運行的窗口尺寸 public void resize Dimension d 調(diào)調(diào)整整 Applet 運行的窗口尺寸 運行的窗口尺寸 public void showStatus String msg 在在瀏覽瀏覽器狀器狀態(tài)欄態(tài)欄中中顯顯示指定信息 示指定信息 public Image getImage URL url 按按 URL 指定的地址裝指定的地址裝載圖載圖像 像 21 public Image getImage URL url String name 按按 URL 指定的地址和文件名指定的地址和文件名 加加載圖載圖像 像 public AudioClipgetAudioClip URL url 按按 URL 指定的地址指定的地址獲獲取聲音文件 取聲音文件 public AudioClipgetAudioClip URL url String name 按按 URL 指定的地址指定的地址 和文件名和文件名獲獲取聲音文件 取聲音文件 public String getAppletInfo 返回返回 Applet 基本信息 基本信息 public String getParameterInfo 返回描述返回描述 Applet 參數(shù)的字符串數(shù)參數(shù)的字符串數(shù)組組 參 參 數(shù)名 數(shù)名 值值 參數(shù) 參數(shù)說說明 明 public void play URL url 按按 URL 指定的音指定的音頻頻剪剪輯輯加加載載并播并播發(fā)發(fā) public void destroy 釋釋放放 Applet 所占所占資資源 源 Applet 在在 HTML web 頁頁面面 中加中加載載格式 格式 applet code class width 300 height 300 codebase codebaseURL alt alternateText align alignment vspace pixels hspace pixels name appletInstanceName 例例 12 1 Example12 1 java Java applet 運行原理運行原理 22 import java applet import java awt public class Example12 1 extends Applet Button button1 button2 int sum public void init 1 調(diào)調(diào)用用 init 方法初始化方法初始化 Applet setBackground Col

溫馨提示

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

最新文檔

評論

0/150

提交評論