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