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

下載本文檔

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

文檔簡介

第16章

Java網(wǎng)絡(luò)編程1本章主要內(nèi)容16.1網(wǎng)絡(luò)基礎(chǔ)16.2URL編程16.3用Java語言實現(xiàn)底層網(wǎng)絡(luò)通信216.1網(wǎng)絡(luò)基礎(chǔ)16.1.1TCP/IP協(xié)議16.1.2通信端口16.1.3URL概念16.1.4Java語言的網(wǎng)絡(luò)編程316.1.1TCP/IP協(xié)議Internet的主要協(xié)議有:網(wǎng)絡(luò)層的IP協(xié)議;傳輸層的TCP和UDP協(xié)議;應(yīng)用層的FTP、HTTP、SMTP等協(xié)議。TCP/IP網(wǎng)絡(luò)參考模型包括四個層次:應(yīng)用層、傳輸層、網(wǎng)絡(luò)層、鏈路層。每一層負(fù)責(zé)不同的功能,416.1.1TCP/IP協(xié)議1.鏈路層鏈路層也稱為數(shù)據(jù)鏈路層或網(wǎng)絡(luò)接口層。通常包括操作系統(tǒng)中的設(shè)備驅(qū)動程序和計算機中對應(yīng)的網(wǎng)絡(luò)接口卡。它們一起處理與電纜(或其它任何傳輸媒介)有關(guān)的物理接口細(xì)節(jié)。2.網(wǎng)絡(luò)層網(wǎng)絡(luò)層對TCP/IP網(wǎng)絡(luò)中的硬件資源進(jìn)行標(biāo)識。主要完成IP地址的管理。516.1.1TCP/IP協(xié)議3.傳輸層在TCP/IP網(wǎng)絡(luò)中最常用的傳輸協(xié)議是傳輸控制協(xié)TCP和用戶數(shù)據(jù)報協(xié)議UDP(UserDatagramProtocol)。主要用來完成數(shù)據(jù)的傳輸。TCP協(xié)議是通過在端點與端點之間建立持續(xù)的連接而進(jìn)行通信的。是一種有序傳輸。UDP協(xié)議是一種無連接的傳輸協(xié)議。但效率比較高。4.應(yīng)用層大多數(shù)基于Internet的應(yīng)用程序都被看做TCP/IP網(wǎng)絡(luò)的最上層協(xié)議——應(yīng)用層協(xié)議。例如:FTP、HTTP、SMTP、POP3、Telnet等協(xié)議。616.1.2

通信端口Internet上傳輸?shù)臄?shù)據(jù)都帶有標(biāo)識目的主機與端口號的地址信息,主機的地址由32位的IP地址標(biāo)識,IP協(xié)議通過該地址把數(shù)據(jù)發(fā)送到正確的目的主機;端口號由一個16位的數(shù)字標(biāo)識,TCP與UDP協(xié)議根據(jù)端口號把數(shù)據(jù)傳送給正確的應(yīng)用程序。端口號的范圍是0~65535,其中1~1023之間的端口號是為HTTP、FTP等系統(tǒng)應(yīng)用保留的,F(xiàn)TP協(xié)議的端口號是21,HTTP協(xié)議的端口號是80,Telnet協(xié)議的端口號是23,用戶應(yīng)用程序只能使用1024以上的端口號,其中1024~4999可任意被用戶用作客戶端套接字端口,5000~65535可任意被用戶用作服務(wù)端套接字端口。716.1.2

通信端口816.1.3

URL概念URL是統(tǒng)一資源定位器(UniformResourceLocator)的英文縮寫,它表示Internet上某一資源的地址。Internet上的資源包括HTML文件、圖像文件、聲音文件、動畫文件以及其他任何內(nèi)容(并不完全是文件,也可以是對數(shù)據(jù)庫的一個查詢等)。916.1.3

URL概念URL的基本結(jié)構(gòu)由5部分組成,其格式如下:傳輸協(xié)議://主機名:端口號/文件名#引用1.傳輸協(xié)議(protocol):傳輸協(xié)議是指所使用的協(xié)議名,如HTTP、FTP等。2.主機名(hostname):主機名是指資源所在的計算機??梢允荌P地址,也可以是計算機的名稱或域名。3.端口號(portnumber):一個計算機中可能有多種服務(wù),如Web服務(wù)、FTP服務(wù)或自己建立的服務(wù)等。為了區(qū)分這些服務(wù),就需要使用端口號,每一種服務(wù)用一個端口號。1016.1.3

URL概念4.文件名(filename):文件名包括該文件的完整路徑。在HTTP協(xié)議中,有一個默認(rèn)的文件名是index.html,因此,下列兩個地址是等價的。/index.html5.引用(reference):引用就是資源內(nèi)部的某個參考點。如/index.html#chapter1說明:對于一個URL并不是要求它必須包含所有的這5部分內(nèi)容。1116.1.4Java語言的網(wǎng)絡(luò)編程Java語言的網(wǎng)絡(luò)編程分為三個層次。最高一級的網(wǎng)絡(luò)通信就是我們前面章節(jié)中所講的從網(wǎng)絡(luò)上下載小程序。次一級的通信,就是前面介紹的通過類URL對象指明文件所在位置,并從網(wǎng)絡(luò)上下載聲音和圖像文件,然后對聲音播放和圖像顯示。最低一級的通信是利用包中提供的類直接在程序中實現(xiàn)網(wǎng)絡(luò)通信。1216.1.4Java語言的網(wǎng)絡(luò)編程借助HTML從網(wǎng)上下載applet在程序中通過URL訪問網(wǎng)上資源通過包中的類直接在程序中實現(xiàn)網(wǎng)絡(luò)通訊1316.1.4Java語言的網(wǎng)絡(luò)編程針對不同層次的網(wǎng)絡(luò)通信,Java語言提供的網(wǎng)絡(luò)功能有四大類:URL、InetAddress、Socket、Datagram。InetAddress面向的是IP層,用于標(biāo)識網(wǎng)絡(luò)上的硬件資源。URL面向的應(yīng)用層,通過URL,Java程序可以直接送出或讀入網(wǎng)絡(luò)上的數(shù)據(jù)。Sockets和Datagram面向的則是傳輸層。Sockets使用的是TCP協(xié)議,這是傳統(tǒng)網(wǎng)絡(luò)程序最常用的方式,可以想象為兩個不同的程序通過網(wǎng)絡(luò)的通信信道進(jìn)行通信。Datagram則使用UDP協(xié)議,是另一種網(wǎng)絡(luò)傳輸方式,它把數(shù)據(jù)的目的地記錄在數(shù)據(jù)包中,然后直接放在網(wǎng)絡(luò)上。1416.1.4Java語言的網(wǎng)絡(luò)編程包中的主要的類面向IP層的類:InetAddress面向應(yīng)用層的類:URL、URLConnection面向傳輸層的類:TCP協(xié)議相關(guān)類:Socket、ServerSocketUDP協(xié)議相關(guān)類:DatagramPacket、DatagramSocket、MulticastSocket可能產(chǎn)生的異常:BindException、ConnectException、MalformedURLException、NoRouteToHostException、ProtocolException、SocketException、UnknownHostException、UnknownServiceException1516.2

URL編程在Java中,包里面的類是進(jìn)行網(wǎng)絡(luò)編程的,其中.URL類和.URLConnection類使編程者能很方便的利用URL在Internet上進(jìn)行網(wǎng)絡(luò)通信。1616.2.1

創(chuàng)建URL對象類URL提供了很多構(gòu)造方法來生成一個URL對象:publicURL(String

spec)publicURL(URLcontext,Stringspec)publicURL(String

protocol,String

host,String

file)publicURL(String

protocol,String

host,int

port,String

file)以下是一些具體的構(gòu)造實例:URLurl1=newURL(“”);URLbase=newURL(“”);URLurl2=newURL(base,“/mywork1.html”);URLurl4=newURL(“http”,“”,“/lyw/test.html”);URLurl5=newURL(“http”,“”,8080,“/java/network.html”);1716.2.1

創(chuàng)建URL對象一個URL對象生成后,其屬性是不能被改變的,但可以通過它給定的方法來獲取這些屬性:getDefaultport():

返回缺省的端口號。getFile():

獲得URL指定資源的完整文件名getHost():

返回主機名。getPath():

返回指定資源文件目錄和文件名getPort():

返回端口號,默認(rèn)-1getProtocol():

返回表示URL中協(xié)議的字符串對象。getRef():

返回URL中的HTML文檔標(biāo)記,即#號標(biāo)記。getUserInfo():

返回用戶信息。toExternalForm():

返回完整的URL字符串。toString():

返回完整URL字符串。1816.2.1

創(chuàng)建URL對象在構(gòu)造URL對象而使用其構(gòu)造方法時會拋出MalformedURLException非運行時異常,因此生成URL對象時,必須對這一異常進(jìn)行處理。例如: try { URLmyURL=newURL(“/”); } catch(MalformedURLExceptione) { e.printStackTrace(); }1916.2.2

使用URL類訪問資源【例16.1】通過URL直接讀取網(wǎng)上服務(wù)器中的文件內(nèi)容。本例是利用URL訪問/index.html文件,即訪問教育網(wǎng)上的index.html文件。讀取網(wǎng)絡(luò)上文件內(nèi)容一般分3個步驟。一是創(chuàng)建URL類的對象;二是利用URL類的openStream()方法獲得對應(yīng)的InputStream類的對象;三是通過InputStream對象來讀取文件內(nèi)容。20App16_1.java21App16_1.java2216.3用Java語言實現(xiàn)底層網(wǎng)絡(luò)通信用Java語言實現(xiàn)計算機網(wǎng)絡(luò)的底層通信,就是用Java程序?qū)崿F(xiàn)網(wǎng)絡(luò)通信協(xié)議所規(guī)定的功能的操作,這是Java語言網(wǎng)絡(luò)編程的一部分。2316.3.1InetAddress程序設(shè)計類InetAddress可以用于標(biāo)識網(wǎng)絡(luò)上的硬件資源,它提供了一系列方法以描述、獲取及使用網(wǎng)絡(luò)資源。InetAddress類沒有構(gòu)造函數(shù),因此不能用new來構(gòu)造一個InetAddress實例。通常是用它提供的靜態(tài)方法來獲?。?/p>

publicstaticInetAddressgetByName(String

host)

:host可以是一個機器名,也可以是一個形如“%d.%d.%d.%d”的IP地址或一個DSN域名。

publicstaticInetAddressgetLocalHost() publicstaticInetAddress[]getAllByName(String

host)這三個方法通常會產(chǎn)生UnknownHostException例外,應(yīng)在程序中捕獲處理。2416.3.1InetAddress程序設(shè)計以下是InetAddress類的幾個主要方法:publicbyte[]getAddress():獲得本對象的IP地址(存放在字節(jié)數(shù)組中)。publicString

getHostAddress():獲得本對象的IP地址“%d.%d.%d.%d”。publicString

getHostName():獲得本對象的機器名。獲得本地主機的IP地址:InetAddressaddr=InetAddress.getLocalHost();25App16_2.java編寫一個Java應(yīng)用程序,直接查詢自己主機的IP地址和Internet上WWW服務(wù)器的IP地址。26App16_2.java2716.3.2基于連接的Socket通信程序設(shè)計Socket通信屬于網(wǎng)絡(luò)底層通信,它是網(wǎng)絡(luò)上運行的兩個程序間雙向通信的一端,它既可以接受請求,也可以發(fā)送請求,利用它可以較方便地進(jìn)行網(wǎng)絡(luò)上的數(shù)據(jù)傳輸。Socket是實現(xiàn)客戶與服務(wù)器(Client/Server)模式的通信方式,它首先需要建立穩(wěn)定的連接,然后以流的方式傳輸數(shù)據(jù),實現(xiàn)網(wǎng)絡(luò)通信。Socket原意為“插座”,在通信領(lǐng)域中譯為“套接字”,意思是將兩個物品套在一起,在網(wǎng)絡(luò)通信里的含義就是建立一個連接。2816.3.2基于連接的Socket通信程序設(shè)計1.Socket通信機制的基本概念(1)建立連接當(dāng)兩臺計算機進(jìn)行通信時,首先要在兩者之間建立一個連接,也就是兩者分別運行不同的程序,由一端發(fā)出連接請求,另一端等候連接請求。當(dāng)?shù)群蚨耸盏秸埱蟛⒔邮苷埱蠛?,兩個程序就建立起一個連接,之后通過這個連接可以進(jìn)行數(shù)據(jù)交換。此時,請求方稱為客戶端,接收方稱為服務(wù)器端。應(yīng)用在這兩端的TCPSocket分別稱為服務(wù)器Socket和客戶Socket?;驹眍愃朴陔娫捪到y(tǒng)。2916.3.2基于連接的Socket通信程序設(shè)計(2)連接地址為了建立連接,需要有一個程序向另一臺計算機上的程序發(fā)出請求,其中,能夠唯一識別對方機器的,就是計算機的名稱或IP地址,稱為連接地址,類似于電話系統(tǒng)中的電話號碼。計算機上的每個程序有一個唯一的端口號,通過端口號指定要連接的程序。所以一個完整的連接應(yīng)該是IP+端口。兩個程序進(jìn)行連接之前要約定好端口號。有服務(wù)器端分配端口號并等候請求,客戶端利用這個端口號發(fā)出連接請求,當(dāng)兩個程序所設(shè)定的端口號一致時連接成功。3016.3.2基于連接的Socket通信程序設(shè)計(3)TCP/IPSocket通信Socket在TCP/IP協(xié)議中定義,針對一個特定的連接,每臺機器上都有一個“套接字”,可以想象在它們之間有一條虛擬的“線纜”,線纜的每一端都插入一個“套接字”或“插座”里。在Java語言中,服務(wù)器端套接字使用ServerSocket類,客戶端套接字使用Socket類。3116.3.2基于連接的Socket通信程序設(shè)計SOCKET連接過程根據(jù)連接啟動的方式以及本地套接字要連接的目標(biāo),套接字之間的連接過程可以分為三個步驟:服務(wù)器監(jiān)聽,客戶端請求,連接確認(rèn)。服務(wù)器監(jiān)聽:服務(wù)器端套接字并不定位具體的客戶端套接字,而是處于等待連接的狀態(tài),實時監(jiān)控網(wǎng)絡(luò)狀態(tài)??蛻舳苏埱螅菏侵赣煽蛻舳说奶捉幼痔岢鲞B接請求,要連接的目標(biāo)是服務(wù)器端的套接字。為此,客戶端的套接字必須首先描述它要連接的服務(wù)器的套接字,指出服務(wù)器端套接字的地址和端口號,然后就向服務(wù)器端套接字提出連接請求。連接確認(rèn):是指當(dāng)服務(wù)器端套接字監(jiān)聽到或者說接收到客戶端套接字的連接請求,它就響應(yīng)客戶端套接字的請求,建立一個新的線程,把服務(wù)器端套接字的描述發(fā)給客戶端,一旦客戶端確認(rèn)了此描述,連接就建立好了。而服務(wù)器端套接字繼續(xù)處于監(jiān)聽狀態(tài),繼續(xù)接收其他客戶端套接字的連接請求。3216.3.2基于連接的Socket通信程序設(shè)計3316.3.2基于連接的Socket通信程序設(shè)計2.客戶端Socket類與服務(wù)器端ServerSocket類在Java中,通信端點由.Socket類(客戶端)或.ServerSocket類(服務(wù)器端)表示。位于兩臺不同機器上的應(yīng)用軟件通過網(wǎng)絡(luò)連接發(fā)送和接收字節(jié)流,從而實現(xiàn)通信。其中,Socket類代表的是客戶端,它是一個連接遠(yuǎn)程服務(wù)器應(yīng)用時臨時創(chuàng)建的端點。ServerSocker類代表的是服務(wù)器端,它啟動后等待來自客戶端的連接請求;一旦接收到請求,ServerSocket創(chuàng)建一個Socket實例來處理與該客戶端的通信。對于服務(wù)器應(yīng)用,我們不知道客戶端應(yīng)用什么時候會試圖連接服務(wù)器,服務(wù)器必須一直處于等待連接的狀態(tài)。socket類當(dāng)客戶程序需要與服務(wù)器程序通訊的時候,客戶程序在客戶機創(chuàng)建一個socket對象。3416.3.2基于連接的Socket通信程序設(shè)計socket類構(gòu)造方法publicSocket(String

host,int

port)

創(chuàng)建一個流套接字并將其連接到指定主機上的指定端口號。

publicSocket(InetAddressaddress,int

port)創(chuàng)建一個流套接字并將其連接到指定IP地址的指定端口號publicSocket(String

host,int

port,InetAddress

localAddr,int

localPort)創(chuàng)建一個套接字并將其連接到指定遠(yuǎn)程地址上的指定遠(yuǎn)程端口publicSocket(InetAddress

address,int

port,InetAddress

localAddr,int

localPort)創(chuàng)建一個套接字并將其連接到指定遠(yuǎn)程地址上的指定遠(yuǎn)程端口這些方法都將拋出例外IOException,程序中需要捕獲處理。兩個構(gòu)造函數(shù)都創(chuàng)建了一個基于Socket的連接服務(wù)器端流套接字的流套接字。3516.3.2基于連接的Socket通信程序設(shè)計Socket類常用方法

Socket的輸入/輸出流管理publicInputStreamgetInputStream()publicOutputStreamgetOutputStream()這些方法都將拋出例外IOException,程序中需要捕獲處理。

關(guān)閉Socketpublicvoidclose()throwsIOException3616.3.2基于連接的Socket通信程序設(shè)計Socket類常用方法設(shè)置/獲取Socket數(shù)據(jù)publicInetAddressgetInetAddress():獲取創(chuàng)建Socket對象時指定的計算機IP地址。publicInetAddressgetLocalAddress():獲取創(chuàng)建Socket對象時客戶計算機的IP地址。publicintgetPort():獲取創(chuàng)建Socket對象時遠(yuǎn)程主機的端口號publicintgetLocalPort()publicvoidsetSoTimeout(int

timeout):設(shè)定客戶端接口所需等到的時間限度

這些方法都將拋出例外SocketException。3716.3.2基于連接的Socket通信程序設(shè)計(2)ServerSocket類ServerSocket類的作用是實現(xiàn)客戶機/服務(wù)器模式的通信方式下服務(wù)器端的套接字。構(gòu)造方法:publicServerSocket(int

port)publicServerSocket(int

port,int

backlog):支持指定數(shù)目的連接publicServerSocket(int

port,int

backlog,InetAddress

bindAddr)這些方法都將拋出例外IOException,程序中需要捕獲處理。3816.3.2基于連接的Socket通信程序設(shè)計(2)ServerSocket類主要方法publicSocketaccept()

:在服務(wù)器端的指定端口監(jiān)聽客戶端發(fā)來的連接請求,并與之連接。publicvoidclose()

:關(guān)閉SocketpublicInetAddress

getInetAddress():返回服務(wù)器的IP地址publicint

getLocalPort():取得服務(wù)器的端口號3916.3.2基于連接的Socket通信程序設(shè)計(3)Socket通信模式根據(jù)連接啟動的方式以及本地套接字要連接的目標(biāo),套接字之間的連接過程可以分為三個步驟:服務(wù)器監(jiān)聽,客戶端請求,連接確認(rèn)。服務(wù)器監(jiān)聽:服務(wù)器端套接字并不定位具體的客戶端套接字,而是處于等待連接的狀態(tài),實時監(jiān)控網(wǎng)絡(luò)狀態(tài)??蛻舳苏埱螅菏侵赣煽蛻舳说奶捉幼痔岢鲞B接請求,要連接的目標(biāo)是服務(wù)器端的套接字。為此,客戶端的套接字必須首先描述它要連接的服務(wù)器的套接字,指出服務(wù)器端套接字的地址和端口號,然后就向服務(wù)器端套接字提出連接請求。連接確認(rèn):是指當(dāng)服務(wù)器端套接字監(jiān)聽到或者說接收到客戶端套接字的連接請求,它就響應(yīng)客戶端套接字的請求,建立一個新的線程,把服務(wù)器端套接字的描述發(fā)給客戶端,一旦客戶端確認(rèn)了此描述,連接就建立好了。而服務(wù)器端套接字繼續(xù)處于監(jiān)聽狀態(tài),繼續(xù)接收其他客戶端套接字的連接請求。4016.3.2基于連接的Socket通信程序設(shè)計4116.3.2基于連接的Socket通信程序設(shè)計(3)Socket通信模式無論一個Socket通信程序的功能多么齊全、程序多么復(fù)雜,其基本結(jié)構(gòu)都是一樣的。主要分為服務(wù)器端編程和客戶端編程。服務(wù)器程序編寫:①調(diào)用ServerSocket(intport)創(chuàng)建一個服務(wù)器端套接字,并綁定到指定端口上;②調(diào)用accept(),監(jiān)聽連接請求,如果客戶端請求連接,則接受連接,返回通信套接字。③調(diào)用Socket類的getOutputStream()和getInputStream獲取輸出流和輸入流,開始網(wǎng)絡(luò)數(shù)據(jù)的發(fā)送和接收。④最后關(guān)閉通信套接字。4216.3.2基于連接的Socket通信程序設(shè)計 ServerSocket

server

=

new

ServerSocket(9998)

這條語句創(chuàng)建了一個服務(wù)器對象,這個服務(wù)器使用9998號端口。當(dāng)一個客戶端程序建立一個Socket連接,所連接的端口號為9998時,服務(wù)器對象server便響應(yīng)這個連接,并且server.accept()方法會創(chuàng)建一個Socket對象。服務(wù)器端便可以利用這個Socket對象與客戶進(jìn)行通訊。 Socketincoming=server.accept()進(jìn)而得到輸入流和輸出流,并進(jìn)行封裝 BufferedReaderin=newBufferedReader(newInputStreamReader(incoming.getInputStream())); PrintWriterout=newPrintWriter(incoming.getOutputStream(),true);4316.3.2基于連接的Socket通信程序設(shè)計隨后,就可以使用in.readLine()方法得到客戶端的輸入,也可以使用out.println()方法向客戶端發(fā)送數(shù)據(jù)。從而可以根據(jù)程序的需要對客戶端的不同請求進(jìn)行回應(yīng)。在所有通訊結(jié)束以后應(yīng)該關(guān)閉這兩個數(shù)據(jù)流,關(guān)閉的順序是先關(guān)閉輸出流,再關(guān)閉輸入流,即使用:

out.close(); in.close();4416.3.2基于連接的Socket通信程序設(shè)計(3)Socket通信模式客戶端程序編寫:①調(diào)用Socket()創(chuàng)建一個流套接字,并連接到服務(wù)器端;②調(diào)用Socket類的getOutputStream()和getInputStream獲取輸出流和輸入流,開始網(wǎng)絡(luò)數(shù)據(jù)的發(fā)送和接收。

③最后關(guān)閉通信套接字。45例16_3:服務(wù)器端Socket編程46例16_3:服務(wù)器端Socket編程監(jiān)聽狀態(tài)4748例16_3:服務(wù)器端Socket編程49例16_3:服務(wù)器端Socket編程50例16_3:客戶端Socket編程51例16_3:客戶端Socket編程5253例16_3:客戶端Socket編程54例16_3:客戶端Socket編程55例16_3:客戶端Socket編程5616.3.3無連接的Socket通信程序設(shè)計

UDP協(xié)議是無連接的協(xié)議,它以數(shù)據(jù)報作為數(shù)據(jù)傳輸?shù)妮d體。數(shù)據(jù)報是一個在網(wǎng)絡(luò)上發(fā)送的獨立信息,它的到達(dá)、到達(dá)時間以及內(nèi)容本身等都不能得到保證。數(shù)據(jù)報的大小是受限制的,每個數(shù)據(jù)報的大小限定在64KB以內(nèi)。由于UDP通信速度較快,所以常常被應(yīng)用在某些無須實時交互、準(zhǔn)確性要求不高、但傳輸速度要求較高的場合。UDP協(xié)議無需在發(fā)送方和接收方建立連接,數(shù)據(jù)報在網(wǎng)上可以以任何可能的路徑傳往目的地(分組交換)。J軟件包中的DatagramSocket類和DatagramPacket類為實現(xiàn)UDP通信提供了支持。DatagramSocket用于在程序中間建立傳送數(shù)據(jù)報的通信連接DatagramPacket則用來表示一個數(shù)據(jù)報。571.?dāng)?shù)據(jù)報方式的通信過程(1)創(chuàng)建數(shù)據(jù)報Socket;(2)構(gòu)造用于接收或發(fā)送的數(shù)據(jù)報,并調(diào)用所創(chuàng)建Socket的receive()方法進(jìn)行數(shù)據(jù)報接收或調(diào)用send()發(fā)送數(shù)據(jù)報。(3)通信結(jié)束,關(guān)閉Socket。16.3.3無連接的Socket通信程序設(shè)計582.DatagramSocket類DatagramSocket類的三個構(gòu)造方法如下:(1)DatagramSocket():創(chuàng)建DatagramSocket對象并與本地主機某個可用端口相連。(2)DatagramSocket(intport):創(chuàng)建DatagramSocket對象并與指定端口相連。(3)DatagramSocket(intport,InetAddressiaddr):創(chuàng)建一個于本地地址綁定的DatagramSocket對象。16.3.3無連接的Socket通信程序設(shè)計5916.3.3無連接的Socket通信程序設(shè)計DatagramSocket類的常用方法如下:(1)voidreceive(DatagramPacketpacket)throwsIOExceptionreceive()方法將使程序中的線程一直處于阻塞狀態(tài),直到從當(dāng)前socket中接收到信息時,將收到的信息存儲在receive()方法的對象參數(shù)packet的存儲機構(gòu)中。(2)voidsend(DatagramPacketpacket)throwsIOExceptionsend()方法將其參數(shù)DatagramPacket對象packet中包含的數(shù)據(jù)報文發(fā)送到所指定的IP地址主機的指定端口。6016.3.3無連接的Socket通信程序設(shè)計(3)voidsetSotimeout(inttimeout)throwsIOException當(dāng)程序調(diào)用DatagramSocket的receive方法以讀取數(shù)據(jù)后,程序?qū)⑻幱谧枞麪顟B(tài),知道setSoTimeout方法所設(shè)置時間超時為止。(4)voidclose()關(guān)閉數(shù)據(jù)報套接字,它不會拋出異常對象。61基于UDP的socket編程接收端(Server)發(fā)送端(Client)DatagramSocket(intport)DatagramSocket()DatagramPacket(byte[]buf,intlength)DatagramSocket.receive(DatagramPacketp)DatagramSocket.close()DatagramSocket.close()DatagramPacket(byte[

溫馨提示

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

評論

0/150

提交評論