新聞中心
SocketOptions

10年積累的成都網(wǎng)站設(shè)計、網(wǎng)站制作經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認識你,你也不認識我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有斗門免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
public interface SocketOptions獲取/設(shè)置套接字選項的方法接口。 該接口由:SocketImpl 和 DatagramSocketImpl 實現(xiàn)。 這些子類應(yīng)該覆蓋這個接口的方法,以支持他們自己的選項。
在此接口中指定選項的方法和常量僅用于實現(xiàn)。 如果您沒有繼承 SocketImpl 或 DatagramSocketImpl,則不會直接使用它們。 在 Socket、ServerSocket、DatagramSocket 和 MulticastSocket 中有類型安全的方法來獲取/設(shè)置這些選項。
字段摘要
| 修飾符和類型 | 字段 | 描述 |
|---|---|---|
| static int | IP_MULTICAST_IF | 設(shè)置發(fā)送多播數(shù)據(jù)包的出接口。 |
| static int | IP_MULTICAST_IF2 | 和上面一樣。 |
| static int | IP_MULTICAST_LOOP | 此選項啟用或禁用多播數(shù)據(jù)報的本地環(huán)回。 |
| static int | IP_TOS | 此選項設(shè)置 TCP 或 UDP 套接字的 IP 標(biāo)頭中的服務(wù)類型或流量類別字段。 |
| static int | SO_BINDADDR | 獲取套接字的本地地址綁定(此選項不能“設(shè)置”,只能“獲取”,因為套接字是在創(chuàng)建時綁定的,因此不能更改本地綁定地址)。 |
| static int | SO_BROADCAST | 為套接字設(shè)置 SO_BROADCAST。 |
| static int | SO_KEEPALIVE | 如果為 TCP 套接字設(shè)置了 keepalive 選項,并且在 2 小時內(nèi)沒有通過套接字在任一方向上交換數(shù)據(jù)(注意:實際值取決于實現(xiàn)),TCP 會自動向?qū)Φ确桨l(fā)送 keepalive 探測。 |
| static int | SO_LINGER | 指定關(guān)閉時延遲超時。 |
| static int | SO_OOBINLINE | 當(dāng)設(shè)置 OOBINLINE 選項時,套接字上接收到的任何 TCP 緊急數(shù)據(jù)都將通過套接字輸入流接收。 |
| static int | SO_RCVBUF | 設(shè)置平臺用于傳入網(wǎng)絡(luò) I/O 的底層緩沖區(qū)大小的提示。 |
| static int | SO_REUSEADDR | 為套接字設(shè)置 SO_REUSEADDR。 |
| static int | SO_SNDBUF | 設(shè)置平臺用于傳出網(wǎng)絡(luò) I/O 的底層緩沖區(qū)大小的提示。 |
| static int | SO_TIMEOUT | 設(shè)置阻塞 Socket 操作的超時時間: |
| static int | TCP_NODELAY | 禁用此連接的 Nagle 算法。 |
方法總結(jié)
| 修飾符和類型 | 方法 | 描述 |
|---|---|---|
| Object | getOption(int optID) | 獲取選項的值。 |
| void | setOption(int optID, Object value) | 啟用/禁用 optID 指定的選項。 |
字段詳細信息
IP_MULTICAST_IF
static final int IP_MULTICAST_IF
設(shè)置發(fā)送多播數(shù)據(jù)包的出接口。 在具有多個網(wǎng)絡(luò)接口的主機上很有用,其中應(yīng)用程序希望使用系統(tǒng)默認值以外的方式。 獲取/返回一個 InetAddress。
對多播有效:DatagramSocketImpl
IP_MULTICAST_IF2
static final int IP_MULTICAST_IF2
和上面一樣。 引入此選項后,IP_MULTICAST_IF 的行為將保持與以前相同,而此新選項可以支持使用 IPv4 和 IPv6 地址設(shè)置傳出接口。 注意:確保與此沒有沖突
IP_MULTICAST_LOOP
static final int IP_MULTICAST_LOOP
此選項啟用或禁用多播數(shù)據(jù)報的本地環(huán)回。 多播套接字默認啟用此選項。
IP_TOS
static final int IP_TOS
此選項設(shè)置 TCP 或 UDP 套接字的 IP 標(biāo)頭中的服務(wù)類型或流量類別字段。
SO_BINDADDR
static final int SO_BINDADDR
獲取套接字的本地地址綁定(此選項不能“設(shè)置”,只能“獲取”,因為套接字是在創(chuàng)建時綁定的,因此不能更改本地綁定地址)。 套接字的默認本地地址是 INADDR_ANY,表示多宿主主機上的任何本地地址。 多宿主主機可以使用此選項僅接受到其地址之一的連接(在 ServerSocket 或 DatagramSocket 的情況下),或指定其到對等方的返回地址(對于 Socket 或 DatagramSocket)。 此選項的參數(shù)是 InetAddress。
此選項必須在構(gòu)造函數(shù)中指定。
適用于:SocketImpl、DatagramSocketImpl
SO_BROADCAST
static final int SO_BROADCAST
為套接字設(shè)置 SO_BROADCAST。 此選項啟用和禁用進程發(fā)送廣播消息的能力。 它僅支持數(shù)據(jù)報套接字,并且僅在支持廣播消息概念的網(wǎng)絡(luò)(例如以太網(wǎng)、令牌環(huán)等)上受支持,并且默認為 DatagramSockets 設(shè)置。
SO_KEEPALIVE
static final int SO_KEEPALIVE
如果為 TCP 套接字設(shè)置了 keepalive 選項,并且在 2 小時內(nèi)沒有通過套接字在任一方向上交換數(shù)據(jù)(注意:實際值取決于實現(xiàn)),TCP 會自動向?qū)Φ确桨l(fā)送 keepalive 探測。 此探測是對等方必須響應(yīng)的 TCP 段。 期望三個響應(yīng)之一: 1. 對等點以期望的 ACK 響應(yīng)。 不通知應(yīng)用程序(因為一切正常)。 TCP 將在另外 2 小時不活動后發(fā)送另一個探測。 2. 對端響應(yīng)一個 RST,告訴本地 TCP 對端主機已經(jīng)崩潰并重新啟動。 插座已關(guān)閉。 3. 對端無響應(yīng)。 插座已關(guān)閉。 此選項的目的是檢測對等主機是否崩潰。 僅對 TCP 套接字有效:SocketImpl
SO_LINGER
static final int SO_LINGER
指定關(guān)閉時延遲超時。 此選項禁用/啟用從 TCP 套接字的 close() 立即返回。 使用非零整數(shù)超時啟用此選項意味著 close() 將阻止等待寫入對等方的所有數(shù)據(jù)的傳輸和確認,此時套接字將正常關(guān)閉。 達到延遲超時后,套接字將通過 TCP RST 強制關(guān)閉。 啟用超時為零的選項會立即強制關(guān)閉。 如果指定的超時值超過 65,535,它將減少到 65,535。
僅對 TCP 有效:SocketImpl
SO_OOBINLINE
static final int SO_OOBINLINE
當(dāng)設(shè)置 OOBINLINE 選項時,套接字上接收到的任何 TCP 緊急數(shù)據(jù)都將通過套接字輸入流接收。 當(dāng)該選項被禁用(這是默認設(shè)置)時,緊急數(shù)據(jù)將被靜默丟棄。
SO_RCVBUF
static final int SO_RCVBUF
設(shè)置平臺用于傳入網(wǎng)絡(luò) I/O 的底層緩沖區(qū)大小的提示。 當(dāng)在 set 中使用時,這是應(yīng)用程序向內(nèi)核提出的關(guān)于用于通過套接字接收數(shù)據(jù)的緩沖區(qū)大小的建議。 在 get 中使用時,它必須返回平臺在此套接字上接收數(shù)據(jù)時實際使用的緩沖區(qū)大小。 適用于所有套接字:SocketImpl、DatagramSocketImpl
SO_REUSEADDR
static final int SO_REUSEADDR
為套接字設(shè)置 SO_REUSEADDR。 這僅用于 java 中的 MulticastSockets,默認情況下為 MulticastSockets 設(shè)置。
適用于:DatagramSocketImpl
SO_SNDBUF
static final int SO_SNDBUF
設(shè)置平臺用于傳出網(wǎng)絡(luò) I/O 的底層緩沖區(qū)大小的提示。 當(dāng)在 set 中使用時,這是應(yīng)用程序向內(nèi)核提出的關(guān)于用于通過套接字發(fā)送的數(shù)據(jù)的緩沖區(qū)大小的建議。 在 get 中使用時,這必須返回平臺在此套接字上發(fā)送數(shù)據(jù)時實際使用的緩沖區(qū)大小。 適用于所有套接字:SocketImpl、DatagramSocketImpl
SO_TIMEOUT
static final int SO_TIMEOUT
設(shè)置阻塞 Socket 操作的超時時間:
ServerSocket.accept();
SocketInputStream.read();
DatagramSocket.receive();必須在進入阻塞操作之前設(shè)置該選項才能生效。 如果超時到期并且操作將繼續(xù)阻塞,則會引發(fā) java.io.InterruptedIOException。 在這種情況下,Socket 沒有關(guān)閉。
適用于所有套接字:SocketImpl、DatagramSocketImpl
TCP_NODELAY
static final int TCP_NODELAY
禁用此連接的 Nagle 算法。 寫入網(wǎng)絡(luò)的數(shù)據(jù)不會緩沖等待對先前寫入數(shù)據(jù)的確認。
僅對 TCP 有效:SocketImpl。
方法詳情
setOption
void setOption(int optID, Object value) throws SocketException
啟用/禁用 optID 指定的選項。 如果要啟用該選項,并且它需要一個特定于選項的“值”,則將其傳入值。 值的實際類型是特定于選項的,傳遞不屬于預(yù)期類型的內(nèi)容是錯誤的:
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 使用此方法設(shè)置:
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ù)的選項,將其值設(shè)置為 Boolean(false) 以外的任何值都會隱式啟用它。 如果選項無法識別、套接字已關(guān)閉或發(fā)生一些低級錯誤,則拋出 SocketException
參數(shù):
| 參數(shù)名稱 | 參數(shù)描述 |
|---|---|
| optID | 標(biāo)識選項 |
| value | 套接字選項的參數(shù) |
Throws:
| Throw名稱 | Throw描述 |
|---|---|
| SocketException | 如果該選項無法識別,則套接字已關(guān)閉,或者發(fā)生了一些低級錯誤 |
getOption
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 標(biāo)識要獲取的選項 |
返回:
option的值
Throws:
| Throw名稱 | Throw描述 |
|---|---|
| SocketException | 如果套接字關(guān)閉 |
| SocketException | 如果 optID 在協(xié)議棧中是未知的(包括 SocketImpl) |
本文標(biāo)題:創(chuàng)新互聯(lián)鴻蒙OS教程:鴻蒙OSSocketOptions
文章路徑:http://www.dlmjj.cn/article/dhieghc.html


咨詢
建站咨詢
