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

下載本文檔

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

文檔簡(jiǎn)介

1、Socket 編程,Socket編程,1、包,4、Socket類,3、ServerSocket類,5、數(shù)據(jù)報(bào)式套接字中所需的類,2、InetAddress類,包簡(jiǎn)介,包:用于網(wǎng)絡(luò)通信的類。 .InetAddress:互聯(lián)網(wǎng)地址類 .URL:統(tǒng)一資源定位類 .Socket:套接字類 .ServerSocket:服務(wù)器套接字類 .DatagramPacket:數(shù)據(jù)報(bào)類 .DatagramSocket:數(shù)據(jù)報(bào)套接字類,Socket編程,2、InetAddress類,功能簡(jiǎn)介 InetAddress類又稱為互聯(lián)網(wǎng)地址類,。 該類的對(duì)象是封裝計(jì)算機(jī)名稱和IP地址的實(shí)例。 可以使用主機(jī)名來獲取InetAd

2、dress的實(shí)例,或者使用IP地址來構(gòu)造InetAddress的實(shí)例。 InetAddress對(duì)域名進(jìn)行解析是使用本地機(jī)器配置或者網(wǎng)絡(luò)命名服務(wù)(如域名系統(tǒng)DNS)和網(wǎng)絡(luò)信息服務(wù)(Network Information Service,NIS)來實(shí)現(xiàn)的。,Socket編程,獲取InetAddress類對(duì)象的方法 InetAddress的構(gòu)造函數(shù)不是公開的(public),所以需要通過它提供的靜態(tài)方法來獲取。 1)public static InetAddress getByName(String hostname); 根據(jù)給定的主機(jī)名hostname,InetAddress會(huì)嘗試做連接DNS服務(wù)

3、器,并返回該主機(jī)名對(duì)應(yīng)的InetAddress 對(duì)象。 如果找不到主機(jī)會(huì)拋出UnknownHostException異常。 InetAddress i= InetAddress.getByName(“”); System.out.println(i); ,2、InetAddress類,Socket編程,獲取InetAddress類對(duì)象的方法 1)public static InetAddress getByName(String hostname); hostname的值可為IP地址字符串,此時(shí)可以利用InetAddress對(duì)象的getHostName( )方法按IP地址反向查找。 如果沒有查

4、到相應(yīng)的主機(jī)名,getHostName( )返回的點(diǎn)分十進(jìn)制的地址字符串。 InetAddress i= InetAddress.getByName(“107.23.216.196”); System.out.println(i); /107.23.216.196 System.out.println(i.getHostName(); /查到相應(yīng)的主機(jī)名 ec2-107-23-216-pute-,2、InetAddress類,Socket編程,獲取InetAddress類對(duì)象的方法 1)public static InetAddress getByName(String hostname);

5、hostname的值可為IP地址字符串,此時(shí)可以利用InetAddress對(duì)象的getHostName( )方法按IP地址反向查找。 如果沒有查到相應(yīng)的主機(jī)名,getHostName( )返回的點(diǎn)分十進(jìn)制的地址字符串。 InetAddress i= InetAddress.getByName(“60.215.128.247”); System.out.println(i); /60.215.128.247 System.out.println(i.getHostName(); /沒查到相應(yīng)的主機(jī)名 60.215.128.247,2、InetAddress類,Socket編程,獲取InetAdd

6、ress類對(duì)象的方法 2)public static InetAddress getAllByName (String hostname); 獲取具有相同名字hostname的一組InetAddress 對(duì)象。 如果找不到主機(jī)會(huì)拋出UnknownHostException異常。 InetAddress inetOfbaidu= InetAddress.getAllByName(“); for(int j=0;jinetOfbaidu.length;j+) System.out.println(inetOfbaiduj); ,2、InetAddress類,Socket編程, ,獲取InetAdd

7、ress類對(duì)象的方法 3)public static InetAddress getLocalHost(); 返回本機(jī)的InetAddress對(duì)象。 查找出錯(cuò),拋出UnknownHostException InetAddress ipOfLocal = InetAddress.getLocalHost(); System.out.println(ipOfLocal); Lenovo-PC/192.168.1.102,2、InetAddress類,Socket編程,獲取InetAddress類對(duì)象的方法 4)public static InetAddress getByAddress(byte

8、addr) 根據(jù)給定的addr,返回其對(duì)應(yīng)的InetAddress對(duì)象。,2、InetAddress類,Socket編程,byte address = (byte)107,(byte)23,(byte)216,(byte)196; InetAddress x = InetAddress.getByAddress(address); System.out.println(x); System.out.println(x.getHostName(); /107.23.216.196 ec2-107-23-216-pute-,3.1、ServerSocket類簡(jiǎn)介,J.ServerSocket類 S

9、erverSocket類用在服務(wù)器端,偵聽和響應(yīng)客戶端的連接請(qǐng)求。 ServerSocket類的主要任務(wù): 服務(wù)器端耐心地等候客戶端的連接請(qǐng)求,一旦客戶端應(yīng)用程序申請(qǐng)建立一個(gè)Socket連接,ServerSocket類就會(huì)通過accept()方法返回一個(gè)對(duì)應(yīng)的服務(wù)器端Socket對(duì)象,以便進(jìn)行直接通信。 從兩臺(tái)計(jì)算機(jī)連接成功時(shí)起,服務(wù)器端與客戶端就得到了一個(gè)真正的“Socket-Socket”連接。,Socket編程,3、ServerSocket,構(gòu)造方法重載形式之一 public ServerSocket(int port) throws IOException 創(chuàng)建一個(gè)指定端口號(hào)的服務(wù)器端

10、的ServerSocket對(duì)象。 連接請(qǐng)求隊(duì)列的最大隊(duì)列長(zhǎng)度為50,若連接請(qǐng)求到達(dá)時(shí)隊(duì)列已滿,則拒絕連接。 若無法創(chuàng)建Socket并綁定于所請(qǐng)求的端口號(hào)則拋出IOException異常。 參數(shù) port:端口號(hào)。,3.2、ServerSocket類構(gòu)造方法,Socket編程,構(gòu)造方法重載形式之二 public ServerSocket(int port,int backlog) throws IOException 參數(shù): backlog:連接請(qǐng)求隊(duì)列的最大長(zhǎng)度。,3.2、ServerSocket類構(gòu)造方法,Socket編程,構(gòu)造方法重載形式之三 public ServerSocket(int

11、 port,int backlog,InetAddress bindAddr) throws IOException 參數(shù): bindAddr:需指定的要綁定到的本地IP地址。 主要用于在多IP地址系統(tǒng)上運(yùn)行的服務(wù)器。服務(wù)器Socket只在指定的地址偵聽入站連接,不會(huì)偵聽通過主機(jī)其他地址進(jìn)入的連接。其他構(gòu)造函數(shù)默認(rèn)綁定本地主機(jī)的所有IP地址。當(dāng)bindAddr為null時(shí),缺省地接受對(duì)任何所有本地IP地址的連接。,3.2、ServerSocket類構(gòu)造方法,Socket編程,1)public InetAddress getInetAddress() 返回服務(wù)器Socket的本地地址信息。 2)

12、public int getLocalPort() 服務(wù)器socket正在監(jiān)聽的端口號(hào)。 3)public String toString() 返回該socket的字符串表示,3.3、ServerSocket類其他方法,Socket編程,4)public Socket accept() throws IOException 功能:在服務(wù)器端指定端口偵聽客戶端發(fā)出的連接請(qǐng)求。 該方法一直阻塞直到連接成功。 如果服務(wù)器端與客戶端連接成功,該方法將返回一個(gè)新的Socket對(duì)象,通過該Socket對(duì)象與客戶端的Socket對(duì)象進(jìn)行通信。 若等待連接時(shí)發(fā)生I/O錯(cuò)誤則拋出IOException異常。,3

13、.3、ServerSocket類其他方法,Socket編程,.Socket類 Java用來實(shí)現(xiàn)客戶端TCP操作的基礎(chǔ)類。 在Java編程中Socket類負(fù)責(zé)一切與TCP有關(guān)的操作,包括連接的建立、傳輸、連接關(guān)閉及Socket選項(xiàng)的設(shè)置等操作。 Socket類的輸入輸出都是通過流來實(shí)現(xiàn)的。,Socket編程,4、Socket類,4.1、Socket類構(gòu)造方法,Socket類的構(gòu)造方法 Socket對(duì)象的創(chuàng)建可通過使用Socket類的構(gòu)造方法完成。 構(gòu)造方法的功能: 1)創(chuàng)建Socket對(duì)象 2)客戶端負(fù)責(zé)呼叫,嘗試向服務(wù)器發(fā)起連接請(qǐng)求,連接服務(wù)器端的Socket。 通過構(gòu)造方法可以測(cè)試能否和主機(jī)

14、的某個(gè)端口建立連接。,Socket編程,構(gòu)造方法重載形式之一 public Socket(String host,int port) throws UnknownHostException, IOException 參數(shù): host:服務(wù)器主機(jī)名。 port:端口號(hào)。 功能: 在客戶端以指定的服務(wù)器host和端口號(hào)port創(chuàng)建一個(gè)Socket對(duì)象,并向服務(wù)器發(fā)出連接請(qǐng)求。 在二者建立連接的過程中,由客戶機(jī)負(fù)責(zé)發(fā)起呼叫。,4.1、Socket類構(gòu)造方法,Socket編程,構(gòu)造方法重載形式之一 public Socket(String host,int port) throws UnknownHo

15、stException, IOException 異常的拋出: UnknownHostException:若域名服務(wù)器無法解析該服務(wù)器名或域名服務(wù)器沒有運(yùn)行,此時(shí)host無法可知,則拋出UnknownHostException異常 IOException:若生成Socket時(shí)發(fā)生I/O錯(cuò)誤則拋出IOException異常。,4.1、Socket類構(gòu)造方法,Socket編程,構(gòu)造方法重載形式之二 public Socket(InetAddress addr,int port) throws IOException 參數(shù): addr:服務(wù)器地址信息InetAddress類對(duì)象,4.1、Socket

16、類構(gòu)造方法,Socket編程,構(gòu)造方法重載形式之三 public Socket(InetAddress address,int port,InetAddress localAddr,int localPort) throws IOException 功能: 生成一個(gè)Socket并且連接到由address指定的服務(wù)器的端口port上。該Socket將捆綁到由localAddr指定的本地主機(jī)的localPort端口上。,4.1、Socket類構(gòu)造方法,Socket編程,public InetAddress getInetAddress() 返回連接到socket的遠(yuǎn)程主機(jī)的IP地址信息對(duì)象。 pu

17、blic InetAddress getLocalAddress() 返回socket關(guān)聯(lián)的本地主機(jī)的IP地址信息對(duì)象。 public int getPort() 返回socket連接到的遠(yuǎn)程服務(wù)的端口號(hào)。 public int getLocalPort() 返回該Socket綁定在本地計(jì)算機(jī)上的端口號(hào)。,4.2、Socket類其他方法,Socket編程,public InputStream getInputStream() throws IOException 為當(dāng)前的socket對(duì)象創(chuàng)建輸入流。 public OutputStream getOutputStream() throws IO

18、Exception 為當(dāng)前的socket對(duì)象創(chuàng)建輸出流。 public String toString() 轉(zhuǎn)換該Socket成一個(gè)String字符串表示 。 public synchronized void close() throws IOException 關(guān)閉建立的Socket連接。當(dāng)通信結(jié)束時(shí),應(yīng)調(diào)用該方法關(guān)閉Socket連接。若在關(guān)閉Socket連接時(shí)發(fā)生I/O錯(cuò)誤則拋出IOException異常。,4.2、Socket類其他方法,Socket編程,Socket編程,5.2 數(shù)據(jù)報(bào)式套接字中所需的類,DatagramPacket類 數(shù)據(jù)報(bào)封裝類。把具體的要傳輸?shù)男畔?,包含IP地址,

19、端口號(hào)和需要傳輸?shù)臄?shù)據(jù)等封裝在稱為數(shù)據(jù)報(bào)(Datagram)的UDP包中。 DatagramSocket類 用于收發(fā)UDP數(shù)據(jù)報(bào)的套接字接口類。 為發(fā)送數(shù)據(jù),要將數(shù)據(jù)封裝到DatagramPacket中,使用DatagramSocket發(fā)送該包。 要接收數(shù)據(jù),要從DatagramSocket中接收一個(gè)DatagramPakcet對(duì)象,然后解析該包的內(nèi)容,Socket編程,5.3 DatagramSocket類,功能 該類表示用來發(fā)送和接收數(shù)據(jù)報(bào)的套接字(Socket)。要收發(fā)DatagramPacket,必須創(chuàng)建一個(gè)數(shù)據(jù)報(bào)套接字DatagramSocket。,構(gòu)造方法 public Datag

20、ramSocket() throws SocketException 功能:創(chuàng)建用于數(shù)據(jù)報(bào)通信的socket對(duì)象,由本地主機(jī)自動(dòng)指定的一個(gè)可用的端口號(hào)。 DatagramSocket socket=new DatagramSocket(); /創(chuàng)建一個(gè)用于收發(fā)數(shù)據(jù)報(bào)的DatagramSocket對(duì)象,Socket編程,5.3 DatagramSocket類,構(gòu)造方法 public DatagramSocket(int port) throws SocketException 功能:創(chuàng)建用于數(shù)據(jù)報(bào)通信的socket對(duì)象,并且把它綁定到本地主機(jī)指定的端口port。 public DatagramS

21、ocket(int port,InetAddress addr) throws SocketException 功能:創(chuàng)建用于數(shù)據(jù)報(bào)通信的socket對(duì)象,并綁定到指定的本地地址addr的指定端口port。 DatagramSocket socket=new DatagramSocket(3000); /在端口3000創(chuàng)建用于通信的Socket對(duì)象,Socket編程,5.3 DatagramSocket類,常用方法 public void send(DatagramPacket p) throws IOException 功能:將數(shù)據(jù)報(bào)p發(fā)送出去。 public synchronized vo

22、id receive(DatagramPacket p) throws IOException 功能:從網(wǎng)絡(luò)接收一個(gè)UDP數(shù)據(jù)報(bào)包,并存儲(chǔ)在DatagramPacket類對(duì)象p中。該數(shù)據(jù)報(bào)p還包含發(fā)送方的IP 地址和發(fā)送方主機(jī)的端口號(hào)。,Socket編程,5.3 DatagramSocket類,public int getLocalPort() 功能:獲取該socket綁定的本地主機(jī)的端口號(hào)。 public void close() 功能:釋放該數(shù)據(jù)報(bào)socket所占用的端口。,常用方法 public InetAddress getLocalAddress() 功能:獲取該socket綁定的本

23、地地址。,Socket編程,5.4 DatagramPacket類,功能 是進(jìn)行數(shù)據(jù)報(bào)通信的基本單位。包含了IP地址、端口號(hào)和需要傳輸?shù)臄?shù)據(jù)等。在發(fā)送和接收數(shù)據(jù)報(bào)時(shí),要?jiǎng)?chuàng)建DatagramPakcet類對(duì)象作為數(shù)據(jù)的載體。,構(gòu)造方法之一:發(fā)送用的數(shù)據(jù)報(bào) public DatagramPacket(byte ibuf,int ilength,InetAddress iaddr,int iport) 構(gòu)造方法之二:接收用的數(shù)據(jù)報(bào) public DatagramPacket(byte ibuf,int ilength),Socket編程,5.4 DatagramPacket類,構(gòu)造方法之一:發(fā)送用的

24、數(shù)據(jù)報(bào) public DatagramPacket(byte ibuf,int ilength,InetAddress iaddr,int iport) 功能: 創(chuàng)建一個(gè)用于發(fā)送數(shù)據(jù)報(bào)的DatagramPacket類對(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類,構(gòu)造方法之一:發(fā)送用的數(shù)據(jù)報(bào) public DatagramPacket(byte ibuf,int ilengt

25、h,InetAddress iaddr,int iport) 舉例: String date=new Date().toString();/獲取服務(wù)器當(dāng)前時(shí)間 buf=date.getBytes();/將當(dāng)前日期時(shí)間存入字節(jié)數(shù)組buf packet=new DatagramPacket(buf, buf.length, addr, port); /構(gòu)造發(fā)送數(shù)據(jù)報(bào)包 socket.send(packet);/發(fā)送數(shù)據(jù)報(bào),Socket編程,5.4 DatagramPacket類,構(gòu)造方法之一:接收用的數(shù)據(jù)報(bào) public DatagramPacket(byte ibuf,int ilength)

26、功能: 創(chuàng)建一個(gè)用于接收數(shù)據(jù)報(bào)的DatagramPacket類對(duì)象。 參數(shù): ibuf:存儲(chǔ)數(shù)據(jù)包的緩沖區(qū)。在數(shù)據(jù)報(bào)通信中,發(fā)送和接收一個(gè)數(shù)據(jù)報(bào),都需提供一個(gè)緩沖區(qū),用來安置發(fā)送和接收到的數(shù)據(jù)報(bào)。 ilength:接收數(shù)據(jù)包的長(zhǎng)度,必須小于等于ibuf.length。 舉例: DatagramPacket packet=new DatagramPacket(buf,buf.length); socket.receive(packet);/接收數(shù)據(jù)報(bào),Socket編程,5.4 DatagramPacket類,常用方法之解析數(shù)據(jù)報(bào)的方法 (1)public synchronized InetAddress getAddress() 功能:返回存放在接收或發(fā)送的數(shù)據(jù)報(bào)中的遠(yuǎn)程主機(jī)的IP地址。 (2)public synchronized int getPort() 功能:返回存放在接收或發(fā)送的數(shù)據(jù)報(bào)中的遠(yuǎn)程端口號(hào)。 (3)public synchronized byte getData() 功能:返回一個(gè)字節(jié)數(shù)組,其中包含數(shù)據(jù)報(bào)中的數(shù)據(jù)。 (4)public synchronized int getLength() 功能:返回?cái)?shù)

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論