版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
JavaWeb應用JavaOOPHTMLWindowsSQLBaseUnix/LinuxJavaScriptXMLSQLAdvanceOOAD/UMLJSP/ServletAjaxWeblogic/WebSphereJ2EEFrameWorkDesignPatternSocket編程回顧Java課程Java語言的基本語法OOP思想——封裝、繼承和多態(tài)異常處理java.lang包、java.util包、java.io包JDBC數(shù)據(jù)庫訪問技術Swing編程使用NetBeans進行程序開發(fā)4課程整體目標掌握網絡通訊和線程的基本原理理解Web應用及開發(fā)的基本概念掌握Servlet、會話管理、Filter和JavaMail掌握JSP、JSPEL和JSTL開發(fā)基于MVC模式的JavaWeb應用程序5本章目標網絡基礎知識IP地址與端口包InetAddressSocketServerSocket擴展IO流的相關知識6本章相關詞匯7單詞說明InternetProtocol(IP)互聯(lián)網協(xié)議net網絡,網狀物socket套接字,插座server服務器,服務端client客戶,客戶端port端口accept接收,認可計算機網絡與通信通信是人類生活中最重要的需求之一;通信是指:對語言、文字、聲音和圖片以及其它任何類型的相關數(shù)據(jù)進行傳輸;計算機的出現(xiàn)以及網絡的構成,使得數(shù)據(jù)通信更加快速有效。8網絡原理網絡就是一組連接在一起的計算機。9使用網卡、電纜、集線器等連接設備連接計算機以組成網絡??蛻舳?服務器模式網絡發(fā)展,促使客戶端/服務器模式應運而生;通過網絡,向另一臺計算機請求服務的計算機稱為客戶端,而處理請求的計算機稱為服務器;如數(shù)據(jù)服務器,需要數(shù)據(jù)的客戶端機器向數(shù)據(jù)服務器提出請求,而服務器則處理客戶端的請求并向其發(fā)送所需的數(shù)據(jù);客戶端/服務器的優(yōu)勢在于:服務器和客戶端分攤任務,分別負責部分處理工作;服務器可以同時為多臺客戶端服務;多個客戶端可以同時訪問服務器上的相同數(shù)據(jù)。10IP地址網絡中有多臺計算機,它們必須通過某種標識來區(qū)分每一臺機器,這就是IP地址;IP地址由4個字節(jié)共32位二進制數(shù)組成,類似于:;在網絡尋找某一臺計算機都是依靠它的IP地址(用域名或計算機名定位主機其實也是通過某種服務轉成IP地址后再找到該主機的);網絡ID:網絡ID標識了計算機或網絡設備所在的網段;主機ID:主機ID標識了特定的主機或網絡設備11特殊IP地址許多網絡地址被保留用于特殊用途;和就是兩個此類地址,第一個稱為缺省路由,后一個是環(huán)回地址;被保留用于用戶主機的本地IP話務,它被分配給一個特殊接口,即起到閉合電路作用的環(huán)回接口。12端口在一臺物理性的計算機中,往往運行著多個網絡程序,一個IP地址并不足以完整標識一個服務器,因此,端口是機器內部獨一無二的場所;一臺計算機上可能同時運行多個網絡程序,IP地址只能確保把數(shù)據(jù)送到指定的計算機,但不能保證把這些數(shù)據(jù)傳遞給哪個網絡程序;端口使用一個16位的數(shù)字來表示,它的范圍是0~65535,1024以下的端口號保留給預定義的服務,如:http使用80端口;網絡間通信其實是在網絡應用程序端口之間進行的。13包使用包可以實現(xiàn)Java的網絡功能,其中包含了一系列與網絡通訊相關的類,比較重要的有:InetAddressSocketServerSocket如果要進行網絡通訊編程的話,必須導入此包。14.InetAddressInetAddress用來表示互聯(lián)網協(xié)議(IP)地址,它的實例將IP地址和DNS(主機名解析)進行了封裝;該類無法直接實例化,只能通過下列靜態(tài)工廠方法獲得實例:15方法原型說明staticInetAddressgetByName(Stringhost)throwsUnknownHostException在給定主機名的情況下確定主機的IP地址staticInetAddressgetLocalHost()throwsUnknownHostException返回本地主機的InetAddress對象staticInetAddressgetByAddress(byte[]address)throwsUnknownHostException在給定原始IP地址的情況下,返回InetAddress對象staticInetAddress[]getAllByName(Stringhost)throwsUnknownHostException在給定主機名的情況下,根據(jù)系統(tǒng)上配置的名稱服務返回其IP地址所組成的數(shù)組InetAddress示例16import.*;//導入包public
classInetAddressDemo{
public
static
voidmain(String[]args){
try{
//獲得當前本地主機的IP地址
InetAddressadd1=InetAddress.getLocalHost();System.out.println("當前本地主機:"+add1);
//根據(jù)域名,通過DNS域名解析,獲得相應服務的主機地址
InetAddressadd2=InetAddress.getByName("");System.out.println("網易服務器主機:"+add2);
//根據(jù)字符串表現(xiàn)形式的IP地址獲得相應的主機地址(若果網絡上有該IP地址的話)InetAddressadd3=InetAddress.getByName("2");System.out.println("IP地址為2的主機:"+add3);
//根據(jù)機器名獲得相應的主機地址(如果網絡上有該機器名的話)
InetAddressadd4=InetAddress.getByName("J104");System.out.println("機器名為J104的主機:"+add4);}catch(UnknownHostExceptionuhe){uhe.printStackTrace();}}}InetAddress的其它方法17方法原型說明byte[]getAddress()返回此InetAddress
對象的原始IP地址StringgetHostAddress()返回此InetAddress對象的IP地址字符串StringgetHostName()返回此InetAddress對象的主機名稱booleanequals(Objectother)判斷兩個IP地址是否相等StringtoString()返回此InetAddress對象的字符串表現(xiàn)形式(主機名/IP地址)套接字網絡上計算機通過TCP/IP協(xié)議進行通信,而套接字(socket)則將這些通信協(xié)議進行了封裝;TCP/IP套接字用于在主機和Internet之間建立可靠的、雙向的、持續(xù)的、點對點的流式連接;socket用于描述IP地址和端口,應用程序通過套接字向網絡發(fā)出請求或者應答網絡請求;也就是說,套接字起到通信端點的作用;客戶端和服務器通過套接字建立連接和通信。18套接字通信原理19主機甲A程序主機乙B程序TCP/IP協(xié)議網卡網絡管理軟件socketsocket主機甲上的A程序將一段數(shù)據(jù)寫入socket中主機乙上的B程序從socket中讀取這段數(shù)據(jù).SocketSocket類用于創(chuàng)建套接字對象,其構造方法共有9種重載,常用的有如下幾種:套接字會因為網絡的連接中斷而失效,所以對它的操作都有可能拋出IOException20構造方法說明Socket(InetAddressaddress,intport)throwsIOException用預先存在的InetAddress對象和端口創(chuàng)建一個與本地主機連接的套接字Socket(StringhostName,intport)throwsUnknownHostException,IOException創(chuàng)建一個本地主機與給定名稱的主機和端口連接的套接字Socket的常用方法一旦Socket對象被成功創(chuàng)建,就可以獲得訪問與之相關的輸入/輸出流的權力,通過流操作從套接字中發(fā)送(輸出)和接收(輸入)數(shù)據(jù):21方法原型說明InputStreamgetInputStream()throwsIOException獲得當前套接字的輸入流OutputStreamgetOutputStream()throwsIOException獲得當前套接字的輸出流voidclose()throwsIOException關閉當前套接字Socket的其它方法使用下面的方法,可以在任何時候檢查套接字的地址和與之相關的端口信息:22方法原型說明InetAddressgetInetAddress()返回與當前套接字連接的遠程主機的InetAddress對象,如果未連接,則返回nullintgetPort()返回與當前套接字連接的遠程主機端口InetAddressgetLocalAddress()返回與當前套接字綁定的本地主機的InetAddress對象intgetLocalPort()返回與當前套接字綁定的本地主機端口.ServerSocketServerSocket類用來創(chuàng)建服務器套接字,它監(jiān)聽本地或遠程客戶程序通過公共端口的連接;ServerSocket類有4個重載的構造方法,以下是常用的:ServerSocket的常用方法如下:23構造方法說明ServerSocket(intport)throwsIOException創(chuàng)建服務套接字,它負責偵聽由port指定的端口方法原型說明Socketaccept()throwsIOException等待并偵聽來自客戶端的請求,一旦接收到,返回一個與客戶進行通信的Socketvoidclose()throwsIOException關閉當前服務器套接字Socket編程編寫服務器端程序:創(chuàng)建一個服務器套接字(ServerSocket),綁定到指定端口;調用accept方法,偵聽來自客戶端的請求,如果客戶發(fā)出請求,則接受連接,返回通信套接字(Socket);調用Socket的getInputStream和getOutputStream方法,獲得輸入/輸出流,開始網絡數(shù)據(jù)的接收和發(fā)送;關閉通信套接字,關閉服務器套接字。編寫客戶端程序:創(chuàng)建一個套接字(Socket),向服務器的偵聽端口發(fā)出請求;與服務器正確連接后,調用Socket的getInputStream和getOutputStream方法,獲得輸入/輸出流,開始網絡數(shù)據(jù)的接收和發(fā)送;關閉通信套接字。24Socket編程示意圖25ClientServerServerSocket(intport)InputStreamgetInputStream()OutputStreamgetOutputStream()close()close()InputStreamgetInputStream()OutputStreamgetOutputStream()Socket(InetAddressaddress,intport)Socketaccept()示例(服務端)26public
classServer{
private
static
final
intSERVER_PORT=9001;//指定偵聽端口
publicServer(){
try{ServerSocketss=newServerSocket(SERVER_PORT);//創(chuàng)建服務器套接字
System.out.println("服務端已啟動,正在等待客戶端...");Sockets=ss.accept();//偵聽來自客戶端的請求
InputStreamin=s.getInputStream();//獲得輸入流,用來接收數(shù)據(jù)
OutputStreamout=s.getOutputStream();//獲得輸出流,用來發(fā)送數(shù)據(jù)
byte[]buf=new
byte[1024];
intlen=in.read(buf);//從輸入流中讀取數(shù)據(jù)
StringstrFromClient=newString(buf,0,len);System.out.print("來自客戶端的信息>>");System.out.println(strFromClient);StringstrToClient="我也很好!";out.write(strToClient.getBytes());//往輸出流中發(fā)送數(shù)據(jù)
in.close();out.close();//關閉輸入流和輸出流
s.close();ss.close();//關閉通信套接字和服務器套接字
System.out.println("服務端已關閉。");}catch(IOExceptionioe){ioe.printStackTrace();}}
public
static
voidmain(String[]args){newServer();}}示例(客戶端)27public
classClient{
private
static
final
intSERVER_PORT=9001;//服務器的偵聽端口
publicClient(){
try{//由于服務端也是運行在本機,所以創(chuàng)建本機的InetAddress對象
InetAddressaddress=InetAddress.getByName("localhost");Sockets=newSocket(address,SERVER_PORT);//向服務器偵聽端口發(fā)出請求
System.out.println("客戶端已啟動。");InputStreamin=s.getInputStream();//獲得輸入流,用來接收數(shù)據(jù)
OutputStreamout=s.getOutputStream();//獲得輸出流,用來發(fā)送數(shù)據(jù)
StringstrToServer="你好!";out.write(strToServer.getBytes());//往輸出流中發(fā)送數(shù)據(jù)
byte[]buf=new
byte[1024];
intlen=in.read(buf);//從輸入流中讀取數(shù)據(jù)
StringstrFromServer=newString(buf,0,len); System.out.print("來自服務端的回答>>");System.out.println(strFromServer);in.close();out.close();//關閉輸入流和輸出流
s.close();//關閉通信套接字
System.out.println("客戶端已關閉。");}catch(UnknownHostExceptionnhe){System.out.println("未找到指定主機...");}catch(IOExceptionioe){ioe.printStackTrace();}}
public
static
voidmain(String[]args){newClient();}}關于IO流計算機系統(tǒng)將除了CPU和內存以外其它所有設備都當成文件來處理,包括網絡終端(網卡)也不例外;在兩臺主機之間通過socket建立握手連接之后,主要是通過輸入/輸出流來接收和發(fā)送數(shù)據(jù),實際上,對于網絡的操作,絕大部分是在操作IO流;實際上操作網絡端口流與操作磁盤文件流的原理是相似的;出于效率的考慮,socket使用的是字節(jié)流,但是在實際操作中,字節(jié)往往會帶來不便,所以我們一般會把字節(jié)流改造成字符流后進行操作。28輸入對于InputStream,先使用InputStreamReader轉化成字符流;然后再使用BufferedReader建立緩沖,以提高效率,如:
InputStreamis=socket.getInputStream(); InputStreamReaderisr=newInputStreamReader(is); BufferedReaderin=newBufferedReader(isr);29java.io.PrintWriterPrintWriter是字符輸出流,它提供格式化的輸出功能,由于構造方法的支持,允許將字節(jié)流轉化成字符流的形式;它的構造方法共有8種重載,以下是常用的幾種:30構造方法說明PrintWriter(OutputStreamout)利用現(xiàn)有的OutputStream構造格式打印流,但不帶自動刷新緩存的功能PrintWriter(OutputStreamout,booleanautoFlush)利用現(xiàn)有的OutputStream構造格式打印流,由參數(shù)autoFlush指定是否帶自動刷新緩存的功能PrintWriter(Writerout)利用現(xiàn)有的Writer構造格式打印流,但不帶自動刷新緩存的功能PrintWriter(Writerout,booleanautoFlust)利用現(xiàn)有的Writer構造格式打印流,由參數(shù)autoFlush指定是否帶自動刷新緩存的功能PrintWriter(Filefile)throwsFileNotFoundException針對由file指定的文件對象,創(chuàng)建格式打印流,但不帶自動刷新緩存的功能PrintWriter的常用方法31方法原型說明voidprint(Xx)該方法提供8種重載,可以輸出任意數(shù)據(jù)類型,但輸出時不帶換行效果,因此,也不會自動刷新緩存voidprintln(Xx)該方法提供10種重載,可以輸出任意數(shù)據(jù)類型,有換行效果,如果構造方法設置為自動刷新的話,該方法的自動刷新功能將生效voidflush()刷新緩存區(qū)voidclose()關閉流附錄:IO流的繼承體系32OutputStreamFileOutputStreamPipedOutputStream字節(jié)輸出流FilterOutputStreamByteArrayOutputStreamDataOutputStreamPrintStreamBufferedOutputStream改寫示例(代碼片段)33public
classClient{//改用字符流的方式收發(fā)網絡數(shù)據(jù)
……Sockets=newSocket(address,SERVER_PORT);InputStreamis=s.getInputStream();InputStreamReaderisr=
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 新形勢下金融押運行業(yè)快速做大市場規(guī)模戰(zhàn)略制定與實施研究報告
- 2025-2030年中國商用廚房電器行業(yè)全國市場開拓戰(zhàn)略制定與實施研究報告
- 2025-2030年中國汽車分時租賃行業(yè)全國市場開拓戰(zhàn)略制定與實施研究報告
- 2025-2030年中國鈷行業(yè)開拓第二增長曲線戰(zhàn)略制定與實施研究報告
- 關于大學生對學校組織愛心活動的關注及其背后真實心理的調查
- 國有企業(yè)2024年工作情況總結及2025年工作計劃
- 2024-2030年中國金融系列行業(yè)市場全景分析及投資前景展望報告
- 電力工程招投標過程中的風險分析與管理措施
- 工程塑料投資建設項目可行性研究報告
- 壽衣知識培訓課件
- 《小學生良好書寫習慣培養(yǎng)的研究》中期報告
- 大學英語四級詞匯表(下載)
- 2025年四川成都市溫江區(qū)市場監(jiān)督管理局選聘編外專業(yè)技術人員20人歷年管理單位筆試遴選500模擬題附帶答案詳解
- 手術室發(fā)生地震應急預案演練
- 初中數(shù)學新課程標準(2024年版)
- 高職院校專業(yè)教師數(shù)字素養(yǎng)架構與提升路徑
- 售后服務人員培訓資料課件
- 2024-2030年中國薯條行業(yè)發(fā)展趨勢及投資盈利預測報告
- 生命智能學習通超星期末考試答案章節(jié)答案2024年
- 專項14-因式分解-專題訓練(50道)
- 中華傳統(tǒng)文化之戲曲瑰寶學習通超星期末考試答案章節(jié)答案2024年
評論
0/150
提交評論