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