|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
java.lang.Object java.net.Socket
public class Socket
此類別實作客戶端Socket(也可以就叫“Socket”)。Socket是兩台機器間通信的端點。
Socket的實際工作由 SocketImpl
類別的實例執行。應用程序通過更改創建Socket實作的Socket處理器可以配置它自身,以創建適合本地防火牆的Socket。
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 |
建構子詳細資訊 |
---|
public Socket()
public Socket(Proxy proxy)
如果有安全管理器,則使用代理主機位址和埠號號作為參數調用其 checkConnect
方法。這可能會導致 SecurityException 異常。
範例:
Socket s = new Socket(Proxy.NO_PROXY);
將創建忽略任何其他代理配置的普通Socket。Socket s = new Socket(new Proxy(Proxy.Type.SOCKS, new InetSocketAddress("socks.mydom.com", 1080)));
將創建通過指定的 SOCKS 代理伺服器進行連接的Socket。
proxy
- 指定應使用的代理種類別的 Proxy
物件。
IllegalArgumentException
- 如果代理的型別無效或者為 null
。
SecurityException
- 如果存在安全管理器,但拒絕連接到代理的權限。ProxySelector
,
Proxy
protected Socket(SocketImpl impl) throws SocketException
impl
- 子類別希望在 Socket 上使用的 SocketImpl 的實例。
SocketException
- 如果底層協議出現錯誤,例如 TCP 錯誤。public Socket(String host, int port) throws UnknownHostException, IOException
如果指定的主機為 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)
public Socket(InetAddress address, int port) throws IOException
如果應用程序已指定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)
public Socket(String host, int port, InetAddress localAddr, int localPort) throws IOException
如果指定的主機為 null,則等效於指定與 InetAddress.getByName
(null) 相同的位址。換句話話,等效於指定回送介面的位址。
如果有安全管理器,則使用主機位址和 port
作為參數調用其 checkConnect
方法。這可能會導致 SecurityException 異常。
host
- 遠端主機名,或者為 null
,表示回送位址。port
- 遠端埠號localAddr
- 要將Socket綁定到的本地位址localPort
- 要將Socket綁定到的本地埠號
IOException
- 如果在創建Socket時發生 I/O 錯誤。
SecurityException
- 如果安全管理器存在並且其 checkConnect
方法不允許進行該操作。SecurityManager.checkConnect(java.lang.String, int)
public Socket(InetAddress address, int port, InetAddress localAddr, int localPort) throws IOException
如果有安全管理器,則使用主機位址和 port
作為參數調用其 checkConnect
方法。這可能會導致 SecurityException 異常。
address
- 遠端位址port
- 遠端埠號localAddr
- 要將Socket綁定到的本地位址localPort
- 要將Socket綁定到的本地埠號
IOException
- 如果在創建Socket時發生 I/O 錯誤。
SecurityException
- 如果安全管理器存在並且其 checkConnect
方法不允許進行該操作。SecurityManager.checkConnect(java.lang.String, int)
@Deprecated public Socket(String host, int port, boolean stream) throws IOException
如果指定的主機為 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)
@Deprecated public Socket(InetAddress host, int port, boolean stream) throws IOException
如果串流參數為 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)
方法詳細資訊 |
---|
public void connect(SocketAddress endpoint) throws IOException
endpoint
- SocketAddress
IOException
- 如果在連接期間發生錯誤
IllegalBlockingModeException
- 如果此Socket具有關聯的通道並且該通道處於非阻塞網要
IllegalArgumentException
- 如果端點為 null 或者此Socket不支持 SocketAddress 子類別public void connect(SocketAddress endpoint, int timeout) throws IOException
endpoint
- SocketAddress
timeout
- 要使用的逾時值(以毫秒為單位)。
IOException
- 如果在連接期間發生錯誤
SocketTimeoutException
- 如果在連接之前逾時期滿
IllegalBlockingModeException
- 如果此Socket具有關聯的通道並且該通道處於非阻塞網要
IllegalArgumentException
- 如果端點為 null 或者此Socket不支持 SocketAddress 子類別public void bind(SocketAddress bindpoint) throws IOException
如果位址為 null
,則系統將挑選一個臨時埠號和一個有效本地位址來綁定Socket。
bindpoint
- 要綁定到的 SocketAddress
IOException
- 如果綁定操作失敗或者已經綁定了Socket。
IllegalArgumentException
- 如果 bindpoint 是不受此Socket支持的 SocketAddress 子類別。isBound()
public InetAddress getInetAddress()
null
。public InetAddress getLocalAddress()
InetAddress.anyLocalAddress()
。public int getPort()
public int getLocalPort()
public SocketAddress getRemoteSocketAddress()
null
。
SocketAddress
,如果尚未連接則返回 null
。getInetAddress()
,
getPort()
,
connect(SocketAddress, int)
,
connect(SocketAddress)
public SocketAddress getLocalSocketAddress()
null
。
SocketAddress
,如果尚未綁定則返回 null
。getLocalAddress()
,
getLocalPort()
,
bind(SocketAddress)
public SocketChannel getChannel()
SocketChannel
物件(如果有)。
當且僅當通過 SocketChannel.open
或 ServerSocketChannel.accept
方法創建了通道本身時,Socket才具有一個通道。
public InputStream getInputStream() throws IOException
如果此Socket具有關聯的通道,則所得的輸入串流會將其所有操作委託給通道。如果通道為非阻塞網要,則輸入串流的 read 操作將拋出 IllegalBlockingModeException
。
在非正常條件下,底層連接可能被遠端主機或網路軟體中斷(例如,TCP 連接情況下的連接重置)。當網路軟體檢測到中斷的連接時,將對返回的輸入串流應用以下操作:
網路軟體可能丟棄經過Socket緩衝的位元組。網路軟體沒有丟棄的位元組可以使用 read
讀取。
如果沒有任何位元組在Socket上緩衝,或者 read
已經消耗了所有緩衝的位元組,則對 read
的所有後續調用都將拋出 IOException
。
如果沒有任何位元組在Socket上緩衝,並且沒有使用 close
關閉Socket,則 available
將返回 0
。
關閉返回的 InputStream
將關閉關聯Socket。
IOException
- 如果在創建輸入串流時發生 I/O 錯誤、沒有關閉Socket、沒有連接Socket或者使用 shutdownInput()
關閉了Socket輸入public OutputStream getOutputStream() throws IOException
如果此Socket具有關聯的通道,則得到的輸出串流會將其所有操作委託給通道。如果通道為非阻塞網要,則輸出串流的 write 操作將拋出 IllegalBlockingModeException
。
關閉返回的 OutputStream
將關閉關聯Socket。
IOException
- 如果創建輸出串流時發生 I/O 錯誤或者沒有連接Socket。public void setTcpNoDelay(boolean on) throws SocketException
on
- 為 true
表示啟用 TCP_NODELAY;為 false
表示禁用。
SocketException
- 如果底層協議出現錯誤,例如 TCP 錯誤。getTcpNoDelay()
public boolean getTcpNoDelay() throws SocketException
boolean
值。
SocketException
- 如果底層協議出現錯誤,例如 TCP 錯誤。setTcpNoDelay(boolean)
public void setSoLinger(boolean on, int linger) throws SocketException
on
- 是否逗留。linger
- 逗留時間,如果 on 為 true。
SocketException
- 如果底層協議出現錯誤,例如 TCP 錯誤。
IllegalArgumentException
- 如果逗留值為負。getSoLinger()
public int getSoLinger() throws SocketException
SocketException
- 如果底層協議出現錯誤,例如 TCP 錯誤。setSoLinger(boolean, int)
public void sendUrgentData(int data) throws IOException
data
- 要發送的資料位元組
IOException
- 如果發送資料時發生錯誤。public void setOOBInline(boolean on) throws SocketException
注意,僅為處理傳入緊急資料提供有限支持。特別要指出的是,不提供傳入緊急資料的任何通知並且不存在區分普通資料和緊急資料的功能(除非更高層級別的協議提供)。
on
- true
表示啟用 OOBINLINE;false
表示禁用。
SocketException
- 如果底層協議出現錯誤,例如 TCP 錯誤。getOOBInline()
public boolean getOOBInline() throws SocketException
boolean
值。
SocketException
- 如果底層協議出現錯誤,例如 TCP 錯誤。setOOBInline(boolean)
public void setSoTimeout(int timeout) throws SocketException
timeout
- 指定的以毫秒為單位的逾時值。
SocketException
- 如果底層協議出現錯誤,例如 TCP 錯誤。getSoTimeout()
public int getSoTimeout() throws SocketException
SocketException
- 如果底層協議出現錯誤,例如 TCP 錯誤。setSoTimeout(int)
public void setSendBufferSize(int size) throws SocketException
由於 SO_SNDBUF 是一種提示,想要驗證緩衝區設置大小的應用程序應該調用 getSendBufferSize()
。
size
- 將設置的發送緩衝區大小。此值必須大於 0。
SocketException
- 如果底層協議出現錯誤,例如 TCP 錯誤。
IllegalArgumentException
- 如果值為 0 或負。getSendBufferSize()
public int getSendBufferSize() throws SocketException
SocketException
- 如果底層協議出現錯誤,例如 TCP 錯誤。setSendBufferSize(int)
public void setReceiveBufferSize(int size) throws SocketException
增大接收快取記憶體大小可以增大大量連接的網路 I/O 的性能,而減小它有助於減少傳入資料的 backlog。
由於 SO_RCVBUF 是一種提示,想要驗證緩衝區設置大小的應用程序應該調用 getReceiveBufferSize()
。
SO_RCVBUF 的值還用於設置公佈到遠端同位體的 TCP 接收視窗。一般情況下,當連接Socket時,可以在任意時間更改視窗大小。然而,如果需要的接收視窗大於 64K,則必須在將Socket連接到遠端同位體之前請求。下面是需要知道的兩種情況:
ServerSocket.setReceiveBufferSize(int)
執行此操作。
size
- 要設置的接收緩衝區大小。此值必須大於 0。
IllegalArgumentException
- 如果值為 0 或負。
SocketException
- 如果底層協議出現錯誤,例如 TCP 錯誤。getReceiveBufferSize()
,
ServerSocket.setReceiveBufferSize(int)
public int getReceiveBufferSize() throws SocketException
SocketException
- 如果底層協議出現錯誤,例如 TCP 錯誤。setReceiveBufferSize(int)
public void setKeepAlive(boolean on) throws SocketException
on
- 是否開啟保持活動狀態的Socket。
SocketException
- 如果底層協議出現錯誤,例如 TCP 錯誤。getKeepAlive()
public boolean getKeepAlive() throws SocketException
boolean
值。
SocketException
- 如果底層協議出現錯誤,例如 TCP 錯誤。setKeepAlive(boolean)
public void setTrafficClass(int tc) throws SocketException
tc 的值必須在 0 <= tc <= 255
範圍內,否則將拋出 IllegalArgumentException。
註:
對於 Internet Protocol v4 該值由包含優先級和 TOS 欄位的八位組組成,這在 RFC 1349 中有詳細敘述。TOS 欄位是由以下逐位或所得值創建的位集:
IPTOS_LOWCOST (0x02)
IPTOS_RELIABILITY (0x04)
IPTOS_THROUGHPUT (0x08)
IPTOS_LOWDELAY (0x10)
設置優先級欄位中的位可能導致 SocketException,指示不允許該操作。
根據 RFC 1122 第 4.2.4.2 節中的指示,相容的 TCP 實作應該(但不是必須)讓應用程序在連接的生命週期中改變 TOS 欄位。因此,type-of-service(服務型別)欄位在已建立 TCP 連接之後能否更改取決於底層平臺的實作。應用程序不應假定它們在連接之後能夠改變 TOS 欄位。
對於 Internet Protocol v6 tc
是將被放置到 IP 頭部的 sin6_flowinfo 欄位中的值。
tc
- 此位集的 int
值。
SocketException
- 如果設置串流量類別別或服務型別時出現錯誤getTrafficClass()
public int getTrafficClass() throws SocketException
由於底層網路實作可能忽略使用 setTrafficClass(int)
設置的串流量類別別或服務型別,因而此方法可能返回一個不同於以前用 setTrafficClass(int)
在此 Socket 上設置的值。
SocketException
- 如果獲取串流量類別別或服務型別值時出現錯誤。setTrafficClass(int)
public void setReuseAddress(boolean on) throws SocketException
關閉 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。getReuseAddress()
,
bind(SocketAddress)
,
isClosed()
,
isBound()
public boolean getReuseAddress() throws SocketException
boolean
值。
SocketException
- 如果底層協議出現錯誤,例如 TCP 錯誤。setReuseAddress(boolean)
public void close() throws IOException
所有當前阻塞於此Socket上的 I/O 操作中的執行緒都將拋出 SocketException
。
Socket被關閉後,便不可在以後的網路連接中使用(即無法重新連接或重新綁定)。需要創建新的Socket。
關閉此Socket也將會關閉該Socket的 InputStream
和 OutputStream
。
如果此Socket有一個與之關聯的通道,則關閉該通道。
IOException
- 如果關閉此Socket時發生 I/O 錯誤。isClosed()
public void shutdownInput() throws IOException
如果在Socket上調用 shutdownInput() 後從Socket輸入串流讀取內容,則串流將返回 EOF(檔案結束符)。
IOException
- 如果關閉此Socket時發生 I/O 錯誤。shutdownOutput()
,
close()
,
setSoLinger(boolean, int)
,
isInputShutdown()
public void shutdownOutput() throws IOException
IOException
- 如果關閉此Socket時發生 I/O 錯誤。shutdownInput()
,
close()
,
setSoLinger(boolean, int)
,
isOutputShutdown()
public String toString()
String
。
Object
中的 toString
public boolean isConnected()
public boolean isBound()
bind(java.net.SocketAddress)
public boolean isClosed()
close()
public boolean isInputShutdown()
shutdownInput()
public boolean isOutputShutdown()
shutdownOutput()
public static void setSocketImplFactory(SocketImplFactory fac) throws IOException
當應用程序創建新的客戶端Socket時,調用Socket實作處理器的 createSocketImpl
方法創建實際的Socket實作。
除非已經設置了處理器,否則向該方法傳遞 null
是無操作。
如果有安全管理器,則此方法首先調用安全管理器的 checkSetFactory
方法,以確保允許進行該操作。這可能會導致 SecurityException 異常。
fac
- 所需的處理器。
IOException
- 如果設置Socket處理器時發生 I/O 錯誤。
SocketException
- 如果已經定義該處理器。
SecurityException
- 如果安全管理器存在並且其 checkSetFactory
方法不允許進行該操作。SocketImplFactory.createSocketImpl()
,
SecurityManager.checkSetFactory()
public void setPerformancePreferences(int connectionTime, int latency, int bandwidth)
預設情況下Socket使用 TCP/IP 協議。有些實作可能提供與 TCP/IP 具有不同性能特徵的替換協議。此方法允許應用程序在實作從可用協議中作出選擇時表達它自己關於應該如何進行折衷的偏好。
性能偏好由三個整數描述,它們的值分別指示短連接時間、低延遲和高帶寬的相對重要性。這些整數的絕對值沒有意義;為了選擇協議,需要簡單比較它們的值,較大的值指示更強的偏好。負值表示的優先級低於正值。例如,如果應用程序相對於低延遲和高帶寬更偏好短連接時間,則其可以使用值 (1, 0, 0) 調用此方法。如果應用程序相對於低延遲更偏好高帶寬,而相對於短連接時間更偏好低延遲,則其可以使用值 (0, 1, 2) 調用此方法。
在連接Socket後調用此方法無效。
connectionTime
- 表達短連接時間的相對重要性的 intlatency
- 表達低延遲的相對重要性的 intbandwidth
- 表達高帶寬的相對重要性的 int
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。