java socket API


從以下版本開始:
JDK1.0
另請參見:
setSocketImplFactory(java.net.SocketImplFactory), SocketImpl, SocketChannel

 

構造方法摘要
  Socket() 
          通過系統默認類型的 SocketImpl 創建未連接套接字
  Socket(InetAddress address, int port) 
          創建一個流套接字並將其連接到指定 IP 地址的指定端口號。
  Socket(InetAddress host, int port, boolean stream) 
          已過時。 Use DatagramSocket instead for UDP transport.
  Socket(InetAddress address, int port, InetAddress localAddr, int localPort) 
          創建一個套接字並將其連接到指定遠程地址上的指定遠程端口。
  Socket(Proxy proxy) 
          創建一個未連接的套接字並指定代理類型(如果有),該代理不管其他設置如何都應被使用。
protected Socket(SocketImpl impl) 
          使用用戶指定的 SocketImpl 創建一個未連接 Socket。
  Socket(String host, int port) 
          創建一個流套接字並將其連接到指定主機上的指定端口號。
  Socket(String host, int port, boolean stream) 
          已過時。 使用 DatagramSocket 取代 UDP 傳輸。
  Socket(String host, int port, InetAddress localAddr, int localPort) 
          創建一個套接字並將其連接到指定遠程主機上的指定遠程端口。

 

方法摘要
 void bind(SocketAddress bindpoint) 
          將套接字綁定到本地地址。
 void close() 
          關閉此套接字。
 void connect(SocketAddress endpoint) 
          將此套接字連接到服務器。
 void connect(SocketAddress endpoint, int timeout) 
          將此套接字連接到服務器,並指定一個超時值。
 SocketChannel getChannel() 
          返回與此數據報套接字關聯的唯一 SocketChannel 對象(如果有)。
 InetAddress getInetAddress() 
          返回套接字連接的地址。
 InputStream getInputStream() 
          返回此套接字的輸入流。
 boolean getKeepAlive() 
          測試是否啟用 SO_KEEPALIVE。
 InetAddress getLocalAddress() 
          獲取套接字綁定的本地地址。
 int getLocalPort() 
          返回此套接字綁定到的本地端口。
 SocketAddress getLocalSocketAddress() 
          返回此套接字綁定的端點的地址,如果尚未綁定則返回 null
 boolean getOOBInline() 
          測試是否啟用 OOBINLINE。
 OutputStream getOutputStream() 
          返回此套接字的輸出流。
 int getPort() 
          返回此套接字連接到的遠程端口。
 int getReceiveBufferSize() 
          獲取此 Socket 的 SO_RCVBUF 選項的值,該值是平台在 Socket 上輸入時使用的緩沖區大小。
 SocketAddress getRemoteSocketAddress() 
          返回此套接字連接的端點的地址,如果未連接則返回 null
 boolean getReuseAddress() 
          測試是否啟用 SO_REUSEADDR。
 int getSendBufferSize() 
          獲取此 Socket 的 SO_SNDBUF 選項的值,該值是平台在 Socket 上輸出時使用的緩沖區大小。
 int getSoLinger() 
          返回 SO_LINGER 的設置。
 int getSoTimeout() 
          返回 SO_TIMEOUT 的設置。
 boolean getTcpNoDelay() 
          測試是否啟用 TCP_NODELAY。
 int getTrafficClass() 
          為從此 Socket 上發送的包獲取 IP 頭中的流量類別或服務類型。
 boolean isBound() 
          返回套接字的綁定狀態。
 boolean isClosed() 
          返回套接字的關閉狀態。
 boolean isConnected() 
          返回套接字的連接狀態。
 boolean isInputShutdown() 
          返回是否關閉套接字連接的半讀狀態 (read-half)。
 boolean isOutputShutdown() 
          返回是否關閉套接字連接的半寫狀態 (write-half)。
 void sendUrgentData(int data) 
          在套接字上發送一個緊急數據字節。
 void setKeepAlive(boolean on) 
          啟用/禁用 SO_KEEPALIVE。
 void setOOBInline(boolean on) 
          啟用/禁用 OOBINLINE(TCP 緊急數據的接收者) 默認情況下,此選項是禁用的,即在套接字上接收的 TCP 緊急數據被靜默丟棄。
 void setPerformancePreferences(int connectionTime, int latency, int bandwidth) 
          設置此套接字的性能偏好。
 void setReceiveBufferSize(int size) 
          將此 Socket 的 SO_RCVBUF 選項設置為指定的值。
 void setReuseAddress(boolean on) 
          啟用/禁用 SO_REUSEADDR 套接字選項。
 void setSendBufferSize(int size) 
          將此 Socket 的 SO_SNDBUF 選項設置為指定的值。
static void setSocketImplFactory(SocketImplFactory fac) 
          為應用程序設置客戶端套接字實現工廠。
 void setSoLinger(boolean on, int linger) 
          啟用/禁用具有指定逗留時間(以秒為單位)的 SO_LINGER。
 void setSoTimeout(int timeout) 
          啟用/禁用帶有指定超時值的 SO_TIMEOUT,以毫秒為單位。
 void setTcpNoDelay(boolean on) 
          啟用/禁用 TCP_NODELAY(啟用/禁用 Nagle 算法)。
 void setTrafficClass(int tc) 
          為從此 Socket 上發送的包在 IP 頭中設置流量類別 (traffic class) 或服務類型八位組 (type-of-service octet)。
 void shutdownInput() 
          此套接字的輸入流置於“流的末尾”。
 void shutdownOutput() 
          禁用此套接字的輸出流。
 String toString() 
          將此套接字轉換為 String

 

從類 java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

 

 

構造方法詳細信息

Socket

public Socket()
通過系統默認類型的 SocketImpl 創建未連接套接字

 

從以下版本開始:
JDK1.1

Socket

public Socket(Proxy proxy)
創建一個未連接的套接字並指定代理類型(如果有),該代理不管其他設置如何都應被使用。

如果有安全管理器,則使用代理主機地址和端口號作為參數調用其 checkConnect 方法。這可能會導致 SecurityException 異常。

示例:

  • Socket s = new Socket(Proxy.NO_PROXY); 將創建忽略任何其他代理配置的普通套接字。
  • Socket s = new Socket(new Proxy(Proxy.Type.SOCKS, new InetSocketAddress("socks.mydom.com", 1080))); 將創建通過指定的 SOCKS 代理服務器進行連接的套接字。

 

參數:
proxy - 指定應使用的代理種類的 Proxy 對象。
拋出:
IllegalArgumentException - 如果代理的類型無效或者為  null
SecurityException - 如果存在安全管理器,但拒絕連接到代理的權限。
從以下版本開始:
1.5
另請參見:
ProxySelector, Proxy

Socket

protected Socket(SocketImpl impl)
          throws SocketException
使用用戶指定的 SocketImpl 創建一個未連接 Socket。

 

 

參數:
impl - 子類希望在 Socket 上使用的  SocketImpl 的實例。
拋出:
SocketException - 如果底層協議出現錯誤,例如 TCP 錯誤。
從以下版本開始:
JDK1.1

Socket

public Socket(String host,
              int port)
       throws UnknownHostException,
              IOException
創建一個流套接字並將其連接到指定主機上的指定端口號。

如果指定的主機為 null,則等效於指定與 InetAddress.getByName(null) 相同的地址。換句話話,等效於指定回送接口的地址。

如果應用程序已指定服務器套接字工廠,則調用該工廠的 createSocketImpl 方法來創建實際套接字實現。否則創建“普通”套接字。

如果有安全管理器,則使用主機地址和 port 作為參數調用其 checkConnect 方法。這可能會導致 SecurityException 異常。

 

參數:
host - 主機名,或者為  null,表示回送地址。
port - 端口號。
拋出:
UnknownHostException - 如果無法確定主機的 IP 地址。
IOException - 如果創建套接字時發生 I/O 錯誤。
SecurityException - 如果安全管理器存在並且其  checkConnect 方法不允許進行該操作。
另請參見:
setSocketImplFactory(java.net.SocketImplFactory), SocketImpl, SocketImplFactory.createSocketImpl(), SecurityManager.checkConnect(java.lang.String, int)

Socket

public Socket(InetAddress address,
              int port)
       throws IOException
創建一個流套接字並將其連接到指定 IP 地址的指定端口號。

如果應用程序已指定套接字工廠,則調用該工廠的 createSocketImpl 方法來創建實際套接字實現。否則創建“普通”套接字。

如果有安全管理器,則使用主機地址和 port 作為參數調用其 checkConnect 方法。這可能會導致 SecurityException 異常。

 

參數:
address - IP 地址。
port - 端口號。
拋出:
IOException - 如果創建套接字時發生 I/O 錯誤。
SecurityException - 如果安全管理器存在並且其  checkConnect 方法不允許進行該操作。
另請參見:
setSocketImplFactory(java.net.SocketImplFactory), SocketImpl, SocketImplFactory.createSocketImpl(), SecurityManager.checkConnect(java.lang.String, int)

Socket

public Socket(String host,
              int port,
              InetAddress localAddr,
              int localPort)
       throws IOException
創建一個套接字並將其連接到指定遠程主機上的指定遠程端口。socket 會通過調用 bind() 函數來綁定提供的本地地址及端口。

如果指定的主機為 null,則等效於指定與 InetAddress.getByName(null) 相同的地址。換句話話,等效於指定回送接口的地址。

如果有安全管理器,則使用主機地址和 port 作為參數調用其 checkConnect 方法。這可能會導致 SecurityException 異常。

 

參數:
host - 遠程主機名,或者為  null,表示回送地址。
port - 遠程端口
localAddr - 要將套接字綁定到的本地地址
localPort - 要將套接字綁定到的本地端口
拋出:
IOException - 如果在創建套接字時發生 I/O 錯誤。
SecurityException - 如果安全管理器存在並且其  checkConnect 方法不允許進行該操作。
從以下版本開始:
JDK1.1
另請參見:
SecurityManager.checkConnect(java.lang.String, int)

Socket

public Socket(InetAddress address,
              int port,
              InetAddress localAddr,
              int localPort)
       throws IOException
創建一個套接字並將其連接到指定遠程地址上的指定遠程端口。socket 會通過調用 bind() 函數來綁定提供的本地地址及端口。

如果有安全管理器,則使用主機地址和 port 作為參數調用其 checkConnect 方法。這可能會導致 SecurityException 異常。

 

參數:
address - 遠程地址
port - 遠程端口
localAddr - 要將套接字綁定到的本地地址
localPort - 要將套接字綁定到的本地端口
拋出:
IOException - 如果在創建套接字時發生 I/O 錯誤。
SecurityException - 如果安全管理器存在並且其  checkConnect 方法不允許進行該操作。
從以下版本開始:
JDK1.1
另請參見:
SecurityManager.checkConnect(java.lang.String, int)

Socket

@Deprecated
public Socket(String host,
                         int port,
                         boolean stream)
       throws IOException
已過時。  使用 DatagramSocket 取代 UDP 傳輸。

 

創建一個流套接字並將其連接到指定主機上的指定端口號。

如果指定的主機為 null,則等效於指定與 InetAddress.getByName(null) 相同的地址。換句話話,等效於指定回送接口的地址。

如果流參數為 true,則創建流套接字。如果流參數為 false,則創建數據報套接字。

如果應用程序已指定服務器套接字工廠,則調用該工廠的 createSocketImpl 方法來創建實際套接字實現。否則創建“普通”套接字。

如果有安全管理器,則使用主機地址和 port 作為參數調用其 checkConnect 方法。這可能會導致 SecurityException 異常。

如果使用 UDP 套接字,則不應用與 TCP/IP 相關的套接字選項。

 

參數:
host - 主機名,或者為  null,表示回送地址。
port - 端口號。
stream - 指示此為流套接字還是數據報套接字的  boolean
拋出:
IOException - 如果創建套接字時發生 I/O 錯誤。
SecurityException - 如果安全管理器存在並且其  checkConnect 方法不允許進行該操作。
另請參見:
setSocketImplFactory(java.net.SocketImplFactory), SocketImpl, SocketImplFactory.createSocketImpl(), SecurityManager.checkConnect(java.lang.String, int)

Socket

@Deprecated
public Socket(InetAddress host,
                         int port,
                         boolean stream)
       throws IOException
已過時。  Use DatagramSocket instead for UDP transport.

 

創建一個套接字並將其連接到指定 IP 地址的指定端口號。

如果流參數為 true,則創建流套接字。如果流參數為 false,則創建數據報套接字。

如果應用程序已指定服務器套接字工廠,則調用該工廠的 createSocketImpl 方法來創建實際套接字實現。否則創建“普通”套接字。

如果有安全管理器,則使用 host.getHostAddress() 和 port 作為參數調用其 checkConnect 方法。這可能會導致 SecurityException 異常。

如果使用 UDP 套接字,則不應用與 TCP/IP 相關的套接字選項。

 

參數:
host - IP 地址。
port - 端口號。
stream - 如果為  true,則創建流套接字;否則創建數據報套接字。
拋出:
IOException - 如果創建套接字時發生 I/O 錯誤。
SecurityException - 如果安全管理器存在並且其  checkConnect 方法不允許進行該操作。
另請參見:
setSocketImplFactory(java.net.SocketImplFactory), SocketImpl, SocketImplFactory.createSocketImpl(), SecurityManager.checkConnect(java.lang.String, int)
方法詳細信息

connect

public void connect(SocketAddress endpoint)
             throws IOException
將此套接字連接到服務器。

 

參數:
endpoint -  SocketAddress
拋出:
IOException - 如果在連接期間發生錯誤
IllegalBlockingModeException - 如果此套接字具有關聯的通道並且該通道處於非阻塞模式
IllegalArgumentException - 如果端點為 null 或者此套接字不支持 SocketAddress 子類
從以下版本開始:
1.4

connect

public void connect(SocketAddress endpoint,
                    int timeout)
             throws IOException
將此套接字連接到服務器,並指定一個超時值。超時值零被解釋為無限超時。在建立連接或者發生錯誤之前,連接一直處於阻塞狀態。

 

參數:
endpoint -  SocketAddress
timeout - 要使用的超時值(以毫秒為單位)。
拋出:
IOException - 如果在連接期間發生錯誤
SocketTimeoutException - 如果在連接之前超時期滿
IllegalBlockingModeException - 如果此套接字具有關聯的通道並且該通道處於非阻塞模式
IllegalArgumentException - 如果端點為 null 或者此套接字不支持 SocketAddress 子類
從以下版本開始:
1.4

bind

public void bind(SocketAddress bindpoint)
          throws IOException
將套接字綁定到本地地址。

如果地址為 null,則系統將挑選一個臨時端口和一個有效本地地址來綁定套接字。

 

參數:
bindpoint - 要綁定到的  SocketAddress
拋出:
IOException - 如果綁定操作失敗或者已經綁定了套接字。
IllegalArgumentException - 如果 bindpoint 是不受此套接字支持的 SocketAddress 子類。
從以下版本開始:
1.4
另請參見:
isBound()

getInetAddress

public InetAddress getInetAddress()
返回套接字連接的地址。

 

返回:
此套接字連接到的遠程 IP 地址;如果套接字是未連接的,則返回  null

getLocalAddress

public InetAddress getLocalAddress()
獲取套接字綁定的本地地址。

 

返回:
將套接字綁定到的本地地址;如果尚未綁定套接字,則返回  InetAddress.anyLocalAddress()
從以下版本開始:
JDK1.1

getPort

public int getPort()
返回此套接字連接到的遠程端口。

 

返回:
此套接字連接到的遠程端口號;如果尚未連接套接字,則返回 0。

getLocalPort

public int getLocalPort()
返回此套接字綁定到的本地端口。

 

返回:
此套接字綁定到的本地端口號;如果尚未綁定套接字,則返回 -1。

getRemoteSocketAddress

public SocketAddress getRemoteSocketAddress()
返回此套接字連接的端點的地址,如果未連接則返回  null

 

返回:
表示此套接字遠程端點的  SocketAddress,如果尚未連接則返回  null
從以下版本開始:
1.4
另請參見:
getInetAddress(), getPort(), connect(SocketAddress, int), connect(SocketAddress)

getLocalSocketAddress

public SocketAddress getLocalSocketAddress()
返回此套接字綁定的端點的地址,如果尚未綁定則返回  null

 

返回:
表示此套接字的本地端點的  SocketAddress,如果尚未綁定則返回  null
從以下版本開始:
1.4
另請參見:
getLocalAddress(), getLocalPort(), bind(SocketAddress)

getChannel

public SocketChannel getChannel()
返回與此數據報套接字關聯的唯一 SocketChannel 對象(如果有)。

當且僅當通過 SocketChannel.open 或 ServerSocketChannel.accept 方法創建了通道本身時,套接字才具有一個通道。

 

返回:
與此套接字關聯的套接字通道,如果沒有為通道創建套接字,則返回  null
從以下版本開始:
1.4

getInputStream

public InputStream getInputStream()
                           throws IOException
返回此套接字的輸入流。

如果此套接字具有關聯的通道,則所得的輸入流會將其所有操作委托給通道。如果通道為非阻塞模式,則輸入流的 read 操作將拋出 IllegalBlockingModeException。

在非正常條件下,底層連接可能被遠程主機或網絡軟件中斷(例如,TCP 連接情況下的連接重置)。當網絡軟件檢測到中斷的連接時,將對返回的輸入流應用以下操作:

  • 網絡軟件可能丟棄經過套接字緩沖的字節。網絡軟件沒有丟棄的字節可以使用 read 讀取。

  • 如果沒有任何字節在套接字上緩沖,或者 read 已經消耗了所有緩沖的字節,則對 read 的所有后續調用都將拋出 IOException。

  • 如果沒有任何字節在套接字上緩沖,並且沒有使用 close 關閉套接字,則 available 將返回 0

關閉返回的 InputStream 將關閉關聯套接字。

 

返回:
從此套接字讀取字節的輸入流。
拋出:
IOException - 如果在創建輸入流時發生 I/O 錯誤、沒有關閉套接字、沒有連接套接字或者使用 shutdownInput() 關閉了套接字輸入

getOutputStream

public OutputStream getOutputStream()
                             throws IOException
返回此套接字的輸出流。

如果此套接字具有關聯的通道,則得到的輸出流會將其所有操作委托給通道。如果通道為非阻塞模式,則輸出流的 write 操作將拋出 IllegalBlockingModeException。

關閉返回的 OutputStream 將關閉關聯套接字。

 

返回:
將字節寫入此套接字的輸出流。
拋出:
IOException - 如果創建輸出流時發生 I/O 錯誤或者沒有連接套接字。

setTcpNoDelay

public void setTcpNoDelay(boolean on)
                   throws SocketException
啟用/禁用 TCP_NODELAY(啟用/禁用 Nagle 算法)。

 

參數:
on - 為  true 表示啟用 TCP_NODELAY;為  false 表示禁用。
拋出:
SocketException - 如果底層協議出現錯誤,例如 TCP 錯誤。
從以下版本開始:
JDK1.1
另請參見:
getTcpNoDelay()

getTcpNoDelay

public boolean getTcpNoDelay()
                      throws SocketException
測試是否啟用 TCP_NODELAY。

 

返回:
指示是否啟用 TCP_NODELAY 的  boolean 值。
拋出:
SocketException - 如果底層協議出現錯誤,例如 TCP 錯誤。
從以下版本開始:
JDK1.1
另請參見:
setTcpNoDelay(boolean)

setSoLinger

public void setSoLinger(boolean on,
                        int linger)
                 throws SocketException
啟用/禁用具有指定逗留時間(以秒為單位)的 SO_LINGER。最大超時值是特定於平台的。 該設置僅影響套接字關閉。

 

參數:
on - 是否逗留。
linger - 逗留時間,如果 on 為 true。
拋出:
SocketException - 如果底層協議出現錯誤,例如 TCP 錯誤。
IllegalArgumentException - 如果逗留值為負。
從以下版本開始:
JDK1.1
另請參見:
getSoLinger()

getSoLinger

public int getSoLinger()
                throws SocketException
返回 SO_LINGER 的設置。返回 -1 意味着禁用該選項。 該設置僅影響套接字關閉。

 

返回:
SO_LINGER 的設置。
拋出:
SocketException - 如果底層協議出現錯誤,例如 TCP 錯誤。
從以下版本開始:
JDK1.1
另請參見:
setSoLinger(boolean, int)

sendUrgentData

public void sendUrgentData(int data)
                    throws IOException
在套接字上發送一個緊急數據字節。要發送的字節是數據參數的八個最低位。緊急字節在對套接字 OutputStream 的所有預先寫入之后但在任何以后寫入之前發送。

 

參數:
data - 要發送的數據字節
拋出:
IOException - 如果發送數據時發生錯誤。
從以下版本開始:
1.4

setOOBInline

public void setOOBInline(boolean on)
                  throws SocketException
啟用/禁用 OOBINLINE(TCP 緊急數據的接收者) 默認情況下,此選項是禁用的,即在套接字上接收的 TCP 緊急數據被靜默丟棄。如果用戶希望接收到緊急數據,則必須啟用此選項。啟用時,可以將緊急數據內嵌在普通數據中接收

注意,僅為處理傳入緊急數據提供有限支持。特別要指出的是,不提供傳入緊急數據的任何通知並且不存在區分普通數據和緊急數據的功能(除非更高級別的協議提供)。

 

參數:
on -  true 表示啟用 OOBINLINE; false 表示禁用。
拋出:
SocketException - 如果底層協議出現錯誤,例如 TCP 錯誤。
從以下版本開始:
1.4
另請參見:
getOOBInline()

getOOBInline

public boolean getOOBInline()
                     throws SocketException
測試是否啟用 OOBINLINE。

 

返回:
指示是否啟用 OOBINLINE 的  boolean 值。
拋出:
SocketException - 如果底層協議出現錯誤,例如 TCP 錯誤。
從以下版本開始:
1.4
另請參見:
setOOBInline(boolean)

setSoTimeout

public void setSoTimeout(int timeout)
                  throws SocketException
啟用/禁用帶有指定超時值的 SO_TIMEOUT,以毫秒為單位。將此選項設為非零的超時值時,在與此 Socket 關聯的 InputStream 上調用 read() 將只阻塞此時間長度。如果超過超時值,將引發  java.net.SocketTimeoutException,雖然 Socket 仍舊有效。選項 必須在進入阻塞操作前被啟用才能生效。超時值必須是 > 0 的數。超時值為 0 被解釋為無窮大超時值。

 

參數:
timeout - 指定的以毫秒為單位的超時值。
拋出:
SocketException - 如果底層協議出現錯誤,例如 TCP 錯誤。
從以下版本開始:
JDK 1.1
另請參見:
getSoTimeout()

getSoTimeout

public int getSoTimeout()
                 throws SocketException
返回 SO_TIMEOUT 的設置。返回 0 意味着禁用了選項(即無窮大的超時值)。

 

返回:
SO_TIMEOUT 的設置。
拋出:
SocketException - 如果底層協議出現錯誤,例如 TCP 錯誤。
從以下版本開始:
JDK1.1
另請參見:
setSoTimeout(int)

setSendBufferSize

public void setSendBufferSize(int size)
                       throws SocketException
將此  Socket 的 SO_SNDBUF 選項設置為指定的值。平台的網絡連接代碼將 SO_SNDBUF 選項用作設置底層網絡 I/O 緩存的大小的提示。

由於 SO_SNDBUF 是一種提示,想要驗證緩沖區設置大小的應用程序應該調用 getSendBufferSize()。

 

參數:
size - 將設置的發送緩沖區大小。此值必須大於 0。
拋出:
SocketException - 如果底層協議出現錯誤,例如 TCP 錯誤。
IllegalArgumentException - 如果值為 0 或負。
從以下版本開始:
1.2
另請參見:
getSendBufferSize()

getSendBufferSize

public int getSendBufferSize()
                      throws SocketException
獲取此  Socket 的 SO_SNDBUF 選項的值,該值是平台在  Socket 上輸出時使用的緩沖區大小。

 

返回:
此  Socket 的 SO_SNDBUF 選項的值。
拋出:
SocketException - 如果底層協議出現錯誤,例如 TCP 錯誤。
從以下版本開始:
1.2
另請參見:
setSendBufferSize(int)

setReceiveBufferSize

public void setReceiveBufferSize(int size)
                          throws SocketException
將此  Socket 的 SO_RCVBUF 選項設置為指定的值。平台的網絡連接代碼將 SO_RCVBUF 選項用作設置底層網絡 I/O 緩存的大小的提示。

增大接收緩存大小可以增大大量連接的網絡 I/O 的性能,而減小它有助於減少傳入數據的 backlog。

由於 SO_RCVBUF 是一種提示,想要驗證緩沖區設置大小的應用程序應該調用 getReceiveBufferSize()。

SO_RCVBUF 的值還用於設置公布到遠程同位體的 TCP 接收窗口。一般情況下,當連接套接字時,可以在任意時間更改窗口大小。然而,如果需要的接收窗口大於 64K,則必須在將套接字連接到遠程同位體之前請求。下面是需要知道的兩種情況:

 

  1. 對於從 ServerSocket 接受的套接字,必須在將 ServerSocket 綁定到本地地址前通過調用 ServerSocket.setReceiveBufferSize(int) 執行此操作。

     

  2. 對於客戶端套接字,則必須在將套接字連接到其遠程同位體前調用 setReceiveBufferSize()。

     

 

參數:
size - 要設置的接收緩沖區大小。此值必須大於 0。
拋出:
IllegalArgumentException - 如果值為 0 或負。
SocketException - 如果底層協議出現錯誤,例如 TCP 錯誤。
從以下版本開始:
1.2
另請參見:
getReceiveBufferSize(), ServerSocket.setReceiveBufferSize(int)

getReceiveBufferSize

public int getReceiveBufferSize()
                         throws SocketException
獲取此  Socket 的 SO_RCVBUF 選項的值,該值是平台在  Socket 上輸入時使用的緩沖區大小。

 

返回:
此  Socket 的 SO_RCVBUF 選項的值。
拋出:
SocketException - 如果底層協議出現錯誤,例如 TCP 錯誤。
從以下版本開始:
1.2
另請參見:
setReceiveBufferSize(int)

setKeepAlive

public void setKeepAlive(boolean on)
                  throws SocketException
啟用/禁用 SO_KEEPALIVE。

 

參數:
on - 是否開啟保持活動狀態的套接字。
拋出:
SocketException - 如果底層協議出現錯誤,例如 TCP 錯誤。
從以下版本開始:
1.3
另請參見:
getKeepAlive()

getKeepAlive

public boolean getKeepAlive()
                     throws SocketException
測試是否啟用 SO_KEEPALIVE。

 

返回:
指示是否啟用 SO_KEEPALIVE 的  boolean 值。
拋出:
SocketException - 如果底層協議出現錯誤,例如 TCP 錯誤。
從以下版本開始:
1.3
另請參見:
setKeepAlive(boolean)

setTrafficClass

public void setTrafficClass(int tc)
                     throws SocketException
為從此 Socket 上發送的包在 IP 頭中設置流量類別 (traffic class) 或服務類型八位組 (type-of-service octet)。由於底層網絡實現可能忽略此值,應用程序應該將其視為一種提示。

tc 的值必須 0 <= tc <= 255 范圍內,否則將拋出 IllegalArgumentException。

注:

對於 Internet Protocol v4 該值由包含優先級和 TOS 字段的八位組組成,這在 RFC 1349 中有詳細敘述。TOS 字段是由以下逐位或所得值創建的位集:

 

  • IPTOS_LOWCOST (0x02)
  • IPTOS_RELIABILITY (0x04)
  • IPTOS_THROUGHPUT (0x08)
  • IPTOS_LOWDELAY (0x10)
末尾的最低位常常被忽略,因為該位對應於 MBZ(必須為 0)位。

設置優先級字段中的位可能導致 SocketException,指示不允許該操作。

根據 RFC 1122 第 4.2.4.2 節中的指示,兼容的 TCP 實現應該(但不是必須)讓應用程序在連接的生命周期中改變 TOS 字段。因此,type-of-service(服務類型)字段在已建立 TCP 連接之后能否更改取決於底層平台的實現。應用程序不應假定它們在連接之后能夠改變 TOS 字段。

對於 Internet Protocol v6 tc 是將被放置到 IP 頭部的 sin6_flowinfo 字段中的值。

 

參數:
tc - 此位集的  int 值。
拋出:
SocketException - 如果設置流量類別或服務類型時出現錯誤
從以下版本開始:
1.4
另請參見:
getTrafficClass()

getTrafficClass

public int getTrafficClass()
                    throws SocketException
為從此 Socket 上發送的包獲取 IP 頭中的流量類別或服務類型。

由於底層網絡實現可能忽略使用 setTrafficClass(int) 設置的流量類別或服務類型,因而此方法可能返回一個不同於以前用 setTrafficClass(int) 在此 Socket 上設置的值。

 

返回:
已經設置的流量類別或服務類型
拋出:
SocketException - 如果獲取流量類別或服務類型值時出現錯誤。
從以下版本開始:
1.4
另請參見:
setTrafficClass(int)

setReuseAddress

public void setReuseAddress(boolean on)
                     throws SocketException
啟用/禁用 SO_REUSEADDR 套接字選項。

關閉 TCP 連接時,該連接可能在關閉后的一段時間內保持超時狀態(通常稱為 TIME_WAIT 狀態或 2MSL 等待狀態)。對於使用已知套接字地址或端口的應用程序而言,如果存在處於超時狀態的連接(包括地址和端口),可能不能將套接字綁定到所需的 SocketAddress 上。

使用 bind(SocketAddress) 綁定套接字前啟用 SO_REUSEADDR 允許在上一個連接處於超時狀態時綁定套接字。

當創建 Socket 時,禁用 SO_REUSEADDR 的初始設置。

在綁定套接字(請參閱 isBound())后啟用或禁用 SO_REUSEADDR 時的行為是不確定的。

 

參數:
on - 是否啟用 SO_REUSEADDR 套接字選項
拋出:
SocketException - 如果啟用或禁用  SO_RESUEADDR 套接字選項時發生錯誤,或者關閉了套接字。
從以下版本開始:
1.4
另請參見:
getReuseAddress(), bind(SocketAddress), isClosed(), isBound()

getReuseAddress

public boolean getReuseAddress()
                        throws SocketException
測試是否啟用 SO_REUSEADDR。

 

返回:
指示是否啟用 SO_REUSEADDR 的  boolean 值。
拋出:
SocketException - 如果底層協議出現錯誤,例如 TCP 錯誤。
從以下版本開始:
1.4
另請參見:
setReuseAddress(boolean)

close

public void close()
           throws IOException
關閉此套接字。

所有當前阻塞於此套接字上的 I/O 操作中的線程都將拋出 SocketException。

套接字被關閉后,便不可在以后的網絡連接中使用(即無法重新連接或重新綁定)。需要創建新的套接字。

關閉此套接字也將會關閉該套接字的 InputStream 和 OutputStream。

如果此套接字有一個與之關聯的通道,則關閉該通道。

 

拋出:
IOException - 如果關閉此套接字時發生 I/O 錯誤。
另請參見:
isClosed()

shutdownInput

public void shutdownInput()
                   throws IOException
此套接字的輸入流置於“流的末尾”。發送到套接字的輸入流端的任何數據都將被確認然后被靜默丟棄。

如果在套接字上調用 shutdownInput() 后從套接字輸入流讀取內容,則流將返回 EOF(文件結束符)。

 

拋出:
IOException - 如果關閉此套接字時發生 I/O 錯誤。
從以下版本開始:
1.3
另請參見:
shutdownOutput(), close(), setSoLinger(boolean, int), isInputShutdown()

shutdownOutput

public void shutdownOutput()
                    throws IOException
禁用此套接字的輸出流。對於 TCP 套接字,任何以前寫入的數據都將被發送,並且后跟 TCP 的正常連接終止序列。 如果在套接字上調用 shutdownOutput() 后寫入套接字輸出流,則該流將拋出 IOException。

 

拋出:
IOException - 如果關閉此套接字時發生 I/O 錯誤。
從以下版本開始:
1.3
另請參見:
shutdownInput(), close(), setSoLinger(boolean, int), isOutputShutdown()

toString

public String toString()
將此套接字轉換為  String

 

覆蓋:
類  Object 中的  toString
返回:
此套接字的字符串表示形式。

isConnected

public boolean isConnected()
返回套接字的連接狀態。

 

返回:
如果將套接字成功地連接到服務器,則為 true。
從以下版本開始:
1.4

isBound

public boolean isBound()
返回套接字的綁定狀態。

 

返回:
如果將套接字成功地綁定到一個地址,則返回 true
從以下版本開始:
1.4
另請參見:
bind(java.net.SocketAddress)

isClosed

public boolean isClosed()
返回套接字的關閉狀態。

 

返回:
如果已經關閉了套接字,則返回 true
從以下版本開始:
1.4
另請參見:
close()

isInputShutdown

public boolean isInputShutdown()
返回是否關閉套接字連接的半讀狀態 (read-half)。

 

返回:
如果已關閉套接字的輸入,則返回 true
從以下版本開始:
1.4
另請參見:
shutdownInput()

isOutputShutdown

public boolean isOutputShutdown()
返回是否關閉套接字連接的半寫狀態 (write-half)。

 

返回:
如果已關閉套接字的輸出,則返回 true
從以下版本開始:
1.4
另請參見:
shutdownOutput()

setSocketImplFactory

public static void setSocketImplFactory(SocketImplFactory fac)
                                 throws IOException
為應用程序設置客戶端套接字實現工廠。工廠只能指定一次。

當應用程序創建新的客戶端套接字時,調用套接字實現工廠的 createSocketImpl 方法創建實際的套接字實現。

除非已經設置了工廠,否則向該方法傳遞 null 是無操作。

如果有安全管理器,則此方法首先調用安全管理器的 checkSetFactory 方法,以確保允許進行該操作。這可能會導致 SecurityException 異常。

 

參數:
fac - 所需的工廠。
拋出:
IOException - 如果設置套接字工廠時發生 I/O 錯誤。
SocketException - 如果已經定義該工廠。
SecurityException - 如果安全管理器存在並且其  checkSetFactory 方法不允許進行該操作。
另請參見:
SocketImplFactory.createSocketImpl(), SecurityManager.checkSetFactory()

setPerformancePreferences

public void setPerformancePreferences(int connectionTime,
                                      int latency,
                                      int bandwidth)
設置此套接字的性能偏好。

默認情況下套接字使用 TCP/IP 協議。有些實現可能提供與 TCP/IP 具有不同性能特征的替換協議。此方法允許應用程序在實現從可用協議中作出選擇時表達它自己關於應該如何進行折衷的偏好。

性能偏好由三個整數描述,它們的值分別指示短連接時間、低延遲和高帶寬的相對重要性。這些整數的絕對值沒有意義;為了選擇協議,需要簡單比較它們的值,較大的值指示更強的偏好。負值表示的優先級低於正值。例如,如果應用程序相對於低延遲和高帶寬更偏好短連接時間,則其可以使用值 (1, 0, 0) 調用此方法。如果應用程序相對於低延遲更偏好高帶寬,而相對於短連接時間更偏好低延遲,則其可以使用值 (0, 1, 2) 調用此方法。

在連接套接字后調用此方法無效。

 

參數:
connectionTime - 表達短連接時間的相對重要性的  int
latency - 表達低延遲的相對重要性的  int
bandwidth - 表達高帶寬的相對重要性的  int
從以下版本開始:
1.5


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM