java網路編程之Datagram通訊

來源:互聯網
上載者:User

 

Datagram通訊

在TCP/IP協議的傳輸層除了TCP協議之外還有一個UDP協議,相比而言UDP的應用不如TCP廣泛,幾個標準的應用程式層協議HTTP,FTP,SMTP…使用的都是TCP協議。但是,UDP協議可以應用在需要很強的即時互動性的場合,如網路遊戲,視頻會議等。

1,什麼是Datagram

資料報(Datagram)就跟日常生活中的郵件系統一樣,是不能保證可靠的寄到的,而面向連結的TCP就好比電話,雙方能肯定對方接受到了資訊。

TCP,可靠,傳輸大小無限制,但是需要串連建立時間,差錯控制開銷大。

UDP,不可靠,差錯控制開銷較小,傳輸大小限制在64K以下,不需要建立串連。

2,Datagram使用

java.net中提供了兩個類DatagramSocketDatagramPacket用來支援資料報通訊,DatagramSocket用於在程式之間建立傳送資料報的通訊串連, DatagramPacket則用來表示一個資料報。

DatagramSocket的構造方法:

      DatagramSocket();

   DatagramSocket(int prot);

   DatagramSocket(int port, InetAddress laddr)

其中,port指明socket所使用的連接埠號碼,如果未指明連接埠號碼,則把socket串連到 本地主機上一個可用的連接埠。laddr指明一個可用的本地地址。給出連接埠號碼時要保證不發生連接埠衝突,否則會產生SocketException類例外。注 意:上述的兩個構造方法都聲明拋棄非運行時例外SocketException,程式中必須進行處理,或者捕獲、或者聲明拋棄。

   用資料報方式編寫client/server程式時,無論在客戶方還是服務方,首先都要建立一個DatagramSocket對象,用來接收或發送資料報,然後使用DatagramPacket類對象作為傳輸資料的載體。

DatagramPacket的構造方法 :

   DatagramPacket(byte buf[],intlength);

   DatagramPacket(byte buf[], int length, InetAddressaddr, int port);

   DatagramPacket(byte[] buf, int offset, int length);

   DatagramPacket(byte[] buf, int offset, int length,InetAddress address, int port);

其中,buf中存放資料報資料,length為資料報中資料的長度,addr和port旨明目的地址,offset指明了資料報的位移量。

在接收資料前,應該採用上面的第一種方法產生一個DatagramPacket對象,給出接收資料的緩衝區及其長度。然後調用DatagramSocket 的方法receive()等待資料報的到來,receive()將一直等待,直到收到一個資料報為止。

  DatagramPacket packet=new DatagramPacket(buf, 256);

  Socket.receive (packet);

發送資料前,也要先產生一個新的DatagramPacket對象,這時要使用上面的第二種 構造方法,在給出存放發送資料的緩衝區的同時,還要給出完整的目的地址,包括IP地址和連接埠號碼。發送資料是通過DatagramSocket的方法 send()實現的,send()根據資料報的目的地址來尋徑,以傳遞資料報。

  DatagramPacket packet=new DatagramPacket(buf, length,address, port);

  Socket.send(packet);

   在構造資料報時,要給出InetAddress類參數。類InetAddress在包java.net中定義,用來表示一個Internet地址,我們可 以通過它提供的類方法getByName()從一個表示主機名稱的字串擷取該主機的IP地址,然後再擷取相應的地址資訊。

3,用Datagram進行廣播通訊(MulticastSocket)

DatagramSocket只允許資料報發送一個目的地址,java.net包中提供了一個類MulticastSocket,允許資料報以廣播方式發送到該連接埠的所有客戶。MulticastSocket用在用戶端,監聽伺服器廣播來的資料。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.