Java 網(wǎng)絡UDP套接字

2018-02-28 16:46 更新

Java網(wǎng)絡教程 - Java網(wǎng)絡UDP套接字


TCP套接字是面向連接的,基于流。基于UDP的套接字是無連接的,基于數(shù)據(jù)報。

使用UDP發(fā)送的數(shù)據(jù)塊稱為數(shù)據(jù)報或UDP數(shù)據(jù)包。每個UDP分組具有數(shù)據(jù),目的地IP地址和目的地端口號。

無連接套接字在通信之前不建立連接。

UDP是不可靠的協(xié)議,因為它不保證到達分組的傳遞和順序。

在無連接協(xié)議UDP中,不會有服務器套接字。

在UDP連接中,客戶端和服務器發(fā)送或接收一組數(shù)據(jù),而無需事先知道它們之間的通信。

發(fā)送到同一目的地的每個數(shù)據(jù)塊獨立于先前發(fā)送的數(shù)據(jù)。

當編碼UDP連接時,使用以下兩個類。

  • DatagramPacket類表示UDP數(shù)據(jù)報。
  • DatagramSocket類表示用于發(fā)送或接收數(shù)據(jù)報包的UDP套接字。

以下代碼顯示如何在localhost中創(chuàng)建綁定到端口號12345的UDP套接字。

DatagramSocket udpSocket = new DatagramSocket(12345, "localhost");

DatagramSocket 類提供了一個bind()方法,它允許您將套接字綁定到本地IP地址和本地端口號。


DatagramPacket

DatagramPacket包含三個東西:

  • 目的IP地址
  • 目的端口號
  • 數(shù)據(jù)

DatagramPacket類的構(gòu)造函數(shù)創(chuàng)建一個數(shù)據(jù)包來接收數(shù)據(jù)如下:

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

DatagramPacket類的構(gòu)造函數(shù)創(chuàng)建一個數(shù)據(jù)包來發(fā)送數(shù)據(jù)如下:

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

以下代碼演示如何創(chuàng)建數(shù)據(jù)報:

以下代碼創(chuàng)建一個數(shù)據(jù)包以接收1024字節(jié)的數(shù)據(jù)。

byte[] data = new byte[1024];
DatagramPacket packet  = new DatagramPacket(data, data.length);

以下代碼創(chuàng)建一個包的緩沖區(qū)大小為1024,并從偏移量8開始接收數(shù)據(jù),它將只接收32字節(jié)的數(shù)據(jù)。

byte[]  data2 = new byte[1024];
DatagramPacket packet2  = new DatagramPacket(data2, 8, 32);

數(shù)據(jù)包中的數(shù)據(jù)總是指定偏移量和長度。我們需要使用offset和length來讀取數(shù)據(jù)包中的數(shù)據(jù)。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號