尚-第4章網(wǎng)絡編程_第1頁
尚-第4章網(wǎng)絡編程_第2頁
尚-第4章網(wǎng)絡編程_第3頁
尚-第4章網(wǎng)絡編程_第4頁
尚-第4章網(wǎng)絡編程_第5頁
已閱讀5頁,還剩36頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

JavaSE知識圖解JAVA發(fā)展歷程JAVA環(huán)境搭建基礎程序設計數(shù)據(jù)類型運算符流程控制 數(shù)組面象編程類和對象屬性方法設計模式接口三大特性應用程序開發(fā)JDBC集合異常處理類庫多線程IO反射網(wǎng)絡連接OracleJAVA新特性Eclipse使用泛型枚舉裝箱/拆箱可變參數(shù)Annotation主要內(nèi)容網(wǎng)絡編程概述通訊要素IP和端網(wǎng)絡通信協(xié)議InetAddress類TCP網(wǎng)絡通信UDP網(wǎng)絡通信URL編程網(wǎng)絡編程概述Java是Internet

上的語言,它從語言級上提供了對網(wǎng)絡應用程序的支持,程序員能夠很容易開發(fā)常見的網(wǎng)絡應用程序。Java提供的網(wǎng)絡類庫,可以實現(xiàn)無痛的網(wǎng)絡連接,聯(lián)網(wǎng)的底層細節(jié)被隱藏在Java

的本機安裝系統(tǒng)里,由JVM

進行控制。并且Java

實現(xiàn)了一個跨平臺的網(wǎng)絡庫,程序員面對的是一個

的網(wǎng)絡編程環(huán)境。網(wǎng)絡基礎計算機網(wǎng)絡:把分布在不同地理區(qū)域的計算機與專門的外部設備用通信線路互連成一個規(guī)模大、功能強的網(wǎng)絡系統(tǒng),從而使眾多的計算機可以方便地互相傳遞信息、共享硬件、源。網(wǎng)絡編程的目的:、數(shù)據(jù)信息等資直接或間接地通過網(wǎng)絡協(xié)議與其它計算機進行通訊。網(wǎng)絡編程中有兩個主要的問題:如何準確地定位網(wǎng)絡上一臺或多臺主機找到主機后如何可靠高效地進行數(shù)據(jù)傳輸。地球村如何實現(xiàn)網(wǎng)絡中的主機互相通信:通信雙方地址一定的規(guī)則(有兩套參考模型)OSI參考模型:模型過于理想化,未能在因特網(wǎng)上進行廣泛推廣TCP/IP參考模型(或TCP/IP協(xié)議):事實上的國際標準。網(wǎng)絡基礎OSI參考模型TCP/IP參考模型TCP/IP參考模型各層對應協(xié)議應用層應用層HTTP、ftp、net、DNS…表示層會話層傳輸層傳輸層TCP、UDP、…網(wǎng)絡層網(wǎng)絡層IP、ICMP、ARP…數(shù)據(jù)鏈路層物理+數(shù)據(jù)鏈路層Link物理層網(wǎng)絡通信協(xié)議數(shù)據(jù)封裝數(shù)據(jù)拆封通訊要素1:IP

和端IP

地址:InetAddress唯一的標識Internet

上的計算機本地回環(huán)地址(hostAddress):localhost不易主機名(hostName):端

標識正在計算機上運行的進程(程序)不同的進程有不同的端被規(guī)定為一個

16位的整數(shù)

0~65535。其中,0~1023被預先定義的服務通信占用(如MySql占用端口3306,http占用端口80等)。除非 需要 這些特定服務,否則,就應該使用1024~65535

這些端口中的某一個進行通信,以免發(fā)生端口

。與IP地址的組合得出一個網(wǎng)絡套接字。端89988998MSNMSN789878988998InetAddress類Internet上的主機有兩種方式表示地址:(hostName):IP

地址(hostAddress):10InetAddress類主要表示IP地址,兩個子類:Inet4Address、Inet6Address。InetAddress

類對象含有一個

Internet

主機地址的 和IP地址:容易和10。,當在連接網(wǎng)絡時輸入一個主機的 后,域名服務器(DNS)負責將轉(zhuǎn)化成IP地址,這樣才能和主機建立連接。

-------

解析DNS網(wǎng)絡服務器C:\Windows\System32\drivers\etc\hosts先找本機hosts,是否有輸入的地址,沒有的話,再通過DNS服務器,找主機。InetAdress類InetAddress類沒有提供公共的構造器,而是提供了如下兩個靜態(tài)方法來獲取InetAddress實例InetAddress提供了如下幾個常用的方法InetAdress

代碼示例通訊要素2:網(wǎng)絡通信協(xié)議網(wǎng)絡通信協(xié)議計算機網(wǎng)絡中實現(xiàn)通信必須有一些約定,即通信協(xié)議,對速率、傳輸代碼、代碼結構、傳輸控制步驟、出錯控制等制定標準。通信協(xié)議分層的思想由于結點之間聯(lián)系很復雜,在制定協(xié)議時,把復雜成份分解成一些簡單的成份,再將它們復合起來。最常用的復合方式是層次方式,即同層間可以通信、上一層可以調(diào)用下一層,而與再下一層不。各層互不影響,利于系統(tǒng)的開發(fā)和擴展。TCP/IP協(xié)議簇傳輸層協(xié)議中有兩個非常重要的協(xié)議:傳輸控制協(xié)議TCP(Transmission

Control

Protocol)用戶數(shù)據(jù)報協(xié)議UDP(User

Datagram

Protocol)。TCP/IP以其兩個主要協(xié)議:傳輸控制協(xié)議(TCP)和網(wǎng)絡互聯(lián)協(xié)議(IP)而得名,實際上是一組協(xié)議,包括多個具有不同功能且互為關聯(lián)的協(xié)議。IP(Internet

Protocol)協(xié)議是網(wǎng)絡層的主要協(xié)議,支持網(wǎng)間互連的數(shù)據(jù)通信。TCP/IP協(xié)議模型從更實用的角度出發(fā),形成了高效的四層體系結構,即物理鏈路層、IP層、傳輸層和應用層。TCP

和UDPTCP協(xié)議:使用TCP協(xié)議前,須先建立TCP連接,形成傳輸數(shù)據(jù)通道傳輸前,采用“三次握手”方式,是可靠的TCP協(xié)議進行通信的兩個應用進程:客戶端、服務端在連接中可進行大數(shù)據(jù)量的傳輸已建立的連接,效率低傳輸完畢,需UDP協(xié)議:將數(shù)據(jù)、源、目的封裝成數(shù)據(jù)包,不需要建立連接每個數(shù)據(jù)報的大小限制在64K內(nèi)因無需連接,故是不可靠的發(fā)送數(shù)據(jù)結束時無需 資源,速度快利用套接字(Socket)開發(fā)網(wǎng)絡應用程序早已被廣泛的采用,以至于成為事實上的標準。通信的兩端都要有Socket,是兩臺機器間通信的端點網(wǎng)絡通信其實就是Socket間的通信。Socket允許程序把網(wǎng)絡連接當成一個流,數(shù)據(jù)在兩個Socket間通過IO傳輸。

一般主動發(fā)起通信的應用程序?qū)倏蛻舳?,等待通信請求的為服務端SocketJava語言的基于套接字編程分為服務端編程和客戶端編程,其通信模型

Server

ServerSocket(int

port)Socket

accept()OutputStreamSocker.getOutputStream()InputStreamSocker.gerInputSream()Socket.close()

Client

Socket(InetAddressaddress,int

port)OutputStreamSocket.getOutputStream()InputStreamSocket.getInputStream()Socker.close()基于TCP的Socket通信基于Socket的TCP編程Socket類的常用方法方能InetAddress

getLocalAddress()返回對方Socket中的IP的InetAddress對象int

getLocalPort()返回本地Socket中的端InetAddress

getInetAddress()返回對方Socket中IP地址int

getPort()返回對方Socket中的端void

close()

throwsIOException關閉Socket,不可在以后的網(wǎng)絡連接中使用,除非創(chuàng)建新的套接字InputStream

getInputStream()throws

IOException獲取與Socket相關聯(lián)的字節(jié)輸入流,用于從Socket中讀數(shù)據(jù)。OutputStreamgetOutputStream()throws

IOException獲取與Socket相關聯(lián)的字節(jié)輸出流,用于向Socket中寫數(shù)據(jù)。ServerSocket類的常用方法方能Socket

accept()

throwsIOException等待客戶端的連接請求,返回與該客戶端進行通信用的Socket對象void

setSoTimeout(int

timeout)throws

SocketException設置accept()方法等待連接的時間為timeout毫秒。若時間已到,還沒有客戶端連接,則拋出InterruptedIOException異常,accept()方法不再阻塞,該

Socket可繼續(xù)使用。若timeout值為0,則表示accept()

等待。該方法必須在Socket創(chuàng)建后,在accept()之前調(diào)用才有效。void

close()throws

IOException關閉

SocketInetAddress

getInetAddress()返回此服務器套接字的本地地址int

getLocalPort()返回此套接字在其上

的端SocketAddressgetLocalSocketAddress()返回此套接字綁定的端點的地址基于Socket的TCP編程客戶端Socket的工作過程包含以下四個基本的步驟:創(chuàng)建Socket:根據(jù)指定服務端的IP

地址或端

構造

Socket

類對象。若服務器端響應,則建立客戶端到服務器的通信線路。若連接失敗,會出現(xiàn)異常。打開連接到Socket的輸入/出流:使用getInputStream()方法獲得輸入流,使用getOutputStream()方法獲得輸出流,進行數(shù)據(jù)傳輸按照一定的協(xié)議對Socket

進行讀/寫操作:通過輸入流服務器放入線路的信息(但不能

自己放入線路的信息),通過輸出流將信息寫入線程。關閉Socket:斷開客戶端到服務器的連接,線路客戶端創(chuàng)建Socket對象客戶端程序可以使用Socket類創(chuàng)建對象,創(chuàng)建的同時會自動向服務器方發(fā)起連接。Socket的構造方法是:Socket(String

host,int

port)throws

UnknownHostException,IOException:向服務器(

是host。端

為port)發(fā)起TCP連接,若成功,則創(chuàng)

建Socket對象,否則拋出異常。Socket(InetAddress

address,int

port)throws

IOException:根據(jù)InetAddress對象所表示的IP地址以及端

port發(fā)起連接??蛻舳私ocketAtClient對象的過程就是向服務器發(fā)出套接字連接請求Socket

s

=

new

Socket(“65”,9999);OutputStream

out

=

s.getOutputStream();out.write(“

o”.getBytes());s.close();服務器程序的工作過程包含以下四個基本的步驟:調(diào)用ServerSocket(int

port)

:創(chuàng)建一個服務器端套接字,并綁定到指定端口上。用于 客戶端的請求。調(diào)用accept():

連接請求,如果客戶端請求連接,則接受連接,返回通信套接字對象。調(diào)用該Socket類對象的getOutputStream()和getInputStream():獲取輸出流和輸入流,開始網(wǎng)絡數(shù)據(jù)的發(fā)送和接收。關閉ServerSocket和Socket對象:客戶端 結束,關閉通信套接字。基于Socket的TCP編程服務器建立ServerSocket

對象ServerSocket

對象負責等待客戶端請求建立套接字連接,類

似郵局某個窗口中的業(yè)務員。也就是說,服務器必須事先

建立一個等待客戶請求建立套接字連接的ServerSocket對象。所謂“接收”客戶的套接字請求,就是accept()方一個Socket

對象ServerSocket

ss

=

new

ServerSocket(9999);Socket

s

=

ss.accept

();InputStreamin

=

s.getInputStream();byte[]

buf

=

new

byte[1024];int

num

=

in.read(buf);String

str

=

new

String(buf,0,num);System.out.println(s.getInetAddress().toString()+”:”+str);s.close();ss.close();返回例題客戶端發(fā)送內(nèi)容給服務端,服務端將內(nèi)容打印到控制臺上。客戶端發(fā)送內(nèi)容給服務端,服務端給予反饋。從客戶端發(fā)送文件給服務端,服務端保存到本地。并返回“發(fā)送成功”給客戶端。并關閉相應的連接。練習并發(fā)送給客戶端,客戶端保1.服務端存 到本地2.客戶端給服務端發(fā)送文本,服務端會將文本轉(zhuǎn)成大寫在返回給客戶端??蛻舳恕斩丝蛻舳耍鹤远x瀏覽器服務端:自定義Tomcat服務器UDP網(wǎng)絡通信類DatagramSocket

和DatagramPacket

實現(xiàn)了基于UDP

協(xié)議網(wǎng)絡程序。UDP數(shù)據(jù)報通過數(shù)據(jù)報套接字DatagramSocket

發(fā)送和接收,系統(tǒng)不保證UDP數(shù)據(jù)報一定能夠安全送到目的地,也不能確定什么時候可以抵達。DatagramPacket

對象封裝了UDP數(shù)據(jù)報,在數(shù)據(jù)報中包含了發(fā)送端的IP地址和端以及接收端的IP地址和端。UDP協(xié)議中每個數(shù)據(jù)報都給出了完整的地址信息,因此無須建立發(fā)送方和接收方的連接流程:DatagramSocket與DatagramPacket建立發(fā)送端,接收端建立數(shù)據(jù)包調(diào)用Socket的發(fā)送、接收方法關閉Socket發(fā)送端與接收端是兩個獨立的運行程序UDP網(wǎng)絡通信發(fā)送端DatagramSocket

ds

=

new

DatagramSocket();byte[]

by

=

”.getBytes();DatagramPacket

dp

=

newDatagramPacket(by,0,by.length,InetAddress.getByName(“”),10000);ds.send(dp);ds.close();接收端在接收端,要指定

的端口。DatagramSocket

ds

=

new

DatagramSocket(10000);byte[]

by

=

new

byte[1024];DatagramPacket

dp

=

new

DatagramPacket(by,by.length);ds.receive(dp);String

str

=

new

String(dp.getData(),0,dp.getLength());System.out.println(str+"--"+dp.getAddress());ds.close();URL編程URL(Uniform

Resource

Locator): 資源定位符,它表示Internet

上某一資源的地址。通過URL

可以

Internet上的各種網(wǎng)絡資源,比如最常見的www,ftp

站點。瀏覽器通過解析給定的URL

可以在網(wǎng)絡上查找相應的文件或其他資源。>/<文件名>URL的基本結構由5部分組成:<傳輸協(xié)議>://<主機名>:<端例如:URL編程為了表示URL,

中實現(xiàn)了類URL。的構造器來初始化一個URL

對象:可以通過下面public

URL

(Stringspec):通過一個表示URL地址的字符串可以構造一個URL對象。例如:URL

url=new

URL("

.

/");public

URL(URL

context,Stringspec):通過基URL

和相對URL

構造一個URL

對象。例如:URL

downloadUrl=newURL(url,“download.html")public

URL(String

protocol,

String

host,

String

file);例如:new

URL("http"," ",

“download.

html");public

URL(String

protocol,

String

host,

int

port,

String

file);

例如:

URL

gamelan

=

new

URL("http",

" ",

80,“download.html");URL編程類URL的構造方法都拋出非運行時異常,必須要對這一異常進行處理,通常是用try-catch

語句進行捕獲。一個URL對象生成后,其屬性是不能被改變的,但可以通過它給定的方法來獲取這些屬性:public

String

getProtocol(

)public

String

getHost(

)public

String

getPort(

)public

String

getPath(

)public

String

getFile(

)public

String

getRef(

)public

String

getQuery(

)獲取該URL的協(xié)議名獲取該URL的主機名獲取該URL的端獲取該URL的文件路徑獲取該URL的文件名獲取該URL在文件中的相對位置獲取該URL的查詢名URL編程URLurl=

newURL("

");System.out.println("getProtocol()

:"+url.getProtocol());System.out.println("getHost()

:"+url.getHost());System.out.println("getPort()

:"+url.getPort());System.out.println("getPath()

:"+url.getPath());System.out.println("getFile()

:"+url.getFile());System.out.println("getQuery()

:"+url.getQuery());針對HTTP協(xié)議的URLConnection類URL的方法

openStream():能從網(wǎng)絡上 數(shù)據(jù)若希望輸出數(shù)據(jù),例如向服務器端的CGI(公共網(wǎng)關接口-Common

Gateway

Interface-的簡稱,是用戶瀏覽器和服務器端的應用程序進行連接的接口)程序發(fā)送一些數(shù)據(jù),則必須先與URL建立連接,然后才能對其進行讀寫,此時需要使用URLConnection

。URLConnection:表示到URL所

的 對象的連接。當與一個URL建立連接時,首先要在一個URL

對象上通過方法openConnection()

生成對應的URLConnection

對象。如果連接過程失敗,將產(chǎn)生IOException.URL

netchinaren

=

new

URL("http

/index.shtml");URLConnectonn

u

=

netchinaren.openConnection();URLConnection類通過URLConnection對象獲取的輸入流和輸出流,即可以與

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論