W3Cschool
恭喜您成為首批注冊用戶
獲得88經驗值獎勵
java.lang.Object
|---java.net.DatagramSocket
public class DatagramSocket
extends Object
implements Closeable
此類表示用于發(fā)送和接收數據報包的套接字。
數據報套接字是數據包傳遞服務的發(fā)送點或接收點。 在數據報套接字上發(fā)送或接收的每個數據包都被單獨尋址和路由。 從一臺機器發(fā)送到另一臺機器的多個數據包可能會以不同的方式路由,并且可能以任何順序到達。
在可能的情況下,新構建的 DatagramSocket 啟用了 SocketOptions#SO_BROADCAST 套接字選項,以允許傳輸廣播數據報。 為了接收廣播數據包,應將 DatagramSocket 綁定到通配符地址。 在一些實現中,當 DatagramSocket 綁定到更具體的地址時,也可以接收廣播包。
示例:DatagramSocket s = new DatagramSocket(null); s.bind(新 InetSocketAddress(8888)); 相當于:DatagramSocket s = new DatagramSocket(8888); 這兩種情況都將創(chuàng)建一個 DatagramSocket 能夠在 UDP 端口 8888 上接收廣播。
修飾符 | 構造函數 | 描述 |
---|---|---|
DatagramSocket() | 構造一個數據報套接字并將其綁定到本地主機上的任何可用端口。 | |
DatagramSocket(int port) | 構造一個數據報套接字并將其綁定到本地主機上的指定端口。 | |
DatagramSocket(int port, InetAddress laddr) | 創(chuàng)建一個數據報套接字,綁定到指定的本地地址。 | |
protected | DatagramSocket(DatagramSocketImpl impl) | 使用指定的 DatagramSocketImpl 創(chuàng)建一個未綁定的數據報套接字。 |
DatagramSocket(SocketAddress bindaddr) | 創(chuàng)建一個數據報套接字,綁定到指定的本地套接字地址。 |
修飾符和類型 | 方法 | 描述 |
---|---|---|
void | bind(SocketAddress addr) | 將此 DatagramSocket 綁定到特定地址和端口。 |
void | close() | 關閉此數據報套接字。 |
void | connect(InetAddress address, int port) | 將套接字連接到此套接字的遠程地址。 |
void | connect(SocketAddress addr) | 將此套接字連接到遠程套接字地址(IP 地址 + 端口號)。 |
void | disconnect() | 斷開插座。 |
boolean | getBroadcast() | 測試是否啟用了 SO_BROADCAST。 |
DatagramChannel | getChannel() | 返回與此數據報套接字關聯的唯一 DatagramChannel 對象(如果有)。 |
InetAddress | getInetAddress() | 返回此套接字連接的地址。 |
InetAddress | getLocalAddress() | 獲取套接字綁定的本地地址。 |
int | getLocalPort() | 返回此套接字綁定到的本地主機上的端口號。 |
SocketAddress | getLocalSocketAddress() | 返回此套接字綁定到的端點的地址。 |
int | getPort() | 返回此套接字連接到的端口號。 |
int | getReceiveBufferSize() | 獲取此 DatagramSocket 的 SO_RCVBUF 選項的值,即平臺用于此 DatagramSocket 上的輸入的緩沖區(qū)大小。 |
SocketAddress | getRemoteSocketAddress() | 返回此套接字連接到的端點的地址,如果未連接,則返回 null。 |
boolean | getReuseAddress() | 測試是否啟用了 SO_REUSEADDR。 |
int | getSendBufferSize() | 獲取此 DatagramSocket 的 SO_SNDBUF 選項的值,即平臺用于在此 DatagramSocket 上輸出的緩沖區(qū)大小。 |
int | getSoTimeout() | 檢索 SO_TIMEOUT 的設置。 |
int | getTrafficClass() | 獲取從此 DatagramSocket 發(fā)送的數據包的 IP 數據報標頭中的流量類別或服務類型。 |
boolean | isBound() | 返回套接字的綁定狀態(tài)。 |
boolean | isClosed() | 返回套接字是否關閉。 |
boolean | isConnected() | 返回套接字的連接狀態(tài)。 |
void | receive(DatagramPacket p) | 從這個套接字接收一個數據報包。 |
void | send(DatagramPacket p) | 從這個套接字發(fā)送一個數據報包。 |
void | setBroadcast(boolean on) | 啟用/禁用 SO_BROADCAST。 |
static void | setDatagramSocketImplFactory(DatagramSocketImplFactory fac) | 為應用程序設置數據報套接字實現工廠。 |
void | setReceiveBufferSize(int size) | 將 SO_RCVBUF 選項設置為此 DatagramSocket 的指定值。 |
void | setReuseAddress(boolean on) | 啟用/禁用 SO_REUSEADDR 套接字選項。 |
void | setSendBufferSize(int size) | 將 SO_SNDBUF 選項設置為此 DatagramSocket 的指定值。 |
void | setSoTimeout(int timeout) | 使用指定的超時啟用/禁用 SO_TIMEOUT,以毫秒為單位。 |
void | setTrafficClass(int tc) | 為從此 DatagramSocket 發(fā)送的數據報設置 IP 數據報頭中的流量類別或服務類型八位字節(jié)。 |
從類 java.lang.Object 繼承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
public DatagramSocket() throws SocketException
構造一個數據報套接字并將其綁定到本地主機上的任何可用端口。 套接字將綁定到 InetAddress#isAnyLocalAddress 地址,這是內核選擇的 IP 地址。
如果存在安全管理器,則首先調用其 checkListen 方法,并以 0 作為其參數,以確保允許該操作。 這可能會導致 SecurityException。
Throws:
Throw名稱 | Throw描述 |
---|---|
SocketException | 如果套接字無法打開,或者套接字無法綁定到指定的本地端口。 |
SecurityException | 如果安全管理器存在并且其 checkListen 方法不允許該操作。 |
protected DatagramSocket(DatagramSocketImpl impl)
使用指定的 DatagramSocketImpl 創(chuàng)建一個未綁定的數據報套接字。
參數:
參數名稱 | 參數描述 |
---|---|
impl | 子類希望在 DatagramSocket 上使用的 DatagramSocketImpl 的實例。 |
public DatagramSocket(SocketAddress bindaddr) throws SocketException
創(chuàng)建一個數據報套接字,綁定到指定的本地套接字地址。
如果地址為空,則創(chuàng)建一個未綁定的套接字。
如果有安全管理器,首先調用它的 checkListen 方法,并使用來自套接字地址的端口作為其參數,以確保允許該操作。 這可能會導致 SecurityException。
參數:
參數名稱 | 參數描述 |
---|---|
bindaddr | 要綁定的本地套接字地址,對于未綁定的套接字,則為 null。 |
Throws:
Throw名稱 | Throw描述 |
---|---|
SocketException | 如果套接字無法打開,或者套接字無法綁定到指定的本地端口。 |
SecurityException | 如果安全管理器存在并且其 checkListen 方法不允許該操作。 |
public DatagramSocket(int port) throws SocketException
構造一個數據報套接字并將其綁定到本地主機上的指定端口。 套接字將綁定到 InetAddress#isAnyLocalAddress 地址,這是內核選擇的 IP 地址。
如果有安全管理器,首先調用它的 checkListen 方法,并將端口參數作為其參數,以確保允許該操作。 這可能會導致 SecurityException。
參數:
參數名稱 | 參數描述 |
---|---|
port | 要使用的端口。 |
Throws:
Throw名稱 | Throw描述 |
---|---|
SocketException | 如果套接字無法打開,或者套接字無法綁定到指定的本地端口。 |
SecurityException | 如果安全管理器存在并且其 checkListen 方法不允許該操作。 |
public DatagramSocket(int port, InetAddress laddr) throws SocketException
創(chuàng)建一個數據報套接字,綁定到指定的本地地址。 本地端口必須介于 0 和 65535 之間(含)。 如果 IP 地址是 0.0.0.0,則套接字將綁定到 InetAddress#isAnyLocalAddress 地址,這是內核選擇的 IP 地址。
如果有安全管理器,首先調用它的 checkListen 方法,并將端口參數作為其參數,以確保允許該操作。 這可能會導致 SecurityException。
參數:
參數名稱 | 參數描述 |
---|---|
port | 要使用的本地端口 |
laddr | 要綁定的本地地址 |
Throws:
Throw名稱 | Throw描述 |
---|---|
SocketException | 如果套接字無法打開,或者套接字無法綁定到指定的本地端口。 |
SecurityException | 如果安全管理器存在并且其 checkListen 方法不允許該操作。 |
public void bind(SocketAddress addr) throws SocketException
將此 DatagramSocket 綁定到特定地址和端口。
如果地址為空,那么系統(tǒng)將選擇一個臨時端口和一個有效的本地地址來綁定套接字。
參數:
參數名稱 | 參數描述 |
---|---|
addr | 要綁定的地址和端口。 |
Throws:
Throw名稱 | Throw描述 |
---|---|
SocketException | 如果在綁定期間發(fā)生任何錯誤,或者套接字已經綁定。 |
SecurityException | 如果安全管理器存在并且其 checkListen 方法不允許該操作。 |
IllegalArgumentException | 如果 addr 是此套接字不支持的 SocketAddress 子類。 |
public void connect(InetAddress address, int port)
將套接字連接到此套接字的遠程地址。當套接字連接到遠程地址時,數據包只能發(fā)送到該地址或從該地址接收。默認情況下,未連接數據報套接字。
如果套接字連接到的遠程目標不存在,或者無法到達,并且如果已接收到該地址的 ICMP 目標無法到達數據包,則后續(xù)調用 send 或 receive 可能會拋出 PortUnreachableException。請注意,不能保證會引發(fā)異常。
如果已安裝安全管理器,則調用它來檢查對遠程地址的訪問。具體來說,如果給定地址是 InetAddress#isMulticastAddress,則使用給定地址調用安全管理器的 checkMulticast 方法。否則,使用給定的地址和端口調用安全管理器的 checkConnect 和 checkAccept 方法,以驗證是否允許分別發(fā)送和接收數據報。
當套接字連接時,接收和發(fā)送不會對傳入和傳出的數據包執(zhí)行任何安全檢查,除了匹配數據包和套接字的地址和端口。在發(fā)送操作中,如果設置了數據包的地址并且數據包的地址和套接字的地址不匹配,則會拋出 IllegalArgumentException。連接到多播地址的套接字只能用于發(fā)送數據包。
參數:
參數名稱 | 參數描述 |
---|---|
address | 套接字的遠程地址 |
port | 套接字的遠程端口。 |
Throws:
Throw名稱 | Throw描述 |
---|---|
IllegalArgumentException | 如果地址為空,或者端口超出范圍。 |
SecurityException | 如果已安裝安全管理器并且它不允許訪問給定的遠程地址 |
public void connect(SocketAddress addr) throws SocketException
將此套接字連接到遠程套接字地址(IP 地址 + 端口號)。
如果給定 InetSocketAddress,則此方法的行為就像使用給定的套接字地址 IP 地址和端口號調用 connect(InetAddress,int)。
參數:
參數名稱 | 參數描述 |
---|---|
addr | 遠程地址。 |
Throws:
Throw名稱 | Throw描述 |
---|---|
SocketException | 如果連接失敗 |
IllegalArgumentException | 如果 addr 為 null,或者 addr 是此套接字不支持的 SocketAddress 子類 |
SecurityException | 如果已安裝安全管理器并且它不允許訪問給定的遠程地址 |
public void disconnect()
斷開插座。 如果套接字已關閉或未連接,則此方法無效。
public boolean isBound()
返回套接字的綁定狀態(tài)。
如果套接字在關閉之前已綁定,則此方法將在套接字關閉后繼續(xù)返回 true。
返回:
如果套接字成功綁定到地址,則為 true
public boolean isConnected()
返回套接字的連接狀態(tài)。
如果套接字在關閉之前已連接,則此方法將在套接字關閉后繼續(xù)返回 true。
返回:
如果套接字成功連接到服務器,則為 true
public InetAddress getInetAddress()
返回此套接字連接的地址。 如果套接字未連接,則返回 null。
如果套接字在關閉之前已連接,則此方法將在套接字關閉后繼續(xù)返回已連接的地址。
返回:
此套接字連接到的地址。
public int getPort()
返回此套接字連接到的端口號。 如果套接字未連接,則返回 -1。
如果套接字在關閉之前已連接,則此方法將在套接字關閉后繼續(xù)返回連接的端口號。
返回:
此套接字連接到的端口號。
public SocketAddress getRemoteSocketAddress()
返回此套接字連接到的端點的地址,如果未連接,則返回 null。
如果套接字在關閉之前已連接,則此方法將在套接字關閉后繼續(xù)返回已連接的地址。
返回:
表示此套接字的遠程端點的 SocketAddress,如果尚未連接,則為 null。
public SocketAddress getLocalSocketAddress()
返回此套接字綁定到的端點的地址。
返回:
一個 SocketAddress 表示此套接字的本地端點,如果它已關閉或尚未綁定,則為 null。
public void send(DatagramPacket p) throws IOException
從這個套接字發(fā)送一個數據報包。 DatagramPacket 包括指示要發(fā)送的數據、其長度、遠程主機的 IP 地址和遠程主機上的端口號的信息。
如果有安全管理器,并且套接字當前未連接到遠程地址,則此方法首先執(zhí)行一些安全檢查。 首先,如果 p.getAddress().isMulticastAddress() 為真,則此方法以 p.getAddress() 作為參數調用安全管理器的 checkMulticast 方法。 如果該表達式的評估結果為假,則此方法將使用參數 p.getAddress().getHostAddress() 和 p.getPort() 調用安全管理器的 checkConnect 方法。 如果不允許該操作,則對安全管理器方法的每次調用都可能導致 SecurityException。
參數:
參數名稱 | 參數描述 |
---|---|
p | 要發(fā)送的 DatagramPacket。 |
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果發(fā)生 I/O 錯誤。 |
SecurityException | 如果存在安全管理器并且其 checkMulticast 或 checkConnect 方法不允許發(fā)送。 |
PortUnreachableException | 如果套接字連接到當前無法到達的目的地,則可能會拋出。 請注意,不能保證會引發(fā)異常。 |
IllegalBlockingModeException | 如果此套接字具有關聯的通道,并且該通道處于非阻塞模式。 |
IllegalArgumentException | 如果套接字已連接,并且連接地址和數據包地址不同。 |
public void receive(DatagramPacket p) throws IOException
從這個套接字接收一個數據報包。 當此方法返回時,DatagramPacket 的緩沖區(qū)被接收到的數據填充。 數據報包還包含發(fā)送者的 IP 地址和發(fā)送者機器上的端口號。
此方法阻塞,直到接收到數據報。 數據報包對象的長度字段包含接收到的消息的長度。 如果消息長于數據包的長度,則消息被截斷。
如果有安全管理器,如果安全管理器的 checkAccept 方法不允許,則無法接收數據包。
參數:
參數名稱 | 參數描述 |
---|---|
p | 放置傳入數據的 DatagramPacket。 |
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果發(fā)生 I/O 錯誤。 |
SocketTimeoutException | 如果之前調用了 setSoTimeout 并且超時已過期。 |
PortUnreachableException | 如果套接字連接到當前無法到達的目的地,則可能會拋出。 請注意,不能保證會引發(fā)異常。 |
IllegalBlockingModeException | 如果此套接字具有關聯的通道,并且該通道處于非阻塞模式。 |
public InetAddress getLocalAddress()
獲取套接字綁定的本地地址。
如果有安全管理器,首先調用它的 checkConnect 方法,并以主機地址和 -1 作為其參數,以查看是否允許該操作。
返回:
套接字綁定到的本地地址,如果套接字已關閉,則為 null,或者如果套接字未綁定或安全管理器 checkConnect 方法不允許操作,則表示 InetAddress#isAnyLocalAddress 地址的 InetAddress
public int getLocalPort()
返回此套接字綁定到的本地主機上的端口號。
返回:
此套接字綁定到的本地主機上的端口號,如果套接字已關閉,則為 -1,如果尚未綁定,則為 0。
public void setSoTimeout(int timeout) throws SocketException
使用指定的超時啟用/禁用 SO_TIMEOUT,以毫秒為單位。 將此選項設置為非零超時后,對此 DatagramSocket 的 receive() 調用將僅阻塞此時間量。 如果超時到期,則會引發(fā) java.net.SocketTimeoutException,盡管 DatagramSocket 仍然有效。 必須在進入阻塞操作之前啟用該選項才能生效。 超時必須 > 0。超時為零被解釋為無限超時。
參數:
參數名稱 | 參數描述 |
---|---|
timeout | 以毫秒為單位的指定超時。 |
Throws:
Throw名稱 | Throw描述 |
---|---|
SocketException | 如果底層協(xié)議有錯誤,例如 UDP 錯誤。 |
public int getSoTimeout() throws SocketException
檢索 SO_TIMEOUT 的設置。 返回 0 表示該選項被禁用(即無限超時)。
返回:
SO_TIMEOUT 的設置
Throws:
Throw名稱 | Throw描述 |
---|---|
SocketException | 如果底層協(xié)議有錯誤,例如 UDP 錯誤。 |
public void setSendBufferSize(int size) throws SocketException
將 SO_SNDBUF 選項設置為此 DatagramSocket 的指定值。 網絡實現使用 SO_SNDBUF 選項作為調整底層網絡 I/O 緩沖區(qū)大小的提示。 網絡實現也可以使用 SO_SNDBUF 設置來確定可以在此套接字上發(fā)送的數據包的最大大小。
由于 SO_SNDBUF 是一個提示,想要驗證緩沖區(qū)大小的應用程序應該調用 getSendBufferSize()。
當發(fā)送速率很高時,增加緩沖區(qū)大小可能允許網絡實現將多個傳出數據包排隊。
注意:如果使用 send(java.net.DatagramPacket) 發(fā)送大于 SO_SNDBUF 設置的 DatagramPacket,則發(fā)送或丟棄數據包是特定于實現的。
參數:
參數名稱 | 參數描述 |
---|---|
size | 設置發(fā)送緩沖區(qū)大小的大小。 該值必須大于 0。 |
Throws:
Throw名稱 | Throw描述 |
---|---|
SocketException | 如果底層協(xié)議有錯誤,例如 UDP 錯誤。 |
IllegalArgumentException | 如果值為 0 或為負數。 |
public int getSendBufferSize() throws SocketException
獲取此 DatagramSocket 的 SO_SNDBUF 選項的值,即平臺用于在此 DatagramSocket 上輸出的緩沖區(qū)大小。
返回:
此 DatagramSocket 的 SO_SNDBUF 選項的值
Throws:
Throw名稱 | Throw描述 |
---|---|
SocketException | 如果底層協(xié)議有錯誤,例如 UDP 錯誤。 |
public void setReceiveBufferSize(int size) throws SocketException
將 SO_RCVBUF 選項設置為此 DatagramSocket 的指定值。 網絡實現使用 SO_RCVBUF 選項作為調整底層網絡 I/O 緩沖區(qū)大小的提示。 網絡實現也可以使用 SO_RCVBUF 設置來確定可以在此套接字上接收的數據包的最大大小。
因為 SO_RCVBUF 是一個提示,所以想要驗證緩沖區(qū)設置為多大大小的應用程序應該調用 getReceiveBufferSize()。
當數據包到達的速度快于使用接收(java.net.DatagramPacket)接收的速度時,增加 SO_RCVBUF 可能允許網絡實現緩沖多個數據包。
注意:是否可以接收到大于 SO_RCVBUF 的數據包是特定于實現的。
參數:
參數名稱 | 參數描述 |
---|---|
size | 設置接收緩沖區(qū)大小的大小。 該值必須大于 0。 |
Throws:
Throw名稱 | Throw描述 |
---|---|
SocketException | 如果底層協(xié)議有錯誤,例如 UDP 錯誤。 |
IllegalArgumentException | 如果值為 0 或為負數。 |
public int getReceiveBufferSize() throws SocketException
獲取此 DatagramSocket 的 SO_RCVBUF 選項的值,即平臺用于此 DatagramSocket 上的輸入的緩沖區(qū)大小。
返回:
此 DatagramSocket 的 SO_RCVBUF 選項的值
Throws:
Throw名稱 | Throw描述 |
---|---|
SocketException | 如果底層協(xié)議有錯誤,例如 UDP 錯誤。 |
public void setReuseAddress(boolean on) throws SocketException
啟用/禁用 SO_REUSEADDR 套接字選項。
對于 UDP 套接字,可能需要將多個套接字綁定到同一個套接字地址。 這通常用于接收多播數據包(請參閱 MulticastSocket)。 如果在使用 bind(java.net.SocketAddress) 綁定套接字之前啟用了 SO_REUSEADDR 套接字選項,則 SO_REUSEADDR 套接字選項允許將多個套接字綁定到同一個套接字地址。
注意:并非所有現有平臺都支持此功能,因此是否忽略此選項取決于具體實現。 但是,如果不支持,則 getReuseAddress() 將始終返回 false。
創(chuàng)建 DatagramSocket 時,SO_REUSEADDR 的初始設置被禁用。
未定義套接字綁定后啟用或禁用 SO_REUSEADDR 時的行為。
參數:
參數名稱 | 參數描述 |
---|---|
on | 是否啟用或禁用 |
Throws:
Throw名稱 | Throw描述 |
---|---|
SocketException | 如果啟用或禁用 SO_RESUEADDR 套接字選項發(fā)生錯誤,或者套接字已關閉。 |
public boolean getReuseAddress() throws SocketException
測試是否啟用了 SO_REUSEADDR。
返回:
一個布爾值,指示是否啟用 SO_REUSEADDR。
Throws:
Throw名稱 | Throw描述 |
---|---|
SocketException | 如果底層協(xié)議有錯誤,例如 UDP 錯誤。 |
public void setBroadcast(boolean on) throws SocketException
啟用/禁用 SO_BROADCAST。
某些操作系統(tǒng)可能要求以實現特定權限啟動 Java 虛擬機以啟用此選項或發(fā)送廣播數據報。
參數:
參數名稱 | 參數描述 |
---|---|
on | 是否開啟廣播。 |
Throws:
Throw名稱 | Throw描述 |
---|---|
SocketException | 如果底層協(xié)議有錯誤,例如 UDP 錯誤。 |
public boolean getBroadcast() throws SocketException
測試是否啟用了 SO_BROADCAST。
返回:
一個布爾值,指示是否啟用 SO_BROADCAST。
Throws:
Throw名稱 | Throw描述 |
---|---|
SocketException | 如果底層協(xié)議有錯誤,例如 UDP 錯誤。 |
public void setTrafficClass(int tc) throws SocketException
為從此 DatagramSocket 發(fā)送的數據報設置 IP 數據報頭中的流量類別或服務類型八位字節(jié)。 由于底層網絡實現可能會忽略此值,因此應用程序應將其視為提示。
tc 必須在 0 <= tc <= 255 范圍內,否則將拋出 IllegalArgumentException。
筆記:
對于 Internet 協(xié)議 v4,該值由一個整數組成,其中最低有效 8 位表示套接字發(fā)送的 IP 數據包中 TOS 八位字節(jié)的值。 RFC 1349 定義 TOS 值如下:
最后一個低位總是被忽略,因為它對應于 MBZ(必須為零)位。
設置優(yōu)先級字段中的位可能會導致 SocketException 指示不允許該操作。
對于 Internet 協(xié)議 v6,tc 是放置在 IP 標頭的 sin6_flowinfo 字段中的值。
參數:
參數名稱 | 參數描述 |
---|---|
tc | 位集的 int 值。 |
Throws:
Throw名稱 | Throw描述 |
---|---|
SocketException | 如果設置流量類別或服務類型時出錯 |
public int getTrafficClass() throws SocketException
獲取從此 DatagramSocket 發(fā)送的數據包的 IP 數據報標頭中的流量類別或服務類型。
由于底層網絡實現可能會忽略使用 setTrafficClass(int) 設置的流量類或服務類型,因此此方法可能返回與之前使用此 DatagramSocket 上的 setTrafficClass(int) 方法設置的值不同的值。
返回:
已設置的流量類別或服務類型
Throws:
Throw名稱 | Throw描述 |
---|---|
SocketException | 如果獲取流量類別或服務類型值時出錯。 |
public void close()
關閉此數據報套接字。
當前在此套接字上的接收(java.net.DatagramPacket)中阻塞的任何線程都將拋出 SocketException。
如果此套接字具有關聯的通道,則該通道也將關閉。
指定者:
在接口 AutoCloseable 中關閉
指定者:
在接口Closeable中關閉
public boolean isClosed()
返回套接字是否關閉。
返回:
如果套接字已關閉,則為 true
public DatagramChannel getChannel()
返回與此數據報套接字關聯的唯一 DatagramChannel 對象(如果有)。
當且僅當通道本身是通過 DatagramChannel.open 方法創(chuàng)建時,數據報套接字才會具有通道。
返回:
與此數據報套接字關聯的數據報通道,如果此套接字不是為通道創(chuàng)建的,則為 null
public static void setDatagramSocketImplFactory(DatagramSocketImplFactory fac) throws IOException
為應用程序設置數據報套接字實現工廠。 工廠只能指定一次。
當應用程序創(chuàng)建新的數據報套接字時,會調用套接字實現工廠的 createDatagramSocketImpl 方法來創(chuàng)建實際的數據報套接字實現。
除非已經設置了工廠,否則將 null 傳遞給方法是無操作的。
如果有安全管理器,該方法首先調用安全管理器的 checkSetFactory 方法,確保操作被允許。 這可能會導致 SecurityException。
參數:
參數名稱 | 參數描述 |
---|---|
fac | 想要的工廠。 |
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果在設置數據報套接字工廠時發(fā)生 I/O 錯誤。 |
SocketException | 如果工廠已經定義。 |
SecurityException | 如果存在安全管理器并且其 checkSetFactory 方法不允許該操作。 |
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯系方式:
更多建議: