W3Cschool
恭喜您成為首批注冊用戶
獲得88經驗值獎勵
java.lang.Object
|---java.net.Socket
public class Socket
extends Object
implements Closeable
此類實現(xiàn)客戶端套接字(也稱為“套接字”)。 套接字是兩臺機器之間通信的端點。
套接字的實際工作由 SocketImpl 類的實例執(zhí)行。 應用程序通過更改創(chuàng)建套接字實現(xiàn)的套接字工廠,可以將自己配置為創(chuàng)建適合本地防火墻的套接字。
修飾符 | 構造函數(shù) | 描述 |
---|---|---|
Socket() | 創(chuàng)建一個未連接的套接字,系統(tǒng)默認類型為 SocketImpl。 | |
Socket(String host, int port) | 創(chuàng)建一個流套接字并將其連接到指定主機上的指定端口號。 | |
Socket(String host, int port, boolean stream) | 已棄用。 使用 DatagramSocket 代替 UDP 傳輸。 | |
Socket(String host, int port, InetAddress localAddr, int localPort) | 創(chuàng)建一個套接字并將其連接到指定遠程端口上的指定遠程主機。 | |
Socket(InetAddress address, int port) | 創(chuàng)建一個流套接字并將其連接到指定 IP 地址的指定端口號。 | |
Socket(InetAddress host, int port, boolean stream) | 已棄用。 使用 DatagramSocket 代替 UDP 傳輸。 | |
Socket(InetAddress address, int port, InetAddress localAddr, int localPort) | 創(chuàng)建一個套接字并將其連接到指定遠程端口上的指定遠程地址。 | |
Socket(Proxy proxy) | 創(chuàng)建一個未連接的套接字,指定代理的類型(如果有),無論任何其他設置如何,都應使用該類型。 | |
protected | Socket(SocketImpl impl) | 使用用戶指定的 SocketImpl 創(chuàng)建一個未連接的 Socket。 |
修飾符和類型 | 方法 | 描述 |
---|---|---|
void | bind(SocketAddress bindpoint) | 將套接字綁定到本地地址。 |
void | close() | 關閉此套接字。 |
void | connect(SocketAddress endpoint) | 將此套接字連接到服務器。 |
void | connect(SocketAddress endpoint, int timeout) | 將此套接字連接到具有指定超時值的服務器。 |
SocketChannel | getChannel() | 返回與此套接字關聯(lián)的唯一 SocketChannel 對象(如果有)。 |
InetAddress | getInetAddress() | 返回套接字連接的地址。 |
InputStream | getInputStream() | 返回此套接字的輸入流。 |
boolean | getKeepAlive() | 測試是否啟用了 SocketOptions#SO_KEEPALIVE。 |
InetAddress | getLocalAddress() | 獲取套接字綁定的本地地址。 |
int | getLocalPort() | 返回此套接字綁定到的本地端口號。 |
SocketAddress | getLocalSocketAddress() | 返回此套接字綁定到的端點的地址。 |
boolean | getOOBInline() | 測試是否啟用了 SocketOptions#SO_OOBINLINE。 |
OutputStream | getOutputStream() | 返回此套接字的輸出流。 |
int | getPort() | 返回此套接字連接到的遠程端口號。 |
int | getReceiveBufferSize() | 獲取此 Socket 的 SocketOptions#SO_RCVBUF 選項的值,即平臺用于在此 Socket 上輸入的緩沖區(qū)大小。 |
SocketAddress | getRemoteSocketAddress() | 返回此套接字連接到的端點的地址,如果未連接,則返回 null。 |
boolean | getReuseAddress() | 測試 SocketOptions#SO_REUSEADDR 是否啟用。 |
int | getSendBufferSize() | 獲取此 Socket 的 SocketOptions#SO_SNDBUF 選項的值,即平臺用于在此 Socket 上輸出的緩沖區(qū)大小。 |
int | getSoLinger() | 返回 SocketOptions#SO_LINGER 的設置。 |
int | getSoTimeout() | 返回 SocketOptions#SO_TIMEOUT 的設置。 |
boolean | getTcpNoDelay() | 測試是否啟用了 SocketOptions#TCP_NODELAY。 |
int | getTrafficClass() | 獲取從此 Socket 發(fā)送的數(shù)據(jù)包的 IP 標頭中的流量類別或服務類型 |
boolean | isBound() | 返回套接字的綁定狀態(tài)。 |
boolean | isClosed() | 返回套接字的關閉狀態(tài)。 |
boolean | isConnected() | 返回套接字的連接狀態(tài)。 |
boolean | isInputShutdown() | 返回套接字連接的讀半部分是否關閉。 |
boolean | isOutputShutdown() | 返回套接字連接的寫半部分是否關閉。 |
void | sendUrgentData(int data) | 在套接字上發(fā)送一個字節(jié)的緊急數(shù)據(jù)。 |
void | setKeepAlive(boolean on) | 啟用/禁用 SocketOptions#SO_KEEPALIVE。 |
void | setOOBInline(boolean on) | 啟用/禁用 SocketOptions#SO_OOBINLINE(接收 TCP 緊急數(shù)據(jù)) 默認情況下,禁用此選項,并且在套接字上接收到的 TCP 緊急數(shù)據(jù)被靜默丟棄。 |
void | setPerformancePreferences(int connectionTime, int latency, int bandwidth) | 設置此套接字的性能首選項。 |
void | setReceiveBufferSize(int size) | 將 SocketOptions#SO_RCVBUF 選項設置為此 Socket 的指定值。 |
void | setReuseAddress(boolean on) | 啟用/禁用 SocketOptions#SO_REUSEADDR 套接字選項。 |
void | setSendBufferSize(int size) | 將 SocketOptions#SO_SNDBUF 選項設置為此 Socket 的指定值。 |
static void | setSocketImplFactory(SocketImplFactory fac) | 為應用程序設置客戶端套接字實現(xiàn)工廠。 |
void | setSoLinger(boolean on, int linger) | 使用指定的延遲時間(以秒為單位)啟用/禁用 SocketOptions#SO_LINGER。 |
void | setSoTimeout(int timeout) | 使用指定的超時啟用/禁用 SocketOptions#SO_TIMEOUT,以毫秒為單位。 |
void | setTcpNoDelay(boolean on) | 啟用/禁用 SocketOptions#TCP_NODELAY(禁用/啟用 Nagle 算法)。 |
void | setTrafficClass(int tc) | 為從此 Socket 發(fā)送的數(shù)據(jù)包設置 IP 標頭中的流量類別或服務類型八位字節(jié)。 |
void | shutdownInput() | 將此套接字的輸入流放在“流的末尾”。 |
void | shutdownOutput() | 禁用此套接字的輸出流。 |
String | toString() | 將此套接字轉換為字符串。 |
從類 java.lang.Object 繼承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
public Socket()
創(chuàng)建一個未連接的套接字,系統(tǒng)默認類型為 SocketImpl。
public Socket(Proxy proxy)
創(chuàng)建一個未連接的套接字,指定代理的類型(如果有),無論任何其他設置如何,都應使用該類型。
如果存在安全管理器,則調用其 checkConnect 方法,并使用代理主機地址和端口號作為其參數(shù)。 這可能會導致 SecurityException。
例子:
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
proxy | 指定應使用哪種代理的代理對象。 |
Throws:
Throw名稱 | Throw描述 |
---|---|
IllegalArgumentException | 如果代理的類型無效或為空。 |
SecurityException | 如果存在安全管理器并且拒絕連接到代理的權限。 |
protected Socket(SocketImpl impl) throws SocketException
使用用戶指定的 SocketImpl 創(chuàng)建一個未連接的 Socket。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
impl | 子類希望在 Socket 上使用的 SocketImpl 的實例。 |
Throws:
Throw名稱 | Throw描述 |
---|---|
SocketException | 如果底層協(xié)議有錯誤,例如 TCP 錯誤。 |
SecurityException | 如果 impl 不為 null 并且設置了安全管理器,并且其 checkPermission 方法不允許 NetPermission("setSocketImpl")。 |
public Socket(String host, int port) throws IOException, UnknownHostException
創(chuàng)建一個流套接字并將其連接到指定主機上的指定端口號。
如果指定的主機為空,則相當于將地址指定為 InetAddress.getByName(null)。 也就是說,相當于指定了loopback接口的地址。
如果應用程序指定了服務器套接字工廠,則調用該工廠的 createSocketImpl 方法來創(chuàng)建實際的套接字實現(xiàn)。 否則會創(chuàng)建一個“普通”套接字。
如果存在安全管理器,則調用其 checkConnect 方法,并使用主機地址和端口作為其參數(shù)。 這可能會導致 SecurityException。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
host | 主機名,或 null 用于環(huán)回地址。 |
port | 端口號。 |
Throws:
Throw名稱 | Throw描述 |
---|---|
UnknownHostException | 如果無法確定主機的 IP 地址。 |
IOException | 如果在創(chuàng)建套接字時發(fā)生 I/O 錯誤。 |
SecurityException | 如果存在安全管理器并且其 checkConnect 方法不允許該操作。 |
IllegalArgumentException | 如果端口參數(shù)超出指定的有效端口值范圍,即介于 0 和 65535 之間(包括 0 和 65535)。 |
public Socket(InetAddress address, int port) throws IOException
創(chuàng)建一個流套接字并將其連接到指定 IP 地址的指定端口號。
如果應用程序指定了套接字工廠,則調用該工廠的 createSocketImpl 方法來創(chuàng)建實際的套接字實現(xiàn)。 否則會創(chuàng)建一個“普通”套接字。
如果存在安全管理器,則調用其 checkConnect 方法,并使用主機地址和端口作為其參數(shù)。 這可能會導致 SecurityException。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
address | IP 地址。 |
port | 端口號。 |
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果在創(chuàng)建套接字時發(fā)生 I/O 錯誤。 |
SecurityException | 如果存在安全管理器并且其 checkConnect 方法不允許該操作。 |
IllegalArgumentException | 如果端口參數(shù)超出指定的有效端口值范圍,即介于 0 和 65535 之間(包括 0 和 65535)。 |
NullPointerException | 如果地址為空。 |
public Socket(String host, int port, InetAddress localAddr, int localPort) throws IOException
創(chuàng)建一個套接字并將其連接到指定遠程端口上的指定遠程主機。 Socket 還將 bind() 到提供的本地地址和端口。
如果指定的主機為空,則相當于將地址指定為 InetAddress.getByName(null)。 也就是說,相當于指定了loopback接口的地址。
本地端口號為零將使系統(tǒng)在綁定操作中選擇一個空閑端口。
如果存在安全管理器,則調用其 checkConnect 方法,并使用主機地址和端口作為其參數(shù)。 這可能會導致 SecurityException。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
host | 遠程主機的名稱,或 null 為環(huán)回地址。 |
port | 遠程端口 |
localAddr | 套接字綁定到的本地地址,或者對于 anyLocal 地址為 null。 |
localPort | 套接字綁定到的本地端口,或者系統(tǒng)選擇的空閑端口為零。 |
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果在創(chuàng)建套接字時發(fā)生 I/O 錯誤。 |
SecurityException | 如果安全管理器存在并且它的 checkConnect 方法不允許連接到目標,或者它的 checkListen 方法不允許綁定到本地端口。 |
IllegalArgumentException | 如果 port 參數(shù)或 localPort 參數(shù)超出指定的有效端口值范圍,即 0 到 65535 之間,包括 0 和 65535。 |
public Socket(InetAddress address, int port, InetAddress localAddr, int localPort) throws IOException
創(chuàng)建一個套接字并將其連接到指定遠程端口上的指定遠程地址。 Socket 還將 bind() 到提供的本地地址和端口。
如果指定的本地地址為空,則相當于將該地址指定為 AnyLocal 地址(請參閱 InetAddress.isAnyLocalAddress())。
本地端口號為零將使系統(tǒng)在綁定操作中選擇一個空閑端口。
如果存在安全管理器,則調用其 checkConnect 方法,并使用主機地址和端口作為其參數(shù)。 這可能會導致 SecurityException。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
address | 遠程地址 |
port | 遠程端口 |
localAddr | 套接字綁定到的本地地址,或者對于 anyLocal 地址為 null。 |
localPort | 套接字綁定到的本地端口或系統(tǒng)選擇的空閑端口為零。 |
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果在創(chuàng)建套接字時發(fā)生 I/O 錯誤。 |
SecurityException | 如果安全管理器存在并且它的 checkConnect 方法不允許連接到目標,或者它的 checkListen 方法不允許綁定到本地端口。 |
IllegalArgumentException | 如果 port 參數(shù)或 localPort 參數(shù)超出指定的有效端口值范圍,即 0 到 65535 之間,包括 0 和 65535。 |
NullPointerException | 如果地址為空。 |
@Deprecated public Socket(String host, int port, boolean stream) throws IOException
已棄用。 使用 DatagramSocket 代替 UDP 傳輸。
創(chuàng)建一個流套接字并將其連接到指定主機上的指定端口號。
如果指定的主機為空,則相當于將地址指定為 InetAddress.getByName(null)。 也就是說,相當于指定了loopback接口的地址。
如果流參數(shù)為真,這將創(chuàng)建一個流套接字。 如果流參數(shù)為假,它會創(chuàng)建一個數(shù)據(jù)報套接字。
如果應用程序指定了服務器套接字工廠,則調用該工廠的 createSocketImpl 方法來創(chuàng)建實際的套接字實現(xiàn)。 否則會創(chuàng)建一個“普通”套接字。
如果存在安全管理器,則調用其 checkConnect 方法,并使用主機地址和端口作為其參數(shù)。 這可能會導致 SecurityException。
如果使用 UDP 套接字,則與 TCP/IP 相關的套接字選項將不適用。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
host | 主機名,或 null 用于環(huán)回地址。 |
port | 端口號。 |
stream | 一個布爾值,指示這是流套接字還是數(shù)據(jù)報套接字。 |
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果在創(chuàng)建套接字時發(fā)生 I/O 錯誤。 |
SecurityException | 如果存在安全管理器并且其 checkConnect 方法不允許該操作。 |
IllegalArgumentException | 如果端口參數(shù)超出指定的有效端口值范圍,即介于 0 和 65535 之間(包括 0 和 65535)。 |
@Deprecated public Socket(InetAddress host, int port, boolean stream) throws IOException
已棄用。 使用 DatagramSocket 代替 UDP 傳輸。
創(chuàng)建一個套接字并將其連接到指定 IP 地址的指定端口號。
如果流參數(shù)為真,這將創(chuàng)建一個流套接字。 如果流參數(shù)為假,它會創(chuàng)建一個數(shù)據(jù)報套接字。
如果應用程序指定了服務器套接字工廠,則調用該工廠的 createSocketImpl 方法來創(chuàng)建實際的套接字實現(xiàn)。 否則會創(chuàng)建一個“普通”套接字。
如果有安全管理器,則調用其 checkConnect 方法,并使用 host.getHostAddress() 和 port 作為其參數(shù)。 這可能會導致 SecurityException。
如果使用 UDP 套接字,則 TCP/IP 相關的套接字選項將不適用。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
host | IP 地址。 |
port | 端口號。 |
stream | 如果為true,則創(chuàng)建一個流套接字; 否則,創(chuàng)建一個數(shù)據(jù)報套接字。 |
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果在創(chuàng)建套接字時發(fā)生 I/O 錯誤。 |
SecurityException | 如果存在安全管理器并且其 checkConnect 方法不允許該操作。 |
IllegalArgumentException | 如果端口參數(shù)超出指定的有效端口值范圍,即介于 0 和 65535 之間(包括 0 和 65535)。 |
NullPointerException | 如果主機為空。 |
public void connect(SocketAddress endpoint) throws IOException
將此套接字連接到服務器。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
endpoint | 套接字地址 |
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果在連接過程中發(fā)生錯誤 |
IllegalBlockingModeException | 如果此套接字具有關聯(lián)的通道,并且該通道處于非阻塞模式 |
IllegalArgumentException | 如果端點為 null 或者是此套接字不支持的 SocketAddress 子類 |
public void connect(SocketAddress endpoint, int timeout) throws IOException
將此套接字連接到具有指定超時值的服務器。 超時為零被解釋為無限超時。 然后連接將阻塞,直到建立或發(fā)生錯誤。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
endpoint | 套接字地址 |
timeout | 以毫秒為單位使用的超時值。 |
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果在連接過程中發(fā)生錯誤 |
SocketTimeoutException | 如果超時在連接之前到期 |
IllegalBlockingModeException | 如果此套接字具有關聯(lián)的通道,并且該通道處于非阻塞模式 |
IllegalArgumentException | 如果端點為 null 或者是此套接字不支持的 SocketAddress 子類 |
public void bind(SocketAddress bindpoint) throws IOException
將套接字綁定到本地地址。
如果地址為空,那么系統(tǒng)將選擇一個臨時端口和一個有效的本地地址來綁定套接字。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
bindpoint | 要綁定到的 SocketAddress |
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果綁定操作失敗,或者套接字已經綁定。 |
IllegalArgumentException | 如果 bindpoint 是此套接字不支持的 SocketAddress 子類 |
SecurityException | 如果存在安全管理器并且其 checkListen 方法不允許綁定到本地端口。 |
public InetAddress getInetAddress()
返回套接字連接的地址。
如果套接字在關閉之前已連接,則此方法將在套接字關閉后繼續(xù)返回已連接的地址。
返回:
此套接字連接到的遠程 IP 地址,如果套接字未連接,則為 null。
public InetAddress getLocalAddress()
獲取套接字綁定的本地地址。
如果設置了安全管理器,則使用本地地址和 -1 作為其參數(shù)調用其 checkConnect 方法,以查看是否允許該操作。 如果不允許該操作,則返回 InetAddress#getLoopbackAddress 地址。
返回:
套接字綁定的本地地址,如果安全管理器拒絕,則為環(huán)回地址,或者如果套接字已關閉或尚未綁定,則為通配符地址。
public int getPort()
返回此套接字連接到的遠程端口號。
如果套接字在關閉之前已連接,則此方法將在套接字關閉后繼續(xù)返回連接的端口號。
返回:
此套接字連接到的遠程端口號,如果套接字尚未連接,則為 0。
public int getLocalPort()
返回此套接字綁定到的本地端口號。
如果套接字在關閉之前已經綁定,那么該方法將在套接字關閉后繼續(xù)返回本地端口號。
返回:
此套接字綁定到的本地端口號,如果尚未綁定套接字,則為 -1。
public SocketAddress getRemoteSocketAddress()
返回此套接字連接到的端點的地址,如果未連接,則返回 null。
如果套接字在關閉之前已連接,則此方法將在套接字關閉后繼續(xù)返回已連接的地址。
返回:
表示此套接字的遠程端點的 SocketAddress,如果尚未連接,則為 null。
public SocketAddress getLocalSocketAddress()
返回此套接字綁定到的端點的地址。
如果綁定到由 InetSocketAddress 表示的端點的套接字關閉,則此方法將在套接字關閉后繼續(xù)返回 InetSocketAddress。 在這種情況下,返回的 InetSocketAddress 的地址是 InetAddress#isAnyLocalAddress 地址,它的端口是它綁定到的本地端口。
如果設置了安全管理器,則使用本地地址和 -1 作為其參數(shù)調用其 checkConnect 方法,以查看是否允許該操作。 如果不允許該操作,則返回表示 InetAddress#getLoopbackAddress 地址和此套接字綁定的本地端口的 SocketAddress。
返回:
表示此套接字的本地端點的 SocketAddress,如果被安全管理器拒絕,則表示環(huán)回地址的 SocketAddress,如果尚未綁定套接字,則為 null。
public SocketChannel getChannel()
返回與此套接字關聯(lián)的唯一 SocketChannel 對象(如果有)。
當且僅當通道本身是通過 SocketChannel.open 或 ServerSocketChannel.accept 方法創(chuàng)建時,套接字才會有通道。
返回:
與此套接字關聯(lián)的套接字通道,如果此套接字不是為通道創(chuàng)建的,則為 null
public InputStream getInputStream() throws IOException
返回此套接字的輸入流。
如果此套接字具有關聯(lián)的通道,則生成的輸入流將其所有操作委托給通道。如果通道處于非阻塞模式,則輸入流的讀取操作將拋出 IllegalBlockingModeException。
在異常情況下,底層連接可能會被遠程主機或網(wǎng)絡軟件中斷(例如 TCP 連接情況下的連接重置)。當網(wǎng)絡軟件檢測到斷開的連接時,以下內容適用于返回的輸入流:-
關閉返回的 InputStream 將關閉關聯(lián)的套接字。
返回:
用于從此套接字讀取字節(jié)的輸入流。
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果在創(chuàng)建輸入流時發(fā)生 I/O 錯誤、套接字已關閉、套接字未連接或套接字輸入已使用 shutdownInput() 關閉 |
public OutputStream getOutputStream() throws IOException
返回此套接字的輸出流。
如果此套接字具有關聯(lián)的通道,則生成的輸出流將其所有操作委托給通道。 如果通道處于非阻塞模式,則輸出流的寫入操作將引發(fā) IllegalBlockingModeException。
關閉返回的 OutputStream 將關閉關聯(lián)的套接字。
返回:
用于將字節(jié)寫入此套接字的輸出流。
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果在創(chuàng)建輸出流時發(fā)生 I/O 錯誤或套接字未連接。 |
public void setTcpNoDelay(boolean on) throws SocketException
啟用/禁用 SocketOptions#TCP_NODELAY(禁用/啟用 Nagle 算法)。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
on | true 啟用 TCP_NODELAY,false 禁用。 |
Throws:
Throw名稱 | Throw描述 |
---|---|
SocketException | 如果底層協(xié)議有錯誤,例如 TCP 錯誤。 |
public boolean getTcpNoDelay() throws SocketException
測試是否啟用了 SocketOptions#TCP_NODELAY。
返回:
一個布爾值,指示是否啟用 SocketOptions#TCP_NODELAY。
Throws:
Throw名稱 | Throw描述 |
---|---|
SocketException | 如果底層協(xié)議有錯誤,例如 TCP 錯誤。 |
public void setSoLinger(boolean on, int linger) throws SocketException
使用指定的延遲時間(以秒為單位)啟用/禁用 SocketOptions#SO_LINGER。 最大超時值是特定于平臺的。 該設置僅影響套接字關閉。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
on | 是否留戀。 |
linger | 如果 on 為true,要逗留多久。 |
Throws:
Throw名稱 | Throw描述 |
---|---|
SocketException | 如果底層協(xié)議有錯誤,例如 TCP 錯誤。 |
IllegalArgumentException | 如果延遲值為負。 |
public int getSoLinger() throws SocketException
返回 SocketOptions#SO_LINGER 的設置。 -1 返回意味著該選項被禁用。 該設置僅影響套接字關閉。
返回:
SocketOptions#SO_LINGER 的設置。
Throws:
Throw名稱 | Throw描述 |
---|---|
SocketException | 如果底層協(xié)議有錯誤,例如 TCP 錯誤。 |
public void sendUrgentData(int data) throws IOException
在套接字上發(fā)送一個字節(jié)的緊急數(shù)據(jù)。 要發(fā)送的字節(jié)是數(shù)據(jù)參數(shù)的最低八位。 緊急字節(jié)在任何先前寫入套接字 OutputStream 之后和任何未來寫入 OutputStream 之前發(fā)送。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
data | 要發(fā)送的數(shù)據(jù)字節(jié) |
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果發(fā)送數(shù)據(jù)時出錯。 |
public void setOOBInline(boolean on) throws SocketException
啟用/禁用 SocketOptions#SO_OOBINLINE(接收 TCP 緊急數(shù)據(jù)) 默認情況下,禁用此選項,并且在套接字上接收到的 TCP 緊急數(shù)據(jù)被靜默丟棄。 如果用戶希望接收緊急數(shù)據(jù),則必須啟用此選項。 啟用后,緊急數(shù)據(jù)將與普通數(shù)據(jù)一起接收。
請注意,僅提供有限的支持來處理傳入的緊急數(shù)據(jù)。 特別是,不提供傳入緊急數(shù)據(jù)的通知,并且沒有能力區(qū)分正常數(shù)據(jù)和緊急數(shù)據(jù),除非由更高級別的協(xié)議提供。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
on | true 啟用 SocketOptions#SO_OOBINLINE, false 禁用。 |
Throws:
Throw名稱 | Throw描述 |
---|---|
SocketException | 如果底層協(xié)議有錯誤,例如 TCP 錯誤。 |
public boolean getOOBInline() throws SocketException
測試是否啟用了 SocketOptions#SO_OOBINLINE。
返回:
一個布爾值,指示是否啟用 SocketOptions#SO_OOBINLINE。
Throws:
Throw名稱 | Throw描述 |
---|---|
SocketException | 如果底層協(xié)議有錯誤,例如 TCP 錯誤。 |
public void setSoTimeout(int timeout) throws SocketException
使用指定的超時啟用/禁用 SocketOptions#SO_TIMEOUT,以毫秒為單位。 將此選項設置為非零超時,對與此 Socket 關聯(lián)的 InputStream 的 read() 調用將僅阻塞此時間量。 如果超時到期,則會引發(fā) java.net.SocketTimeoutException,盡管 Socket 仍然有效。 必須在進入阻塞操作之前啟用該選項才能生效。 超時必須 > 0。超時為零被解釋為無限超時。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
timeout | 指定的超時時間,以毫秒為單位。 |
Throws:
Throw名稱 | Throw描述 |
---|---|
SocketException | 如果底層協(xié)議有錯誤,例如 TCP 錯誤。 |
public int getSoTimeout() throws SocketException
返回 SocketOptions#SO_TIMEOUT 的設置。 返回 0 表示該選項被禁用(即無限超時)。
返回:
SocketOptions#SO_TIMEOUT 的設置
Throws:
Throw名稱 | Throw描述 |
---|---|
SocketException | 如果底層協(xié)議有錯誤,例如 TCP 錯誤。 |
public void setSendBufferSize(int size) throws SocketException
將 SocketOptions#SO_SNDBUF 選項設置為此 Socket 的指定值。 SocketOptions#SO_SNDBUF 選項被平臺的網(wǎng)絡代碼用作設置底層網(wǎng)絡 I/O 緩沖區(qū)大小的提示。
因為 SocketOptions#SO_SNDBUF 是一個提示,所以想要驗證緩沖區(qū)設置為多大大小的應用程序應該調用 getSendBufferSize()。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
size | 設置發(fā)送緩沖區(qū)大小的大小。 該值必須大于 0。 |
Throws:
Throw名稱 | Throw描述 |
---|---|
SocketException | 如果底層協(xié)議有錯誤,例如 TCP 錯誤。 |
IllegalArgumentException | 如果值為 0 或為負數(shù)。 |
public int getSendBufferSize() throws SocketException
獲取此 Socket 的 SocketOptions#SO_SNDBUF 選項的值,即平臺用于在此 Socket 上輸出的緩沖區(qū)大小。
返回:
此 Socket 的 SocketOptions#SO_SNDBUF 選項的值。
Throws:
Throw名稱 | Throw描述 |
---|---|
SocketException | 如果底層協(xié)議有錯誤,例如 TCP 錯誤。 |
public void setReceiveBufferSize(int size) throws SocketException
將 SocketOptions#SO_RCVBUF 選項設置為此 Socket 的指定值。 SocketOptions#SO_RCVBUF 選項被平臺的網(wǎng)絡代碼用作設置底層網(wǎng)絡 I/O 緩沖區(qū)大小的提示。
增加接收緩沖區(qū)大小可以提高大容量連接的網(wǎng)絡 I/O 性能,而減小它可以幫助減少傳入數(shù)據(jù)的積壓。
因為 SocketOptions#SO_RCVBUF 是一個提示,所以想要驗證緩沖區(qū)設置為多大大小的應用程序應該調用 getReceiveBufferSize()。
SocketOptions#SO_RCVBUF 的值也用于設置通告給遠程對等方的 TCP 接收窗口。一般情況下,只要連接了套接字,就可以隨時修改窗口大小。但是,如果需要大于 64K 的接收窗口,則必須在套接字連接到遠程對等點之前請求。有兩種情況需要注意:
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
size | 設置接收緩沖區(qū)大小的大小。 該值必須大于 0。 |
Throws:
Throw名稱 | Throw描述 |
---|---|
IllegalArgumentException | 如果值為 0 或為負數(shù)。 |
SocketException | 如果底層協(xié)議有錯誤,例如 TCP 錯誤。 |
public int getReceiveBufferSize() throws SocketException
獲取此 Socket 的 SocketOptions#SO_RCVBUF 選項的值,即平臺用于在此 Socket 上輸入的緩沖區(qū)大小。
返回:
此 Socket 的 SocketOptions#SO_RCVBUF 選項的值。
Throws:
Throw名稱 | Throw描述 |
---|---|
SocketException | 如果底層協(xié)議有錯誤,例如 TCP 錯誤。 |
public void setKeepAlive(boolean on) throws SocketException
啟用/禁用 SocketOptions#SO_KEEPALIVE。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
on | 是否開啟socket keep alive。 |
Throws:
Throw名稱 | Throw描述 |
---|---|
SocketException | 如果底層協(xié)議有錯誤,例如 TCP 錯誤。 |
public boolean getKeepAlive() throws SocketException
測試是否啟用了 SocketOptions#SO_KEEPALIVE。
返回:
一個布爾值,指示是否啟用 SocketOptions#SO_KEEPALIVE。
Throws:
Throw名稱 | Throw描述 |
---|---|
SocketException | 如果底層協(xié)議有錯誤,例如 TCP 錯誤。 |
public void setTrafficClass(int tc) throws SocketException
為從此 Socket 發(fā)送的數(shù)據(jù)包設置 IP 標頭中的流量類別或服務類型八位字節(jié)。由于底層網(wǎng)絡實現(xiàn)可能會忽略此值,因此應用程序應將其視為提示。
tc 必須在 0 <= tc <= 255 范圍內,否則將拋出 IllegalArgumentException。
筆記:
對于 Internet 協(xié)議 v4,該值由一個整數(shù)組成,其中最低有效 8 位表示套接字發(fā)送的 IP 數(shù)據(jù)包中 TOS 八位字節(jié)的值。 RFC 1349 定義 TOS 值如下:
最后一個低位總是被忽略,因為它對應于 MBZ(必須為零)位。
設置優(yōu)先級字段中的位可能會導致 SocketException 指示不允許該操作。
正如 RFC 1122 第 4.2.4.2 節(jié)所示,兼容的 TCP 實現(xiàn)應該但不是必須讓應用程序在連接的生命周期內更改 TOS 字段。所以在TCP連接建立后是否可以改變type-of-service字段取決于底層平臺的實現(xiàn)。應用程序不應假設他們可以在連接后更改 TOS 字段。
對于 Internet 協(xié)議 v6,tc 是放置在 IP 標頭的 sin6_flowinfo 字段中的值。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
tc | 位集的 int 值。 |
Throws:
Throw名稱 | Throw描述 |
---|---|
SocketException | 如果設置流量類別或服務類型時出錯 |
public int getTrafficClass() throws SocketException
獲取從此 Socket 發(fā)送的數(shù)據(jù)包的 IP 標頭中的流量類別或服務類型
由于底層網(wǎng)絡實現(xiàn)可能會忽略使用 setTrafficClass(int) 設置的流量類或服務類型,因此此方法可能返回與之前在此 Socket 上使用 setTrafficClass(int) 方法設置的值不同的值。
返回:
已設置的流量類別或服務類型
Throws:
Throw名稱 | Throw描述 |
---|---|
SocketException | 如果獲取流量類別或服務類型值時出錯。 |
public void setReuseAddress(boolean on) throws SocketException
啟用/禁用 SocketOptions#SO_REUSEADDR 套接字選項。
當 TCP 連接關閉時,連接可能會在連接關閉后的一段時間內保持超時狀態(tài)(通常稱為 TIME_WAIT 狀態(tài)或 2MSL 等待狀態(tài))。 對于使用眾所周知的套接字地址或端口的應用程序,如果存在涉及套接字地址或端口的處于超時狀態(tài)的連接,則可能無法將套接字綁定到所需的 SocketAddress。
在使用 bind(java.net.SocketAddress) 綁定套接字之前啟用 SocketOptions#SO_REUSEADDR 允許綁定套接字,即使先前的連接處于超時狀態(tài)。
創(chuàng)建 Socket 時,SocketOptions#SO_REUSEADDR 的初始設置被禁用。
未定義套接字綁定后啟用或禁用 SocketOptions#SO_REUSEADDR 時的行為(參見 isBound())。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
on | 是否啟用或禁用套接字選項 |
Throws:
Throw名稱 | Throw描述 |
---|---|
SocketException | 如果啟用或禁用 SocketOptions#SO_REUSEADDR 套接字選項發(fā)生錯誤,或者套接字已關閉。 |
public boolean getReuseAddress() throws SocketException
測試 SocketOptions#SO_REUSEADDR 是否啟用。
返回:
一個布爾值,指示是否啟用 SocketOptions#SO_REUSEADDR。
Throws:
Throw名稱 | Throw描述 |
---|---|
SocketException | 如果底層協(xié)議有錯誤,例如 TCP 錯誤。 |
public void close() throws IOException
關閉此套接字。
當前在此套接字上的 I/O 操作中阻塞的任何線程都將拋出 SocketException。
一旦套接字關閉,它就不能用于進一步的網(wǎng)絡使用(即不能重新連接或重新連接)。 需要創(chuàng)建一個新的套接字。
關閉此套接字也會關閉套接字的 InputStream 和 OutputStream。
如果此套接字具有關聯(lián)的通道,則該通道也將關閉。
指定者:
在接口 AutoCloseable 中關閉
指定者:
在接口Closeable中關閉
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果關閉此套接字時發(fā)生 I/O 錯誤。 |
public void shutdownInput() throws IOException
將此套接字的輸入流放在“流的末尾”。 任何發(fā)送到套接字輸入流端的數(shù)據(jù)都會被確認,然后被靜默丟棄。
如果在套接字上調用此方法后從套接字輸入流中讀取,則流的可用方法將返回 0,其讀取方法將返回 -1(流結束)。
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果關閉此套接字時發(fā)生 I/O 錯誤。 |
public void shutdownOutput() throws IOException
禁用此套接字的輸出流。 對于 TCP 套接字,任何先前寫入的數(shù)據(jù)都將按照 TCP 的正常連接終止順序發(fā)送。 如果在套接字上調用 shutdownOutput() 后寫入套接字輸出流,則該流將引發(fā) IOException。
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果關閉此套接字時發(fā)生 I/O 錯誤。 |
public String toString()
將此套接字轉換為字符串。
覆蓋:
類 Object 中的 toString
返回:
此套接字的字符串表示形式。
public boolean isConnected()
返回套接字的連接狀態(tài)。
注意:關閉套接字不會清除其連接狀態(tài),這意味著如果在關閉之前成功連接,則此方法將為已關閉的套接字返回 true。
返回:
如果套接字成功連接到服務器,則為 true
public boolean isBound()
返回套接字的綁定狀態(tài)。
注意:關閉套接字不會清除其綁定狀態(tài),這意味著如果在關閉之前成功綁定,則此方法將為已關閉的套接字返回 true。
返回:
如果套接字成功綁定到地址,則為 true
public boolean isClosed()
返回套接字的關閉狀態(tài)。
返回:
如果套接字已關閉,則為 true
public boolean isInputShutdown()
返回套接字連接的讀半部分是否關閉。
返回:
如果套接字的輸入已關閉,則為 true
public boolean isOutputShutdown()
返回套接字連接的寫半部分是否關閉。
返回:
如果套接字的輸出已關閉,則為 true
public static void setSocketImplFactory(SocketImplFactory fac) throws IOException
為應用程序設置客戶端套接字實現(xiàn)工廠。 工廠只能指定一次。
當應用程序創(chuàng)建新的客戶端套接字時,會調用套接字實現(xiàn)工廠的 createSocketImpl 方法來創(chuàng)建實際的套接字實現(xiàn)。
除非已經設置了工廠,否則將 null 傳遞給方法是無操作的。
如果有安全管理器,該方法首先調用安全管理器的 checkSetFactory 方法,確保操作被允許。 這可能會導致 SecurityException。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
fac | 想要的工廠。 |
Throws:
Throw名稱 | Throw描述 |
---|---|
IOException | 如果設置套接字工廠時發(fā)生 I/O 錯誤。 |
SocketException | 如果工廠已經定義。 |
SecurityException | 如果存在安全管理器并且其 checkSetFactory 方法不允許該操作。 |
public void setPerformancePreferences(int connectionTime, int latency, int bandwidth)
設置此套接字的性能首選項。
套接字默認使用 TCP/IP 協(xié)議。一些實現(xiàn)可能會提供與 TCP/IP 具有不同性能特征的替代協(xié)議。此方法允許應用程序表達自己的偏好,即當實現(xiàn)從可用協(xié)議中進行選擇時應如何進行這些權衡。
性能偏好由三個整數(shù)描述,其值表示短連接時間、低延遲和高帶寬的相對重要性。整數(shù)的絕對值無關緊要;為了選擇一個協(xié)議,這些值被簡單地比較,較大的值表示更強的偏好。負值表示比正值低的優(yōu)先級。例如,如果應用程序更喜歡短連接時間而不是低延遲和高帶寬,那么它可以使用值 (1, 0, 0) 調用此方法。如果應用程序更喜歡高帶寬而不是低延遲,以及低延遲而不是短連接時間,那么它可以使用值 (0, 1, 2) 調用此方法。
在此套接字連接后調用此方法將無效。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
connectionTime | 表示短連接時間的相對重要性的 int |
latency | 一個表示低延遲相對重要性的 int |
bandwidth | 表示高帶寬相對重要性的 int |
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: