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