JavaTM 2 Platform
Standard Ed. 6

java.net
類別 Socket

java.lang.Object
  繼承者 java.net.Socket
直接已知子類別:
SSLSocket

public class Socket
extends Object

此類別實作客戶端Socket(也可以就叫“Socket”)。Socket是兩台機器間通信的端點。

Socket的實際工作由 SocketImpl 類別的實例執行。應用程序通過更改創建Socket實作的Socket處理器可以配置它自身,以創建適合本地防火牆的Socket。

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

建構子摘要
  Socket()
          通過系統預設型別的 SocketImpl 創建未連接Socket
  Socket(InetAddress address, int port)
          創建一個串流Socket並將其連接到指定 IP 位址的指定埠號號。
  Socket(InetAddress host, int port, boolean stream)
          已過時。 Use DatagramSocket instead for UDP transport.
  Socket(InetAddress address, int port, InetAddress localAddr, int localPort)
          創建一個Socket並將其連接到指定遠端位址上的指定遠端埠號。
  Socket(Proxy proxy)
          創建一個未連接的Socket並指定代理型別(如果有),該代理不管其他設置如何都應被使用。
protected Socket(SocketImpl impl)
          使用使用者指定的 SocketImpl 創建一個未連接 Socket。
  Socket(String host, int port)
          創建一個串流Socket並將其連接到指定主機上的指定埠號號。
  Socket(String host, int port, boolean stream)
          已過時。 使用 DatagramSocket 取代 UDP 傳輸。
  Socket(String host, int port, InetAddress localAddr, int localPort)
          創建一個Socket並將其連接到指定遠端主機上的指定遠端埠號。
 
方法摘要
 void bind(SocketAddress bindpoint)
          將Socket綁定到本地位址。
 void close()
          關閉此Socket。
 void connect(SocketAddress endpoint)
          將此Socket連接到伺服器。
 void connect(SocketAddress endpoint, int timeout)
          將此Socket連接到伺服器,並指定一個逾時值。
 SocketChannel getChannel()
          返回與此資料電報Socket關聯的唯一 SocketChannel 物件(如果有)。
 InetAddress getInetAddress()
          返回Socket連接的位址。
 InputStream getInputStream()
          返回此Socket的輸入串流。
 boolean getKeepAlive()
          測試是否啟用 SO_KEEPALIVE。
 InetAddress getLocalAddress()
          獲取Socket綁定的本地位址。
 int getLocalPort()
          返回此Socket綁定到的本地埠號。
 SocketAddress getLocalSocketAddress()
          返回此Socket綁定的端點的位址,如果尚未綁定則返回 null
 boolean getOOBInline()
          測試是否啟用 OOBINLINE。
 OutputStream getOutputStream()
          返回此Socket的輸出串流。
 int getPort()
          返回此Socket連接到的遠端埠號。
 int getReceiveBufferSize()
          獲取此 Socket 的 SO_RCVBUF 選項的值,該值是平臺在 Socket 上輸入時使用的緩衝區大小。
 SocketAddress getRemoteSocketAddress()
          返回此Socket連接的端點的位址,如果未連接則返回 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()
          返回Socket的綁定狀態。
 boolean isClosed()
          返回Socket的關閉狀態。
 boolean isConnected()
          返回Socket的連接狀態。
 boolean isInputShutdown()
          返回是否關閉Socket連接的半讀狀態 (read-half)。
 boolean isOutputShutdown()
          返回是否關閉Socket連接的半寫狀態 (write-half)。
 void sendUrgentData(int data)
          在Socket上發送一個緊急資料位元組。
 void setKeepAlive(boolean on)
          啟用/禁用 SO_KEEPALIVE。
 void setOOBInline(boolean on)
          啟用/禁用 OOBINLINE(TCP 緊急資料的接收者) 預設情況下,此選項是禁用的,即在Socket上接收的 TCP 緊急資料被靜默丟棄。
 void setPerformancePreferences(int connectionTime, int latency, int bandwidth)
          設置此Socket的性能偏好。
 void setReceiveBufferSize(int size)
          將此 Socket 的 SO_RCVBUF 選項設置為指定的值。
 void setReuseAddress(boolean on)
          啟用/禁用 SO_REUSEADDR Socket選項。
 void setSendBufferSize(int size)
          將此 Socket 的 SO_SNDBUF 選項設置為指定的值。
static void setSocketImplFactory(SocketImplFactory fac)
          為應用程序設置客戶端Socket實作處理器。
 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()
          此Socket的輸入串流置於“串流的末尾”。
 void shutdownOutput()
          禁用此Socket的輸出串流。
 String toString()
          將此Socket轉換為 String
 
從類別 java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

建構子詳細資訊

Socket

public Socket()
通過系統預設型別的 SocketImpl 創建未連接Socket

從以下版本開始:
JDK1.1

Socket

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

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

範例:

參數:
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
創建一個串流Socket並將其連接到指定主機上的指定埠號號。

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

如果應用程序已指定伺服器Socket處理器,則調用該處理器的 createSocketImpl 方法來創建實際Socket實作。否則創建“普通”Socket。

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

參數:
host - 主機名,或者為 null,表示回送位址。
port - 埠號號。
拋出:
UnknownHostException - 如果無法確定主機的 IP 位址。
IOException - 如果創建Socket時發生 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
創建一個串流Socket並將其連接到指定 IP 位址的指定埠號號。

如果應用程序已指定Socket處理器,則調用該處理器的 createSocketImpl 方法來創建實際Socket實作。否則創建“普通”Socket。

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

參數:
address - IP 位址。
port - 埠號號。
拋出:
IOException - 如果創建Socket時發生 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並將其連接到指定遠端主機上的指定遠端埠號。socket 會通過調用 bind() 函數來綁定提供的本地位址及埠號。

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

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

參數:
host - 遠端主機名,或者為 null,表示回送位址。
port - 遠端埠號
localAddr - 要將Socket綁定到的本地位址
localPort - 要將Socket綁定到的本地埠號
拋出:
IOException - 如果在創建Socket時發生 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並將其連接到指定遠端位址上的指定遠端埠號。socket 會通過調用 bind() 函數來綁定提供的本地位址及埠號。

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

參數:
address - 遠端位址
port - 遠端埠號
localAddr - 要將Socket綁定到的本地位址
localPort - 要將Socket綁定到的本地埠號
拋出:
IOException - 如果在創建Socket時發生 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 傳輸。

創建一個串流Socket並將其連接到指定主機上的指定埠號號。

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

如果串流參數為 true,則創建串流Socket。如果串流參數為 false,則創建資料電報Socket。

如果應用程序已指定伺服器Socket處理器,則調用該處理器的 createSocketImpl 方法來創建實際Socket實作。否則創建“普通”Socket。

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

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

參數:
host - 主機名,或者為 null,表示回送位址。
port - 埠號號。
stream - 指示此為串流Socket還是資料電報Socket的 boolean
拋出:
IOException - 如果創建Socket時發生 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.

創建一個Socket並將其連接到指定 IP 位址的指定埠號號。

如果串流參數為 true,則創建串流Socket。如果串流參數為 false,則創建資料電報Socket。

如果應用程序已指定伺服器Socket處理器,則調用該處理器的 createSocketImpl 方法來創建實際Socket實作。否則創建“普通”Socket。

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

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

參數:
host - IP 位址。
port - 埠號號。
stream - 如果為 true,則創建串流Socket;否則創建資料電報Socket。
拋出:
IOException - 如果創建Socket時發生 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
將此Socket連接到伺服器。

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

connect

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

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

bind

public void bind(SocketAddress bindpoint)
          throws IOException
將Socket綁定到本地位址。

如果位址為 null,則系統將挑選一個臨時埠號和一個有效本地位址來綁定Socket。

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

getInetAddress

public InetAddress getInetAddress()
返回Socket連接的位址。

返回:
此Socket連接到的遠端 IP 位址;如果Socket是未連接的,則返回 null

getLocalAddress

public InetAddress getLocalAddress()
獲取Socket綁定的本地位址。

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

getPort

public int getPort()
返回此Socket連接到的遠端埠號。

返回:
此Socket連接到的遠端埠號號;如果尚未連接Socket,則返回 0。

getLocalPort

public int getLocalPort()
返回此Socket綁定到的本地埠號。

返回:
此Socket綁定到的本地埠號號;如果尚未綁定Socket,則返回 -1。

getRemoteSocketAddress

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

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

getLocalSocketAddress

public SocketAddress getLocalSocketAddress()
返回此Socket綁定的端點的位址,如果尚未綁定則返回 null

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

getChannel

public SocketChannel getChannel()
返回與此資料電報Socket關聯的唯一 SocketChannel 物件(如果有)。

當且僅當通過 SocketChannel.openServerSocketChannel.accept 方法創建了通道本身時,Socket才具有一個通道。

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

getInputStream

public InputStream getInputStream()
                           throws IOException
返回此Socket的輸入串流。

如果此Socket具有關聯的通道,則所得的輸入串流會將其所有操作委託給通道。如果通道為非阻塞網要,則輸入串流的 read 操作將拋出 IllegalBlockingModeException

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

關閉返回的 InputStream 將關閉關聯Socket。

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

getOutputStream

public OutputStream getOutputStream()
                             throws IOException
返回此Socket的輸出串流。

如果此Socket具有關聯的通道,則得到的輸出串流會將其所有操作委託給通道。如果通道為非阻塞網要,則輸出串流的 write 操作將拋出 IllegalBlockingModeException

關閉返回的 OutputStream 將關閉關聯Socket。

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

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。最大逾時值是特定於平臺的。 該設置僅影響Socket關閉。

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

getSoLinger

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

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

sendUrgentData

public void sendUrgentData(int data)
                    throws IOException
在Socket上發送一個緊急資料位元組。要發送的位元組是資料參數的八個最低位。緊急位元組在對Socket OutputStream 的所有預先寫入之後但在任何以後寫入之前發送。

參數:
data - 要發送的資料位元組
拋出:
IOException - 如果發送資料時發生錯誤。
從以下版本開始:
1.4

setOOBInline

public void setOOBInline(boolean on)
                  throws SocketException
啟用/禁用 OOBINLINE(TCP 緊急資料的接收者) 預設情況下,此選項是禁用的,即在Socket上接收的 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 接收視窗。一般情況下,當連接Socket時,可以在任意時間更改視窗大小。然而,如果需要的接收視窗大於 64K,則必須在將Socket連接到遠端同位體之前請求。下面是需要知道的兩種情況:

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

  2. 對於客戶端Socket,則必須在將Socket連接到其遠端同位體前調用 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 - 是否開啟保持活動狀態的Socket。
拋出:
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 欄位是由以下逐位或所得值創建的位集:

末尾的最低位常常被忽略,因為該位對應於 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 Socket選項。

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

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

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

在綁定Socket(請參閱 isBound())後啟用或禁用 SO_REUSEADDR 時的行為是不確定的。

參數:
on - 是否啟用 SO_REUSEADDR Socket選項
拋出:
SocketException - 如果啟用或禁用 SO_RESUEADDR Socket選項時發生錯誤,或者關閉了Socket。
從以下版本開始:
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
關閉此Socket。

所有當前阻塞於此Socket上的 I/O 操作中的執行緒都將拋出 SocketException

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

關閉此Socket也將會關閉該Socket的 InputStreamOutputStream

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

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

shutdownInput

public void shutdownInput()
                   throws IOException
此Socket的輸入串流置於“串流的末尾”。發送到Socket的輸入串流端的任何資料都將被確認然後被靜默丟棄。

如果在Socket上調用 shutdownInput() 後從Socket輸入串流讀取內容,則串流將返回 EOF(檔案結束符)。

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

shutdownOutput

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

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

toString

public String toString()
將此Socket轉換為 String

覆寫:
類別 Object 中的 toString
返回:
此Socket的字元串表示形式。

isConnected

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

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

isBound

public boolean isBound()
返回Socket的綁定狀態。

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

isClosed

public boolean isClosed()
返回Socket的關閉狀態。

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

isInputShutdown

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

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

isOutputShutdown

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

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

setSocketImplFactory

public static void setSocketImplFactory(SocketImplFactory fac)
                                 throws IOException
為應用程序設置客戶端Socket實作處理器。處理器只能指定一次。

當應用程序創建新的客戶端Socket時,調用Socket實作處理器的 createSocketImpl 方法創建實際的Socket實作。

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

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

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

setPerformancePreferences

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

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

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

在連接Socket後調用此方法無效。

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

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only