




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、1,Java面向對象程序設計,第10章 Java網(wǎng)絡編程,2,本章主要內(nèi)容,了解常見的網(wǎng)絡協(xié)議 理解端口和套接字 掌握InetAddress類 掌握ServerSocket類 學習編寫TCP、UDP程序,3,網(wǎng)絡編程概述,網(wǎng)絡編程是指編寫程序完成兩臺或多臺計算機之間信息的通信。 計算機之間如果要通過網(wǎng)絡通信,必須遵守一定的規(guī)矩,這個規(guī)矩就是各種網(wǎng)絡協(xié)議。 最有名的協(xié)議就是TCP/IP協(xié)議。TCP協(xié)議解決了信息可靠傳輸?shù)膯栴},而IP協(xié)議解決了網(wǎng)絡計算機定位的問題。 一臺主機都需要有一個唯一的標記,即IP地址。例如:。 DNS(域名服務器)實現(xiàn)了域名與IP地址之間的映射。例如
2、:的IP地址是6。,4,使用InetAddress類實現(xiàn)網(wǎng)絡定位,演示使用InetAddress類,5,使用URL類訪問網(wǎng)絡資源,構造方法: URL(String host) URL baidu = new URL(“”); URL(URL url, String relative) URL url = new URL(baidu, “s?wd=java”) 。 URL(String protocol, String host, int port, String file) URL url = new URL(“http”, “”, 80, “”)。 通過URL訪問網(wǎng)絡
3、資源的方法需要3步: 1. 創(chuàng)建URL對象。 2. 使用URL對象的openStream( )方法獲取一個InputStream對象。 3. 從此InputStream讀入即可。,try URL bd = new URL( BufferedReader r = new BufferedReader( new InputStreamReader(bd.openStream(); String line = null; while (null != (line = r.readLine() System.out.println(line); r.close(); catch (MalformedU
4、RLException e) e.printStackTrace(); catch (IOException e) e.printStackTrace(); ,6,Socket,套接字(Socket ):計算機之間相互通訊的一種方式,表示一個系統(tǒng)的IP地址和端口號的結合。 Socket編程包括TCP網(wǎng)絡編程和UDP網(wǎng)絡編程。 利用Socket編寫通信程序時,需要區(qū)分服務器端編程和客戶端編程,兩者的功能和編寫方法不一樣。對于服務器端編程來說,服務器端需要有一個監(jiān)聽進程,該進程綁定一個端口負責監(jiān)聽客戶端的連接請求??蛻舳藙?chuàng)建一個Socket,并請求與服務器建立連接。服務器在接收到連接請求后,建立一
5、個新的Socket并綁定一個新的端口與客戶建立連接。服務器繼續(xù)在原端口監(jiān)聽,等待新的請求。,7,TCP與UDP,TCP協(xié)議是一種面向連接的協(xié)議,該協(xié)議在兩臺計算機之間建立一條可靠的邏輯連接線路,能夠自動處理網(wǎng)絡上經(jīng)常發(fā)生的各種錯誤。 UDP協(xié)議是面向無連接的協(xié)議。該協(xié)議將需要傳輸?shù)男畔⒎植鸪梢粋€個獨立的數(shù)據(jù)包,為每一個數(shù)據(jù)包填寫上目的地址,然后將它們送到網(wǎng)絡上。UDP協(xié)議是一個不可靠的協(xié)議,數(shù)據(jù)包可能會發(fā)生丟失、錯誤、亂序等情況,但它的效率非常高。 端口并不是一個物理上的概念,而是一個邏輯上的連接裝置,任何一個網(wǎng)絡連接必須要使用一個端口。端口可以是一個065535之間的整數(shù),1024以下的數(shù)字
6、是保留的每一臺主機只有一條到網(wǎng)絡的物理連接,當訪問一臺提供了多種服務的服務器時,客戶端只需要使用不同的端口就可以確定連接到服務器的哪項服務上。,8,TCP網(wǎng)絡編程,創(chuàng)建TCP Socket需要的四個信息: 本地系統(tǒng)的IP 本地應用程序使用的TCP端口號 遠程系統(tǒng)的IP 遠程應用程序相應的TCP端口號 ServerSocket和Socket兩個類用于建立一個雙邊的通信。 服務器端:創(chuàng)建ServerSocket類的對象用于偵聽客戶端的Socket連接,如果沒有連接,它將一直等待。 客戶端:創(chuàng)建Socket類的對象連接到一個服務器端。,9,Socket TCP通信模型,圖10.2是客戶端與服務器端通
7、信的工作流程。,Server端,/占用服務器某個端口監(jiān)聽 ServerSocket ss = new ServerSocket (PORT);,/等待連接 Socket s = ss.accept();,/輸入流 s.getInputStream();,/輸出流 s.getOutputStream();,/關閉socket s.close(); ss.close();,Client端,/試圖連接 Socket s = new Socket(IP, PORT);,/輸入流 s.getInputStream();,/輸出流 s.getOutputStream();,/關閉socket s.clos
8、e();,10,服務器端與客戶端簡單通信實例,/服務器端 ServerSocket ss = null; BufferedReader in = null; BufferedWriter out = null; try ss = new ServerSocket(8888); System.out.println(開始監(jiān)聽,端口號:8888.); Socket s = null; try s = ss.accept(); in = new BufferedReader(new InputStreamReader(s.getInputStream(); out = new BufferedWri
9、ter(new OutputStreamWriter(s.getOutputStream(); String str = in.readLine();/讀取客戶端的數(shù)據(jù) System.out.println(服務器接收到數(shù)據(jù): + str); finally s.close(); catch (IOException e) e.printStackTrace(); finally try ss.close(); catch (IOException e) e.printStackTrace(); ,11,服務器端與客戶端簡單通信實例,/客戶端 Socket s = null; Buffered
10、Reader in = null; BufferedWriter out = null; try s = new Socket(, 8888); in = new BufferedReader(new InputStreamReader(s.getInputStream(); out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream(); Scanner input = new Scanner(System.in); out.write(input.nextLine();/向服務器端發(fā)送數(shù)據(jù) out.f
11、lush(); catch (UnknownHostException e) e.printStackTrace(); catch (IOException e) e.printStackTrace(); finally try s.close(); catch (IOException e) e.printStackTrace(); ,12,服務器同時為多個客戶端服務,對Server類做了修訂,在建立連接之后,不再是直接與客戶端交互,而是把得到的Socket交給一個ServerThread線程,由ServerThread線程負責和客戶端交互。 為了模擬多客戶端連接的效果,對Client類做了
12、修改,與服務器建立連接后也不再直接與服務器交互,而是交給一個線程來負責,并且同時運行多個線程。,13,服務器端,/服務器端 public class MultiServer static final int PORT = 8080; public static void main(String args) throws IOException ServerSocket s = new ServerSocket(PORT); System.out.println(Server Started); try while (true) Socket socket = s.accept( ); try
13、new ServerThread(socket); catch (IOException e) socket.close( ); finally s.close( ); ,/服務器端線程 class ServerThread extends Thread private Socket socket; private BufferedReader in; private PrintWriter out; public ServerThread(Socket s) throws IOException socket = s; in = new BufferedReader( new InputSt
14、reamReader(socket.getInputStream( ); out = new PrintWriter( new BufferedWriter(new OutputStreamWriter( socket.getOutputStream( ), true); start( ); public void run( ) ,14,客戶端,/客戶端 public class MultiClient static final int MAX_THREADS = 40; public static void main(String args) throws IOException, Inte
15、rruptedException while (true) if (ClientThread.threadCount( ) MAX_THREADS) new ClientThread(“”, 8888); Thread.currentThread( ).sleep(100); ,/客戶端線程 class ClientThread extends Thread private Socket socket; private BufferedReader in; private PrintWriter out; public ClientThread(String ip, int
16、port) threadcount+; try socket = new Socket(ip, port); in = new BufferedReader( new InputStreamReader(socket.getInputStream( ); out = new PrintWriter( new BufferedWriter(new OutputStreamWriter( socket.getOutputStream( ), true); start( ); catch (IOException e) try socket.close(); catch(IOException e2) public void run( ) ,15,UDP網(wǎng)絡編程,接收端: 調(diào)用DatagramSocket(int port)創(chuàng)建一個套接字socket,并綁定到指定端口上;調(diào)用DatagramPacket構造方法創(chuàng)建一個緩沖區(qū)來接收UDP包 ;調(diào)用DatagramSocket類的receive方法,接收UDP包,如果此時還沒有數(shù)據(jù)可供接收,rec
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 消化內(nèi)科晨間護理規(guī)范
- 肺纖維化病人護理常規(guī)
- 頤和園英文介紹課件
- 頰癌護理課件
- 頸椎病中醫(yī)理論課件
- 小兒重癥肺炎的護理要點
- 顱骨骨折護理
- 預防職業(yè)危害課件
- 國家2030健康規(guī)劃實施綱要
- 預防小學生沉溺網(wǎng)絡課件
- 2025年大學英語四級考試題及答案
- 財政國庫管理培訓課件
- 國際功能、殘疾和健康分類(ICF)及核心組合
- 企業(yè)管理考試題目和答案
- 質(zhì)量管理基礎知識培訓課件
- 2025年 陜西延長石油有限責任公司所屬單位招聘考試筆試試卷附答案
- 2025年電力系統(tǒng)與自動化專業(yè)考試試題及答案
- 多耐病人的隔離措施及護理
- 2025年食品安全法律法規(guī)的基礎考試試卷及答案
- 專題02 運動的描述-2025-2026學年人教版《物理》八年級上學期暑期預習自學講義
- 新生兒腹脹的觀察及護理
評論
0/150
提交評論