|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
java.lang.Object java.net.ServerSocket
public class ServerSocket
此類別實作伺服器Socket。伺服器Socket等待請求通過網路傳入。它基於該請求執行某些操作,然後可能向請求者返回結果。
伺服器Socket的實際工作由 SocketImpl
類別的實例執行。應用程序可以更改創建Socket實作的Socket處理器來配置它自身,從而創建適合本地防火牆的Socket。
SocketImpl
,
setSocketFactory(java.net.SocketImplFactory)
,
ServerSocketChannel
建構子摘要 | |
---|---|
ServerSocket()
創建非綁定伺服器Socket。 |
|
ServerSocket(int port)
創建綁定到特定埠號的伺服器Socket。 |
|
ServerSocket(int port,
int backlog)
利用指定的 backlog 創建伺服器Socket並將其綁定到指定的本地埠號號。 |
|
ServerSocket(int port,
int backlog,
InetAddress bindAddr)
使用指定的埠號、偵聽 backlog 和要綁定到的本地 IP 位址創建伺服器。 |
方法摘要 | |
---|---|
Socket |
accept()
偵聽並接受到此Socket的連接。 |
void |
bind(SocketAddress endpoint)
將 ServerSocket 綁定到特定位址(IP 位址和埠號號)。 |
void |
bind(SocketAddress endpoint,
int backlog)
將 ServerSocket 綁定到特定位址(IP 位址和埠號號)。 |
void |
close()
關閉此Socket。 |
ServerSocketChannel |
getChannel()
返回與此Socket關聯的唯一 ServerSocketChannel 物件(如果有)。 |
InetAddress |
getInetAddress()
返回此伺服器Socket的本地位址。 |
int |
getLocalPort()
返回此Socket在其上偵聽的埠號。 |
SocketAddress |
getLocalSocketAddress()
返回此Socket綁定的端點的位址,如果尚未綁定則返回 null 。 |
int |
getReceiveBufferSize()
獲取此 ServerSocket 的 SO_RCVBUF 選項的值,該值是將用於從此 ServerSocket 接受的Socket的建議緩衝區大小。 |
boolean |
getReuseAddress()
測試是否啟用 SO_REUSEADDR。 |
int |
getSoTimeout()
獲取 SO_TIMEOUT 的設置。 |
protected void |
implAccept(Socket s)
ServerSocket 的子類別使用此方法覆寫 accept() 以返回它們自己的Socket子類別。 |
boolean |
isBound()
返回 ServerSocket 的綁定狀態。 |
boolean |
isClosed()
返回 ServerSocket 的關閉狀態。 |
void |
setPerformancePreferences(int connectionTime,
int latency,
int bandwidth)
設置此 ServerSocket 的性能首選項。 |
void |
setReceiveBufferSize(int size)
為從此 ServerSocket 接受的Socket的 SO_RCVBUF 選項設置預設建議值。 |
void |
setReuseAddress(boolean on)
啟用/禁用 SO_REUSEADDR Socket選項。 |
static void |
setSocketFactory(SocketImplFactory fac)
為應用程序設置伺服器Socket實作處理器。 |
void |
setSoTimeout(int timeout)
通過指定逾時值啟用/禁用 SO_TIMEOUT,以毫秒為單位。 |
String |
toString()
作為 String 返回此Socket的實作位址和實作埠號。 |
從類別 java.lang.Object 繼承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
建構子詳細資訊 |
---|
public ServerSocket() throws IOException
IOException
- 如果打開Socket時發生 IO 錯誤。public ServerSocket(int port) throws IOException
0
在所有空閒埠號上創建Socket。
傳入連接指示(對連接的請求)的最大佇列長度被設置為 50
。如果佇列滿時收到連接指示,則拒絕該連接。
如果應用程序已指定伺服器Socket處理器,則調用該處理器的 createSocketImpl
方法來創建實際Socket實作。否則創建“普通”Socket。
如果存在安全管理器,則首先使用 port
參數作為參數調用其 checkListen
方法,以確保允許該操作。這可能會導致 SecurityException 異常。
port
- 埠號號;或者為 0
,表示使用任何空閒埠號。
IOException
- 如果打開Socket時發生 I/O 錯誤。
SecurityException
- 如果安全管理器存在並且其 checkListen
方法不允許進行該操作。SocketImpl
,
SocketImplFactory.createSocketImpl()
,
setSocketFactory(java.net.SocketImplFactory)
,
SecurityManager.checkListen(int)
public ServerSocket(int port, int backlog) throws IOException
0
在所有空閒埠號上創建Socket。
傳入連接指示(對連接的請求)的最大佇列長度被設置為 backlog
參數。如果佇列滿時收到連接指示,則拒絕該連接。
如果應用程序已指定伺服器Socket處理器,則調用該處理器的 createSocketImpl
方法來創建實際Socket實作。否則創建“普通”Socket。
如果存在安全管理器,則首先使用 port
參數作為參數調用其 checkListen
方法,以確保允許該操作。這可能會導致 SecurityException 異常。
backlog
參數必須是大於 0 的正值。如果傳遞的值等於或小於 0,則使用預設值。
port
- 指定的埠號;或者為 0
,表示使用任何空閒埠號。backlog
- 佇列的最大長度。
IOException
- 如果打開Socket時發生 I/O 錯誤。
SecurityException
- 如果安全管理器存在並且其 checkListen
方法不允許進行該操作。SocketImpl
,
SocketImplFactory.createSocketImpl()
,
setSocketFactory(java.net.SocketImplFactory)
,
SecurityManager.checkListen(int)
public ServerSocket(int port, int backlog, InetAddress bindAddr) throws IOException
如果存在安全管理器,則此方法使用 port
作為參數調用其 checkListen
方法,以確保允許該操作。這可能會導致 SecurityException 異常。
backlog
參數必須是大於 0 的正值。如果傳遞的值等於或小於 0,則使用預設值。
port
- 本地 TCP 埠號backlog
- 偵聽 backlogbindAddr
- 要將伺服器綁定到的 InetAddress
SecurityException
- 如果安全管理器存在並且其 checkListen
方法不允許進行該操作。
IOException
- 如果打開Socket時發生 I/O 錯誤。SocketOptions
,
SocketImpl
,
SecurityManager.checkListen(int)
方法詳細資訊 |
---|
public void bind(SocketAddress endpoint) throws IOException
ServerSocket
綁定到特定位址(IP 位址和埠號號)。
如果位址為 null
,則系統將挑選一個臨時埠號和一個有效本地位址來綁定Socket。
endpoint
- 要綁定的 IP 位址和埠號號。
IOException
- 如果綁定操作失敗或者已經綁定了Socket。
SecurityException
- 如果 SecurityManager
存在並且其 checkListen
方法不允許該操作。
IllegalArgumentException
- 如果端點是不受此Socket支持的 SocketAddress 子類別public void bind(SocketAddress endpoint, int backlog) throws IOException
ServerSocket
綁定到特定位址(IP 位址和埠號號)。
如果位址為 null
,則系統將挑選一個臨時埠號和一個有效本地位址來綁定Socket。
backlog
參數必須是大於 0 的正值。如果傳遞的值等於或小於 0,則使用預設值。
endpoint
- 要綁定的 IP 位址和埠號號。backlog
- 偵聽 backlog 長度。
IOException
- 如果綁定操作失敗或者已經綁定了Socket。
SecurityException
- 如果 SecurityManager
存在並且其 checkListen
方法不允許該操作。
IllegalArgumentException
- 如果端點是不受此Socket支持的 SocketAddress 子類別public InetAddress getInetAddress()
null
。public int getLocalPort()
public SocketAddress getLocalSocketAddress()
null
。
SocketAddress
,如果尚未綁定則返回 null
。getInetAddress()
,
getLocalPort()
,
bind(SocketAddress)
public Socket accept() throws IOException
創建新Socket s
,如果存在安全管理器,則使用 s.getInetAddress().getHostAddress()
和 s.getPort()
作為參數調用安全管理器的 checkAccept
方法,以確保允許該操作。這可能會導致 SecurityException 異常。
IOException
- 如果等待連接時發生 I/O 錯誤。
SecurityException
- 如果安全管理器存在並且其 checkAccept
方法不允許進行該操作。
SocketTimeoutException
- 如果以前使用 setSoTimeout 設置了逾時並且已到達逾時值。
IllegalBlockingModeException
- 如果此Socket具有關聯的通道、通道處於非阻塞網要並且不存在準備接受的連接SecurityManager.checkAccept(java.lang.String, int)
protected final void implAccept(Socket s) throws IOException
s
- Socket
IllegalBlockingModeException
- 如果此Socket具有關聯通道並且通道處於非阻塞網要
IOException
- 如果在等待連接時發生 I/O 錯誤。public void close() throws IOException
accept()
中所有當前阻塞的執行緒都將會拋出 SocketException
。
如果此Socket有一個與之關聯的通道,則關閉該通道。
IOException
- 如果關閉Socket時發生 I/O 錯誤。public ServerSocketChannel getChannel()
ServerSocketChannel
物件(如果有)。
當且僅當通過 ServerSocketChannel.open
方法創建了通道本身時,伺服器Socket才具有一個通道。
public boolean isBound()
public boolean isClosed()
public void setSoTimeout(int timeout) throws SocketException
timeout
- 指定的逾時(以毫秒為單位)
SocketException
- 如果在底層協議中存在錯誤,如 TCP 錯誤。getSoTimeout()
public int getSoTimeout() throws IOException
IOException
- 如果發生 I/O 錯誤setSoTimeout(int)
public void setReuseAddress(boolean on) throws SocketException
關閉 TCP 連接時,該連接可能在關閉後的一段時間內保持逾時狀態(通常稱為 TIME_WAIT 狀態或 2MSL 等待狀態)。對於使用已知Socket位址或埠號的應用程序而言,如果存在處於逾時狀態的連接(包括位址和埠號),可能不能將Socket綁定到所需的 SocketAddress。
在使用 bind(SocketAddress)
綁定Socket前啟用 SO_REUSEADDR 可允許上一個連接處於逾時狀態時綁定Socket。
當創建 ServerSocket 時,SO_REUSEADDR 的初始設置是不確定的。應用程序可以使用 getReuseAddress()
來確定 SO_REUSEADDR 的初始設置。
在綁定Socket(請參閱 isBound()
)後啟用或禁用 SO_REUSEADDR 時的行為是不確定的。
on
- 是否啟用 SO_REUSEADDR Socket選項
SocketException
- 如果啟用或禁用 SO_RESUEADDR Socket選項時發生錯誤,或者關閉了Socket。getReuseAddress()
,
bind(SocketAddress)
,
isBound()
,
isClosed()
public boolean getReuseAddress() throws SocketException
boolean
值。
SocketException
- 如果底層協議出現錯誤,例如 TCP 錯誤。setReuseAddress(boolean)
public String toString()
String
返回此Socket的實作位址和實作埠號。
Object
中的 toString
public static void setSocketFactory(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 setReceiveBufferSize(int size) throws SocketException
accept()
返回Socket後通過調用 Socket.getReceiveBufferSize()
確定。
SO_RCVBUF 的值用於設置內部Socket接收緩衝區的大小和設置公佈到遠端同位體的 TCP 接收視窗的大小。
隨後可以通過調用 Socket.setReceiveBufferSize(int)
更改該值。但是,如果應用程序希望允許大於 RFC1323 中定義的 64K 位元組的接收視窗,則在將 ServerSocket 綁定到本地位址之前必須在其中設置建議值。這意味著,必須用無參數建構子創建 ServerSocket,然後必須調用 setReceiveBufferSize(),最後通過調用 bind() 將 ServerSocket 綁定到位址。
未能執行此操作不會導致錯誤,緩衝區大小可能被設置為所請求的值,但是從此 ServerSocket 中接受的Socket中的 TCP 接收視窗將不再大於 64K 位元組。
size
- 要設置的接收緩衝區大小。此值必須大於 0。
SocketException
- 如果底層協議出現錯誤,例如 TCP 錯誤。
IllegalArgumentException
- 如果值為 0 或負。getReceiveBufferSize()
public int getReceiveBufferSize() throws SocketException
注意,在接受的Socket中實際設置的值通過調用 Socket.getReceiveBufferSize()
來確定。
SocketException
- 如果底層協議出現錯誤,例如 TCP 錯誤。setReceiveBufferSize(int)
public void setPerformancePreferences(int connectionTime, int latency, int bandwidth)
預設情況下Socket使用 TCP/IP 協議。有些實作可能提供與 TCP/IP 具有不同性能特徵的替代協議。此方法允許應用程序在實作從可用協議中作出選擇時表明它自己關於應該如何進行折衷的首選項。
性能首選項由三個整數描述,它們的值分別指示短連接時間、低延遲和高帶寬的相對重要性。這些整數的絕對值沒有意義;為了選擇協議,需要簡單地比較它們的值,較大的值指示更強的首選項。例如,如果應用程序相對於低延遲和高帶寬更希望短連接時間,則其可以使用值 (1, 0, 0) 調用此方法。如果應用程序相對於低延遲更希望高帶寬,且相對於短連接時間更希望低延遲,則其可以使用值 (0, 1, 2) 調用此方法。
在綁定Socket後調用此方法無效。這意味著,需要利用無參數建構子創建Socket才能使用此功能。
connectionTime
- 表明短連接時間的相對重要性的 intlatency
- 表明低延遲的相對重要性的 intbandwidth
- 表明高帶寬的相對重要性的 int
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。