java套接字編程常用類(lèi)_第1頁(yè)
java套接字編程常用類(lèi)_第2頁(yè)
java套接字編程常用類(lèi)_第3頁(yè)
java套接字編程常用類(lèi)_第4頁(yè)
java套接字編程常用類(lèi)_第5頁(yè)
已閱讀5頁(yè),還剩32頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

Socket編程計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院網(wǎng)絡(luò)工程教研室趙秀梅Socket編程1、包4、Socket類(lèi)3、ServerSocket類(lèi)

5、數(shù)據(jù)報(bào)式套接字中所需的類(lèi)2、InetAddress類(lèi)包簡(jiǎn)介包:用于網(wǎng)絡(luò)通信的類(lèi)。.InetAddress:互聯(lián)網(wǎng)地址類(lèi).URL:統(tǒng)一資源定位類(lèi).Socket:套接字類(lèi).ServerSocket:效勞器套接字類(lèi).DatagramPacket:數(shù)據(jù)報(bào)類(lèi).DatagramSocket:數(shù)據(jù)報(bào)套接字類(lèi)Socket編程2、InetAddress類(lèi)功能簡(jiǎn)介InetAddress類(lèi)又稱(chēng)為互聯(lián)網(wǎng)地址類(lèi),。該類(lèi)的對(duì)象是封裝計(jì)算機(jī)名稱(chēng)和IP地址的實(shí)例??梢允褂弥鳈C(jī)名來(lái)獲取InetAddress的實(shí)例,或者使用IP地址來(lái)構(gòu)造InetAddress的實(shí)例。InetAddress對(duì)域名進(jìn)行解析是使用本地機(jī)器配置或者網(wǎng)絡(luò)命名效勞〔如域名系統(tǒng)DNS〕和網(wǎng)絡(luò)信息效勞〔NetworkInformationService,NIS〕來(lái)實(shí)現(xiàn)的。Socket編程獲取InetAddress類(lèi)對(duì)象的方法InetAddress的構(gòu)造函數(shù)不是公開(kāi)的〔public〕,所以需要通過(guò)它提供的靜態(tài)方法來(lái)獲取。1〕publicstaticInetAddressgetByName(Stringhostname);根據(jù)給定的主機(jī)名hostname,InetAddress會(huì)嘗試做連接DNS效勞器,并返回該主機(jī)名對(duì)應(yīng)的InetAddress對(duì)象。如果找不到主時(shí)機(jī)拋出UnknownHostException異常。InetAddressi=InetAddress.getByName(“sina”);System.out.println(i);2、InetAddress類(lèi)Socket編程獲取InetAddress類(lèi)對(duì)象的方法1〕publicstaticInetAddressgetByName(Stringhostname);hostname的值可為IP地址字符串,此時(shí)可以利用InetAddress對(duì)象的getHostName()方法按IP地址反向查找。如果沒(méi)有查到相應(yīng)的主機(jī)名,getHostName()返回的點(diǎn)分十進(jìn)制的地址字符串。InetAddressi=InetAddress.getByName(“”);System.out.println(i); System.out.println(i.getHostName());//查到相應(yīng)的主機(jī)名2、InetAddress類(lèi)Socket編程獲取InetAddress類(lèi)對(duì)象的方法1〕publicstaticInetAddressgetByName(Stringhostname);hostname的值可為IP地址字符串,此時(shí)可以利用InetAddress對(duì)象的getHostName()方法按IP地址反向查找。如果沒(méi)有查到相應(yīng)的主機(jī)名,getHostName()返回的點(diǎn)分十進(jìn)制的地址字符串。InetAddressi=InetAddress.getByName(“47”);System.out.println(i);

System.out.println(i.getHostName());//沒(méi)查到相應(yīng)的主機(jī)名2、InetAddress類(lèi)Socket編程獲取InetAddress類(lèi)對(duì)象的方法2〕publicstaticInetAddress[]getAllByName(Stringhostname);獲取具有相同名字hostname的一組InetAddress對(duì)象。如果找不到主時(shí)機(jī)拋出UnknownHostException異常。InetAddress[]inetOfbaidu= InetAddress.getAllByName(“baidu");for(intj=0;j<inetOfbaidu.length;j++){(inetOfbaidu[j]);}2、InetAddress類(lèi)Socket編程獲取InetAddress類(lèi)對(duì)象的方法3〕publicstaticInetAddressgetLocalHost();返回本機(jī)的InetAddress對(duì)象。查找出錯(cuò),拋出UnknownHostExceptionInetAddressipOfLocal=InetAddress.getLocalHost();System.out.println(ipOfLocal);2、InetAddress類(lèi)Socket編程獲取InetAddress類(lèi)對(duì)象的方法4〕publicstaticInetAddressgetByAddress(byte[]addr)根據(jù)給定的addr,返回其對(duì)應(yīng)的InetAddress對(duì)象。2、InetAddress類(lèi)Socket編程byte[]address={(byte)107,(byte)23,(byte)216,(byte)196};InetAddressx=InetAddress.getByAddress(address);System.out.println(x);System.out.println(x.getHostName());3.1、ServerSocket類(lèi)簡(jiǎn)介類(lèi)ServerSocket類(lèi)用在效勞器端,偵聽(tīng)和響應(yīng)客戶(hù)端的連接請(qǐng)求。ServerSocket類(lèi)的主要任務(wù):效勞器端耐心地等候客戶(hù)端的連接請(qǐng)求,一旦客戶(hù)端應(yīng)用程序申請(qǐng)建立一個(gè)Socket連接,ServerSocket類(lèi)就會(huì)通過(guò)accept()方法返回一個(gè)對(duì)應(yīng)的效勞器端Socket對(duì)象,以便進(jìn)行直接通信。從兩臺(tái)計(jì)算機(jī)連接成功時(shí)起,效勞器端與客戶(hù)端就得到了一個(gè)真正的“Socket-Socket”連接。Socket編程3、ServerSocket構(gòu)造方法重載形式之一publicServerSocket(intport)throwsIOException創(chuàng)立一個(gè)指定端口號(hào)的效勞器端的ServerSocket對(duì)象。連接請(qǐng)求隊(duì)列的最大隊(duì)列長(zhǎng)度為50,假設(shè)連接請(qǐng)求到達(dá)時(shí)隊(duì)列已滿(mǎn),那么拒絕連接。假設(shè)無(wú)法創(chuàng)立Socket并綁定于所請(qǐng)求的端口號(hào)那么拋出IOException異常。參數(shù)port:端口號(hào)。3.2、ServerSocket類(lèi)構(gòu)造方法Socket編程構(gòu)造方法重載形式之二publicServerSocket(int

port,int

backlog)throwsIOException參數(shù):backlog:連接請(qǐng)求隊(duì)列的最大長(zhǎng)度。

3.2、ServerSocket類(lèi)構(gòu)造方法Socket編程構(gòu)造方法重載形式之三publicServerSocket(intport,intbacklog,InetAddressbindAddr)throwsIOException參數(shù):bindAddr:需指定的要綁定到的本地IP地址。主要用于在多IP地址系統(tǒng)上運(yùn)行的效勞器。效勞器Socket只在指定的地址偵聽(tīng)入站連接,不會(huì)偵聽(tīng)通過(guò)主機(jī)其他地址進(jìn)入的連接。其他構(gòu)造函數(shù)默認(rèn)綁定本地主機(jī)的所有IP地址。當(dāng)bindAddr為null時(shí),缺省地接受對(duì)任何所有本地IP地址的連接。3.2、ServerSocket類(lèi)構(gòu)造方法Socket編程1〕publicInetAddressgetInetAddress()返回效勞器Socket的本地地址信息。2〕publicintgetLocalPort()效勞器socket正在監(jiān)聽(tīng)的端口號(hào)。3〕publicStringtoString()返回該socket的字符串表示3.3、ServerSocket類(lèi)其他方法Socket編程4〕publicSocketaccept()throwsIOException功能:在效勞器端指定端口偵聽(tīng)客戶(hù)端發(fā)出的連接請(qǐng)求。該方法一直阻塞直到連接成功。如果效勞器端與客戶(hù)端連接成功,該方法將返回一個(gè)新的Socket對(duì)象,通過(guò)該Socket對(duì)象與客戶(hù)端的Socket對(duì)象進(jìn)行通信。假設(shè)等待連接時(shí)發(fā)生I/O錯(cuò)誤那么拋出IOException異常。3.3、ServerSocket類(lèi)其他方法Socket編程類(lèi)Java用來(lái)實(shí)現(xiàn)客戶(hù)端TCP操作的根底類(lèi)。在Java編程中Socket類(lèi)負(fù)責(zé)一切與TCP有關(guān)的操作,包括連接的建立、傳輸、連接關(guān)閉及Socket選項(xiàng)的設(shè)置等操作。Socket類(lèi)的輸入輸出都是通過(guò)流來(lái)實(shí)現(xiàn)的。Socket編程4、Socket類(lèi)4.1、Socket類(lèi)構(gòu)造方法Socket類(lèi)的構(gòu)造方法Socket對(duì)象的創(chuàng)立可通過(guò)使用Socket類(lèi)的構(gòu)造方法完成。構(gòu)造方法的功能:1〕創(chuàng)立Socket對(duì)象2〕客戶(hù)端負(fù)責(zé)呼叫,嘗試向效勞器發(fā)起連接請(qǐng)求,連接效勞器端的Socket。通過(guò)構(gòu)造方法可以測(cè)試能否和主機(jī)的某個(gè)端口建立連接。Socket編程構(gòu)造方法重載形式之一publicSocket(Stringhost,intport)throws UnknownHostException,IOException參數(shù):host:效勞器主機(jī)名。port:端口號(hào)。功能:在客戶(hù)端以指定的效勞器host和端口號(hào)port創(chuàng)立一個(gè)Socket對(duì)象,并向效勞器發(fā)出連接請(qǐng)求。在二者建立連接的過(guò)程中,由客戶(hù)機(jī)負(fù)責(zé)發(fā)起呼叫。4.1、Socket類(lèi)構(gòu)造方法Socket編程構(gòu)造方法重載形式之一publicSocket(Stringhost,intport)throws UnknownHostException,IOException異常的拋出:UnknownHostException:假設(shè)域名效勞器無(wú)法解析該效勞器名或域名效勞器沒(méi)有運(yùn)行,此時(shí)host無(wú)法可知,那么拋出UnknownHostException異常IOException:假設(shè)生成Socket時(shí)發(fā)生I/O錯(cuò)誤那么拋出IOException異常。4.1、Socket類(lèi)構(gòu)造方法Socket編程構(gòu)造方法重載形式之二publicSocket(InetAddressaddr,intport)throwsIOException參數(shù):addr:效勞器地址信息InetAddress類(lèi)對(duì)象4.1、Socket類(lèi)構(gòu)造方法Socket編程構(gòu)造方法重載形式之三publicSocket(InetAddressaddress,intport,InetAddresslocalAddr,intlocalPort)throwsIOException功能:生成一個(gè)Socket并且連接到由address指定的效勞器的端口port上。該Socket將捆綁到由localAddr指定的本地主機(jī)的localPort端口上。4.1、Socket類(lèi)構(gòu)造方法Socket編程publicInetAddressgetInetAddress()返回連接到socket的遠(yuǎn)程主機(jī)的IP地址信息對(duì)象。publicInetAddressgetLocalAddress()返回socket關(guān)聯(lián)的本地主機(jī)的IP地址信息對(duì)象。publicintgetPort()返回socket連接到的遠(yuǎn)程效勞的端口號(hào)。publicintgetLocalPort()返回該Socket綁定在本地計(jì)算機(jī)上的端口號(hào)。4.2、Socket類(lèi)其他方法Socket編程publicInputStreamgetInputStream()throwsIOException為當(dāng)前的socket對(duì)象創(chuàng)立輸入流。publicOutputStreamgetOutputStream()throws IOException為當(dāng)前的socket對(duì)象創(chuàng)立輸出流。publicStringtoString()轉(zhuǎn)換該Socket成一個(gè)String字符串表示。publicsynchronizedvoidclose()throwsIOException關(guān)閉建立的Socket連接。當(dāng)通信結(jié)束時(shí),應(yīng)調(diào)用該方法關(guān)閉Socket連接。假設(shè)在關(guān)閉Socket連接時(shí)發(fā)生I/O錯(cuò)誤那么拋出IOException異常。4.2、Socket類(lèi)其他方法Socket編程Socket編程5.2數(shù)據(jù)報(bào)式套接字中所需的類(lèi)DatagramPacket類(lèi)數(shù)據(jù)報(bào)封裝類(lèi)。把具體的要傳輸?shù)男畔?,包含IP地址,端口號(hào)和需要傳輸?shù)臄?shù)據(jù)等封裝在稱(chēng)為數(shù)據(jù)報(bào)〔Datagram〕的UDP包中。DatagramSocket類(lèi)用于收發(fā)UDP數(shù)據(jù)報(bào)的套接字接口類(lèi)。為發(fā)送數(shù)據(jù),要將數(shù)據(jù)封裝到DatagramPacket中,使用DatagramSocket發(fā)送該包。要接收數(shù)據(jù),要從DatagramSocket中接收一個(gè)DatagramPakcet對(duì)象,然后解析該包的內(nèi)容Socket編程5.3

DatagramSocket類(lèi)功能該類(lèi)表示用來(lái)發(fā)送和接收數(shù)據(jù)報(bào)的套接字〔Socket〕。要收發(fā)DatagramPacket,必須創(chuàng)立一個(gè)數(shù)據(jù)報(bào)套接字DatagramSocket。構(gòu)造方法publicDatagramSocket()throwsSocketException功能:創(chuàng)立用于數(shù)據(jù)報(bào)通信的socket對(duì)象,由本地主機(jī)自動(dòng)指定的一個(gè)可用的端口號(hào)。DatagramSocketsocket=newDatagramSocket();//創(chuàng)立一個(gè)用于收發(fā)數(shù)據(jù)報(bào)的DatagramSocket對(duì)象Socket編程5.3

DatagramSocket類(lèi)構(gòu)造方法publicDatagramSocket(intport)throwsSocketException功能:創(chuàng)立用于數(shù)據(jù)報(bào)通信的socket對(duì)象,并且把它綁定到本地主機(jī)指定的端口port。publicDatagramSocket(intport,InetAddressaddr)throwsSocketException功能:創(chuàng)立用于數(shù)據(jù)報(bào)通信的socket對(duì)象,并綁定到指定的本地地址addr的指定端口port。DatagramSocketsocket=newDatagramSocket(3000);//在端口3000創(chuàng)立用于通信的Socket對(duì)象Socket編程5.3

DatagramSocket類(lèi)常用方法publicvoidsend(DatagramPacketp)throwsIOException功能:將數(shù)據(jù)報(bào)p發(fā)送出去。publicsynchronizedvoidreceive(DatagramPacketp)throwsIOException功能:從網(wǎng)絡(luò)接收一個(gè)UDP數(shù)據(jù)報(bào)包,并存儲(chǔ)在DatagramPacket類(lèi)對(duì)象p中。該數(shù)據(jù)報(bào)p還包含發(fā)送方的IP地址和發(fā)送方主機(jī)的端口號(hào)。Socket編程5.3

DatagramSocket類(lèi)publicintgetLocalPort()功能:獲取該socket綁定的本地主機(jī)的端口號(hào)。

publicvoidclose()功能:釋放該數(shù)據(jù)報(bào)socket所占用的端口。常用方法publicInetAddressgetLocalAddress()功能:獲取該socket綁定的本地地址。

Socket編程5.4

DatagramPacket類(lèi)功能是進(jìn)行數(shù)據(jù)報(bào)通信的根本單位。包含了IP地址、端口號(hào)和需要傳輸?shù)臄?shù)據(jù)等。在發(fā)送和接收數(shù)據(jù)報(bào)時(shí),要?jiǎng)?chuàng)立DatagramPakcet類(lèi)對(duì)象作為數(shù)據(jù)的載體。構(gòu)造方法之一:發(fā)送用的數(shù)據(jù)報(bào)publicDatagramPacket(byteibuf[],intilength,InetAddressiaddr,intiport)構(gòu)造方法之二:接收用的數(shù)據(jù)報(bào)publicDatagramPacket(byte

ibuf[],intilength)Socket編程5.4

DatagramPacket類(lèi)構(gòu)造方法之一:發(fā)送用的數(shù)據(jù)報(bào)publicDatagramPacket(byteibuf[],intilength,InetAddressiaddr,intiport)功能:創(chuàng)立一個(gè)用于發(fā)送數(shù)據(jù)報(bào)的DatagramPacket類(lèi)對(duì)象。參數(shù):ibuf:存儲(chǔ)數(shù)據(jù)包的緩沖區(qū)。ilength:發(fā)送數(shù)據(jù)包的長(zhǎng)度,必須小于等于ibuf.length。iaddr:數(shù)據(jù)報(bào)要發(fā)送到的目的IP地址。iport:數(shù)據(jù)報(bào)要發(fā)送到的目的地址的端口號(hào)。Socket編程5.4

DatagramPacket類(lèi)構(gòu)造方法之一:發(fā)送用的數(shù)據(jù)報(bào)publicDatagramPacket(byteibuf[],intilength,InetAddressiaddr,intiport)舉例:Stringdate=newDate().toString();//獲取效勞器當(dāng)前時(shí)間buf=date.getBytes();//將當(dāng)前日期時(shí)間存入字節(jié)數(shù)組bufpacket=newDatagramPacket(buf,buf.length,addr,port);//構(gòu)造發(fā)送數(shù)據(jù)報(bào)包socket.send(packet);//發(fā)送數(shù)據(jù)報(bào)Socket編程5.4

DatagramPacket類(lèi)構(gòu)造方法之一:接收用的數(shù)據(jù)報(bào)publicDatagramPacket(byteibuf[],intilength)功能:創(chuàng)立一個(gè)用于接收數(shù)據(jù)報(bào)的DatagramPacket類(lèi)對(duì)象。參數(shù):ibuf:存儲(chǔ)數(shù)據(jù)包的緩沖區(qū)。在數(shù)據(jù)報(bào)通信中,發(fā)送和接收一個(gè)數(shù)據(jù)報(bào),都需提供一個(gè)緩沖區(qū),用來(lái)安置發(fā)送和接收到的數(shù)據(jù)報(bào)。ilength:接收數(shù)據(jù)包的長(zhǎng)度,必須小于等于ibuf.length。舉例:DatagramPacketpacket=newDatagramPacket(buf,buf.length);socket.receive(packet);//接收數(shù)據(jù)報(bào)Socket編程5.4

DatagramPacket類(lèi)常用方法之解析數(shù)據(jù)報(bào)的方法〔1〕publicsynchronizedInetAddressgetAddress()功能:返回存放在接收或發(fā)送的數(shù)據(jù)報(bào)中的遠(yuǎn)程主機(jī)的IP地址?!?〕publicsynchronizedintgetPort()功能:返回存放在接收或發(fā)送的數(shù)據(jù)報(bào)中的遠(yuǎn)程端口號(hào)?!?〕publicsynchronizedbyte[]getData()功能:返回一個(gè)字節(jié)數(shù)組,其中包含數(shù)據(jù)報(bào)中的數(shù)據(jù)?!?〕publicsynchronizedintgetLength()功能:返回?cái)?shù)據(jù)報(bào)中數(shù)據(jù)的長(zhǎng)度

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論