W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
public interface SocketOptions
獲取/設(shè)置套接字選項(xiàng)的方法接口。 該接口由:SocketImpl 和 DatagramSocketImpl 實(shí)現(xiàn)。 這些子類應(yīng)該覆蓋這個(gè)接口的方法,以支持他們自己的選項(xiàng)。
在此接口中指定選項(xiàng)的方法和常量?jī)H用于實(shí)現(xiàn)。 如果您沒(méi)有繼承 SocketImpl 或 DatagramSocketImpl,則不會(huì)直接使用它們。 在 Socket、ServerSocket、DatagramSocket 和 MulticastSocket 中有類型安全的方法來(lái)獲取/設(shè)置這些選項(xiàng)。
修飾符和類型 | 字段 | 描述 |
---|---|---|
static int | IP_MULTICAST_IF | 設(shè)置發(fā)送多播數(shù)據(jù)包的出接口。 |
static int | IP_MULTICAST_IF2 | 和上面一樣。 |
static int | IP_MULTICAST_LOOP | 此選項(xiàng)啟用或禁用多播數(shù)據(jù)報(bào)的本地環(huán)回。 |
static int | IP_TOS | 此選項(xiàng)設(shè)置 TCP 或 UDP 套接字的 IP 標(biāo)頭中的服務(wù)類型或流量類別字段。 |
static int | SO_BINDADDR | 獲取套接字的本地地址綁定(此選項(xiàng)不能“設(shè)置”,只能“獲取”,因?yàn)樘捉幼质窃趧?chuàng)建時(shí)綁定的,因此不能更改本地綁定地址)。 |
static int | SO_BROADCAST | 為套接字設(shè)置 SO_BROADCAST。 |
static int | SO_KEEPALIVE | 如果為 TCP 套接字設(shè)置了 keepalive 選項(xiàng),并且在 2 小時(shí)內(nèi)沒(méi)有通過(guò)套接字在任一方向上交換數(shù)據(jù)(注意:實(shí)際值取決于實(shí)現(xiàn)),TCP 會(huì)自動(dòng)向?qū)Φ确桨l(fā)送 keepalive 探測(cè)。 |
static int | SO_LINGER | 指定關(guān)閉時(shí)延遲超時(shí)。 |
static int | SO_OOBINLINE | 當(dāng)設(shè)置 OOBINLINE 選項(xiàng)時(shí),套接字上接收到的任何 TCP 緊急數(shù)據(jù)都將通過(guò)套接字輸入流接收。 |
static int | SO_RCVBUF | 設(shè)置平臺(tái)用于傳入網(wǎng)絡(luò) I/O 的底層緩沖區(qū)大小的提示。 |
static int | SO_REUSEADDR | 為套接字設(shè)置 SO_REUSEADDR。 |
static int | SO_SNDBUF | 設(shè)置平臺(tái)用于傳出網(wǎng)絡(luò) I/O 的底層緩沖區(qū)大小的提示。 |
static int | SO_TIMEOUT | 設(shè)置阻塞 Socket 操作的超時(shí)時(shí)間: |
static int | TCP_NODELAY | 禁用此連接的 Nagle 算法。 |
修飾符和類型 | 方法 | 描述 |
---|---|---|
Object | getOption(int optID) | 獲取選項(xiàng)的值。 |
void | setOption(int optID, Object value) | 啟用/禁用 optID 指定的選項(xiàng)。 |
static final int IP_MULTICAST_IF
設(shè)置發(fā)送多播數(shù)據(jù)包的出接口。 在具有多個(gè)網(wǎng)絡(luò)接口的主機(jī)上很有用,其中應(yīng)用程序希望使用系統(tǒng)默認(rèn)值以外的方式。 獲取/返回一個(gè) InetAddress。
對(duì)多播有效:DatagramSocketImpl
static final int IP_MULTICAST_IF2
和上面一樣。 引入此選項(xiàng)后,IP_MULTICAST_IF 的行為將保持與以前相同,而此新選項(xiàng)可以支持使用 IPv4 和 IPv6 地址設(shè)置傳出接口。 注意:確保與此沒(méi)有沖突
static final int IP_MULTICAST_LOOP
此選項(xiàng)啟用或禁用多播數(shù)據(jù)報(bào)的本地環(huán)回。 多播套接字默認(rèn)啟用此選項(xiàng)。
static final int IP_TOS
此選項(xiàng)設(shè)置 TCP 或 UDP 套接字的 IP 標(biāo)頭中的服務(wù)類型或流量類別字段。
static final int SO_BINDADDR
獲取套接字的本地地址綁定(此選項(xiàng)不能“設(shè)置”,只能“獲取”,因?yàn)樘捉幼质窃趧?chuàng)建時(shí)綁定的,因此不能更改本地綁定地址)。 套接字的默認(rèn)本地地址是 INADDR_ANY,表示多宿主主機(jī)上的任何本地地址。 多宿主主機(jī)可以使用此選項(xiàng)僅接受到其地址之一的連接(在 ServerSocket 或 DatagramSocket 的情況下),或指定其到對(duì)等方的返回地址(對(duì)于 Socket 或 DatagramSocket)。 此選項(xiàng)的參數(shù)是 InetAddress。
此選項(xiàng)必須在構(gòu)造函數(shù)中指定。
適用于:SocketImpl、DatagramSocketImpl
static final int SO_BROADCAST
為套接字設(shè)置 SO_BROADCAST。 此選項(xiàng)啟用和禁用進(jìn)程發(fā)送廣播消息的能力。 它僅支持?jǐn)?shù)據(jù)報(bào)套接字,并且僅在支持廣播消息概念的網(wǎng)絡(luò)(例如以太網(wǎng)、令牌環(huán)等)上受支持,并且默認(rèn)為 DatagramSockets 設(shè)置。
static final int SO_KEEPALIVE
如果為 TCP 套接字設(shè)置了 keepalive 選項(xiàng),并且在 2 小時(shí)內(nèi)沒(méi)有通過(guò)套接字在任一方向上交換數(shù)據(jù)(注意:實(shí)際值取決于實(shí)現(xiàn)),TCP 會(huì)自動(dòng)向?qū)Φ确桨l(fā)送 keepalive 探測(cè)。 此探測(cè)是對(duì)等方必須響應(yīng)的 TCP 段。 期望三個(gè)響應(yīng)之一: 1. 對(duì)等點(diǎn)以期望的 ACK 響應(yīng)。 不通知應(yīng)用程序(因?yàn)橐磺姓#?TCP 將在另外 2 小時(shí)不活動(dòng)后發(fā)送另一個(gè)探測(cè)。 2. 對(duì)端響應(yīng)一個(gè) RST,告訴本地 TCP 對(duì)端主機(jī)已經(jīng)崩潰并重新啟動(dòng)。 插座已關(guān)閉。 3. 對(duì)端無(wú)響應(yīng)。 插座已關(guān)閉。 此選項(xiàng)的目的是檢測(cè)對(duì)等主機(jī)是否崩潰。 僅對(duì) TCP 套接字有效:SocketImpl
static final int SO_LINGER
指定關(guān)閉時(shí)延遲超時(shí)。 此選項(xiàng)禁用/啟用從 TCP 套接字的 close() 立即返回。 使用非零整數(shù)超時(shí)啟用此選項(xiàng)意味著 close() 將阻止等待寫入對(duì)等方的所有數(shù)據(jù)的傳輸和確認(rèn),此時(shí)套接字將正常關(guān)閉。 達(dá)到延遲超時(shí)后,套接字將通過(guò) TCP RST 強(qiáng)制關(guān)閉。 啟用超時(shí)為零的選項(xiàng)會(huì)立即強(qiáng)制關(guān)閉。 如果指定的超時(shí)值超過(guò) 65,535,它將減少到 65,535。
僅對(duì) TCP 有效:SocketImpl
static final int SO_OOBINLINE
當(dāng)設(shè)置 OOBINLINE 選項(xiàng)時(shí),套接字上接收到的任何 TCP 緊急數(shù)據(jù)都將通過(guò)套接字輸入流接收。 當(dāng)該選項(xiàng)被禁用(這是默認(rèn)設(shè)置)時(shí),緊急數(shù)據(jù)將被靜默丟棄。
static final int SO_RCVBUF
設(shè)置平臺(tái)用于傳入網(wǎng)絡(luò) I/O 的底層緩沖區(qū)大小的提示。 當(dāng)在 set 中使用時(shí),這是應(yīng)用程序向內(nèi)核提出的關(guān)于用于通過(guò)套接字接收數(shù)據(jù)的緩沖區(qū)大小的建議。 在 get 中使用時(shí),它必須返回平臺(tái)在此套接字上接收數(shù)據(jù)時(shí)實(shí)際使用的緩沖區(qū)大小。 適用于所有套接字:SocketImpl、DatagramSocketImpl
static final int SO_REUSEADDR
為套接字設(shè)置 SO_REUSEADDR。 這僅用于 java 中的 MulticastSockets,默認(rèn)情況下為 MulticastSockets 設(shè)置。
適用于:DatagramSocketImpl
static final int SO_SNDBUF
設(shè)置平臺(tái)用于傳出網(wǎng)絡(luò) I/O 的底層緩沖區(qū)大小的提示。 當(dāng)在 set 中使用時(shí),這是應(yīng)用程序向內(nèi)核提出的關(guān)于用于通過(guò)套接字發(fā)送的數(shù)據(jù)的緩沖區(qū)大小的建議。 在 get 中使用時(shí),這必須返回平臺(tái)在此套接字上發(fā)送數(shù)據(jù)時(shí)實(shí)際使用的緩沖區(qū)大小。 適用于所有套接字:SocketImpl、DatagramSocketImpl
static final int SO_TIMEOUT
設(shè)置阻塞 Socket 操作的超時(shí)時(shí)間:
ServerSocket.accept();
SocketInputStream.read();
DatagramSocket.receive();
必須在進(jìn)入阻塞操作之前設(shè)置該選項(xiàng)才能生效。 如果超時(shí)到期并且操作將繼續(xù)阻塞,則會(huì)引發(fā) java.io.InterruptedIOException。 在這種情況下,Socket 沒(méi)有關(guān)閉。
適用于所有套接字:SocketImpl、DatagramSocketImpl
static final int TCP_NODELAY
禁用此連接的 Nagle 算法。 寫入網(wǎng)絡(luò)的數(shù)據(jù)不會(huì)緩沖等待對(duì)先前寫入數(shù)據(jù)的確認(rèn)。
僅對(duì) TCP 有效:SocketImpl。
void setOption(int optID, Object value) throws SocketException
啟用/禁用 optID 指定的選項(xiàng)。 如果要啟用該選項(xiàng),并且它需要一個(gè)特定于選項(xiàng)的“值”,則將其傳入值。 值的實(shí)際類型是特定于選項(xiàng)的,傳遞不屬于預(yù)期類型的內(nèi)容是錯(cuò)誤的:
SocketImpl s;
...
s.setOption(SO_LINGER, new Integer(10));
// OK - set SO_LINGER w/ timeout of 10 sec.
s.setOption(SO_LINGER, new Double(10));
// ERROR - expects java.lang.Integer
如果請(qǐng)求的選項(xiàng)是二進(jìn)制的,則可以通過(guò) java.lang.Boolean 使用此方法設(shè)置:
s.setOption(TCP_NODELAY, new Boolean(true));
// OK - enables TCP_NODELAY, a binary option
任何選項(xiàng)都可以使用此方法和布爾值(false)禁用:
s.setOption(TCP_NODELAY, new Boolean(false));
// OK - disables TCP_NODELAY
s.setOption(SO_LINGER, new Boolean(false));
// OK - disables SO_LINGER
對(duì)于具有 on 和 off 概念并且需要非布爾參數(shù)的選項(xiàng),將其值設(shè)置為 Boolean(false) 以外的任何值都會(huì)隱式啟用它。 如果選項(xiàng)無(wú)法識(shí)別、套接字已關(guān)閉或發(fā)生一些低級(jí)錯(cuò)誤,則拋出 SocketException
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
optID | 標(biāo)識(shí)選項(xiàng) |
value | 套接字選項(xiàng)的參數(shù) |
Throws:
Throw名稱 | Throw描述 |
---|---|
SocketException | 如果該選項(xiàng)無(wú)法識(shí)別,則套接字已關(guān)閉,或者發(fā)生了一些低級(jí)錯(cuò)誤 |
Object getOption(int optID) throws SocketException
獲取選項(xiàng)的值。 如果啟用,二進(jìn)制選項(xiàng)將返回 java.lang.Boolean(true),如果禁用,則返回 java.lang.Boolean(false),例如:
SocketImpl s;
...
Boolean noDelay = (Boolean)(s.getOption(TCP_NODELAY));
if (noDelay.booleanValue()) {
// true if TCP_NODELAY is enabled...
...
}
對(duì)于將特定類型作為參數(shù)的選項(xiàng),getOption(int) 將返回參數(shù)的值,否則將返回 java.lang.Boolean(false):
Object o = s.getOption(SO_LINGER);
if (o instanceof Integer) {
System.out.print("Linger time is " + ((Integer)o).intValue());
} else {
// the true type of o is java.lang.Boolean(false);
}
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
optID | 一個(gè) int 標(biāo)識(shí)要獲取的選項(xiàng) |
返回:
option的值
Throws:
Throw名稱 | Throw描述 |
---|---|
SocketException | 如果套接字關(guān)閉 |
SocketException | 如果 optID 在協(xié)議棧中是未知的(包括 SocketImpl) |
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: