java.nio.channels
類 ServerSocketChannel
java.lang.Object
java.nio.channels.spi.AbstractInterruptibleChannel
java.nio.channels.SelectableChannel
java.nio.channels.spi.AbstractSelectableChannel
java.nio.channels.ServerSocketChannel
- 所有已實現的接口:
- Closeable, Channel, InterruptibleChannel
public abstract class ServerSocketChannelextends AbstractSelectableChannel
針對面向流的偵聽套接字的可選擇通道。
服務器套接字通道不是偵聽網絡套接字的完整抽象。必須通過調用 socket 方法所獲得的關聯 ServerSocket 對象來完成對套接字選項的綁定和操作。不可能為任意的已有服務器套接字創建通道,也不可能指定與服務器套接字通道關聯的服務器套接字所使用的 SocketImpl 對象。
通過調用此類的 open 方法創建服務器套接字通道。新創建的服務器套接字通道已打開,但尚未綁定。試圖調用未綁定的服務器套接字通道的 accept 方法會導致拋出 NotYetBoundException。可通過調用相關服務器套接字的某個 bind 方法來綁定服務器套接字通道。
多個並發線程可安全地使用服務器套接字通道。
- 從以下版本開始:
- 1.4
| 構造方法摘要 | |
|---|---|
protected |
ServerSocketChannel(SelectorProvider provider) 初始化此類的一個新實例。 |
| 方法摘要 | |
|---|---|
abstract SocketChannel |
accept() 接受到此通道套接字的連接。 |
static ServerSocketChannel |
open() 打開服務器套接字通道。 |
abstract ServerSocket |
socket() 獲取與此通道關聯的服務器套接字。 |
int |
validOps() 返回一個操作集,標識此通道所支持的操作。 |
| 從類 java.nio.channels.spi.AbstractSelectableChannel 繼承的方法 |
|---|
blockingLock, configureBlocking, implCloseChannel, implCloseSelectableChannel, implConfigureBlocking, isBlocking, isRegistered, keyFor, provider, register |
| 從類 java.nio.channels.SelectableChannel 繼承的方法 |
|---|
register |
| 從類 java.nio.channels.spi.AbstractInterruptibleChannel 繼承的方法 |
|---|
begin, close, end, isOpen |
| 從類 java.lang.Object 繼承的方法 |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| 從接口 java.nio.channels.Channel 繼承的方法 |
|---|
close, isOpen |
| 構造方法詳細信息 |
|---|
ServerSocketChannel
protected ServerSocketChannel(SelectorProvider provider)
- 初始化此類的一個新實例。
| 方法詳細信息 |
|---|
open
public static ServerSocketChannel open()
throws IOException
-
打開服務器套接字通道。
通過調用系統級默認 SelectorProvider 對象的 openServerSocketChannel 方法來創建新的通道。
新通道的套接字最初是未綁定的;可以接受連接之前,必須通過它的某個套接字的 bind 方法將其綁定到具體的地址。
-
- 返回:
- 新的套接字通道
- 拋出:
-
IOException- 如果發生 I/O 錯誤
validOps
public final int validOps()
-
返回一個操作集,標識此通道所支持的操作。
服務器套接字通道僅支持接受新的連接,所以此方法返回 SelectionKey.OP_ACCEPT。
-
- 指定者:
-
類
SelectableChannel中的validOps
-
- 返回:
- 有效操作集
socket
public abstract ServerSocket socket()
-
獲取與此通道關聯的服務器套接字。
返回的對象不會聲明任何在 ServerSocket 類中未聲明的公共方法。
-
- 返回:
- 與此通道關聯的服務器套接字
accept
public abstract SocketChannel accept()
throws IOException
-
接受到此通道套接字的連接。
如果此通道處於非阻塞模式,那么在不存在掛起的連接時,此方法將直接返回 null。否則,在新的連接可用或者發生 I/O 錯誤之前會無限期地阻塞它。
不管此通道的阻塞模式如何,此方法返回的套接字通道(如果有)將處於阻塞模式。
此方法執行的安全檢查與 ServerSocket 類的 accept 方法執行的安全檢查完全相同。也就是說,如果已安裝了安全管理器,則對於每個新的連接,此方法都會驗證安全管理器的 checkAccept 方法是否允許使用該連接的遠程端點的地址和端口號。
-
- 返回:
- 用於新連接的套接字通道,或者如果此通道處於非阻塞模式並且沒有要接受的可用連接,則返回 null
- 拋出:
-
ClosedChannelException- 如果此通道已關閉 -
AsynchronousCloseException- 如果正在進行接受操作時另一個線程關閉了此通道 -
ClosedByInterruptException- 如果正在進行接受操作時另一個線程中斷了當前線程,因此關閉了該通道並將當前線程的狀態設置為中斷 -
NotYetBoundException- 如果尚未綁定此通道的套接字 -
SecurityException- 如果已安裝安全管理器並且它不允許對新連接的遠程端點進行訪問 -
IOException- 如果發生其他 I/O 錯誤
