首頁 > Java > java教程 > Java 資料報套接字

Java 資料報套接字

王林
發布: 2024-08-30 16:16:30
原創
543 人瀏覽過

Java DatagramSocket 類別代表一種無連接的網路套接字,用於發送資料封包和接收資料封包;對於任何資料包的傳遞,資料報套接字是服務的發送和接收點,並且使用資料報套接字發送或接收的每個資料包都被單獨尋址,然後路由到目的地,並且如果在兩台機器之間傳輸多個資料包,資料包的路由可能不同,並且它們可以按任何順序到達,並且在新建的資料報套接字中啟用了SO_BROADCAST 選項,該套接字允許傳輸廣播圖。

廣告 該類別中的熱門課程 JAVA 掌握 - 專業化 | 78 課程系列 | 15 次模擬測驗

開始您的免費軟體開發課程

網頁開發、程式語言、軟體測試及其他

文法

java DatagramSocket 文法如下:

DatagramSocket variable_name = new DatagramSocket();
登入後複製

DatagramSocket 在 Java 中如何運作?

  • 資料報套接字是在客戶端程式端和伺服器程式端使用 DatagramSocket 類別建立的,用於通訊連結以及發送和接收資料包。
  • 在客戶端程式端可以選擇DatagramSocket()建構子來建立資料報套接字,在伺服器程式端可以選擇DatagramSocket(int port)建構子來建立資料報套接字。
  • 如果任何一個建構函式無法建立資料報套接字或資料報套接字無法綁定到端口,則會拋出 SocketException 物件。
  • 程式建立資料封包套接字物件後,程式會分別呼叫 send(DatagramPacket dgp) 來傳送資料封包包,並呼叫 receive(DatagramPacket dgp) 來接收資料封包。

考慮下面的程序,使用 DatagramSocket 類別發送和接收資料報包:

代碼:

//Java program to send datagram packets using DatagramSocket class
import java.net.*;
public class Sender
{
public static void main(String[] args) throws Exception
{
DatagramSocket datasoc = new DatagramSocket();
String strn = "Welcome to DatagramSocket class";
InetAddress ipaddr = InetAddress.getByName("127.0.0.1");                
DatagramPacket dpac = new DatagramPacket(strn.getBytes(), strn.length(), ipaddr, 3000);
datasoc.send(dpac);
datasoc.close();
}
}
//Java program to receive datagram packets using DatagramSocket class
import java.net.*;
public class Receiver
{
public static void main(String[] args) throws Exception
{
DatagramSocket datasoc = new DatagramSocket(3000);
byte[] buff = new byte[1024];
DatagramPacket dpac = new DatagramPacket(buff, 1024);
datasoc.receive(dpac);
String strn = new String(dpac.getData(), 0, dpac.getLength());
System.out.println(strn);
datasoc.close();
}
}
登入後複製

輸出:

Java 資料報套接字

說明: 在上面的程式中,建立了兩組程式:使用 DatagramSocket 類別傳送封包,一組使用 DatagramSocket 類別接收封包。在使用DatagramSocket類別傳送封包的程式中,建立了DatagramSocket類別的實例。然後將字串賦給變數strn。然後將互聯網 IP 位址分配給一個變數。然後,建立資料封包包,並使用DatagramSocket類別的send方法將封包傳送到目的IP位址。

在使用DatagramSocket類別接收封包的程式中,建立了一個DatagramSocket類別的實例。然後創建位元組類別的實例。然後,建立資料封包包,並使用DatagramSocket類別的receive方法將封包接收到來源IP位址。

建構子

DatagramSocket 類別有多個建構子。他們是:

  • DatagramSocket(): 資料封包套接字是使用 DatagramSocket() 建構子建構的,並且綁定到本地主機上的可用連接埠。
  • DatagramSocket(int): 使用 DatagramSocket() 建構子建構資料報套接字,並將其綁定到本機上的指定連接埠。
  • DatagramSocket(int, InetAddress): 使用 DatagramSocket() 建構子建立資料封包套接字,並將其綁定到指定的本機網際網路位址。

實作 Java DatagramSocket 的範例

以下是提到的範例:

範例

示範DatagramScoket類別的各種方法的用法。

代碼:

import java.io.IOException;
import java.net.DatagramSocket;
public class program
{
public static void main(String[] args) throws IOException
{
//Datagram Socket class Constructor is called
DatagramSocket sock = new DatagramSocket(1235);
// The method setSendBufferSize() method of datagram socket class is called
sock.setSendBufferSize(20);
// The method getSendBufferSize() method of datagram socket class is called
System.out.println("The buffer size sent is : " + sock.getSendBufferSize());
// The method setReceiveBufferSize() method of datagram socket class is called
sock.setReceiveBufferSize(20);
// The method getReceiveBufferSize() method of datagram socket class is called
System.out.println("The buffer size received is : " +
sock.getReceiveBufferSize());
// The method setReuseAddress() method of datagram socket class is called
sock.setReuseAddress(false);
// The method getReuseAddress() method of datagram socket class is called
System.out.println("The SetReuse address is set to : " +
sock.getReuseAddress());
// The method setBroadcast() method of datagram socket class is called
sock.setBroadcast(true);
// The method getBroadcast() method of datagram socket class is called
System.out.println("The setBroadcast is set to : " +
sock.getBroadcast());
// The method setTrafficClass() method of datagram socket class is called
sock.setTrafficClass(45);
// The method getTrafficClass() method of datagram socket class is called
System.out.println("The Traffic class is set to : " +
sock.getTrafficClass());
// The method getChannel() method of datagram socket class is called
System.out.println("The Channel is set to : " +
((sock.getChannel()!=null)?sock.getChannel():"null"));
// The method setSocketImplFactory() method of datagram socket class is called
sock.setDatagramSocketImplFactory(null);
// The method close() method of datagram socket class is called
sock.close();
// The method isClosed() method of datagram socket class is called
System.out.println("If the Socket Is Closed : " + sock.isClosed());
}
}
登入後複製

輸出:

Java 資料報套接字

說明:在上面的程式中,定義了一個名為program的類別。然後建立資料報套接字類別的實例。呼叫資料報套接字類別的setSendBufferSize()方法,該方法會傳送緩衝區大小。然後呼叫資料報套接字類別的 getSendBufferSize() 方法,該方法接收緩衝區大小。

然後呼叫資料報套接字類別的setReceiveBufferSize()方法,然後呼叫資料報套接字類別的getReceiveBufferSize()方法,用於傳送和接收緩衝區大小。然後呼叫資料報套接字類別的setReuseAddress()方法,然後呼叫資料報套接字類別的getReuseAddress()方法來傳送和接收重用位址。

然後呼叫資料報套接字類別的setBroadcast()方法,然後呼叫資料報套接字類別的getBroadcast()方法來設定和取得廣播。然後呼叫資料報套接字類別的setTrafficClass()方法,然後呼叫資料報套接字類別的getTrafficClass()方法來設定和取得流量類別。

然後呼叫資料報套接字類別的 getChannel() 方法,該方法傳回 true 或 false。然後呼叫資料報套接字類別的close()方法來關閉套接字。然後呼叫資料報套接字類別的 isClosed() 方法來檢查套接字是否關閉,如果套接字關閉則傳回 true,否則傳回 false。

結論

在本教程中,我們透過定義了解 Java 中 DatagramSocket 類別的概念、Java 中 DatagramSocket 類別的語法、透過範例及其輸出來了解 Java 中 DatagramSocket 類別的工作原理。

以上是Java 資料報套接字的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板