SocketChannel 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
一個可選擇的通道,用於串流導向連接插座。
[Android.Runtime.Register("java/nio/channels/SocketChannel", DoNotGenerateAcw=true)]
public abstract class SocketChannel : Java.Nio.Channels.Spi.AbstractSelectableChannel, IDisposable, Java.Interop.IJavaPeerable, Java.Nio.Channels.IByteChannel, Java.Nio.Channels.IGatheringByteChannel, Java.Nio.Channels.IScatteringByteChannel
[<Android.Runtime.Register("java/nio/channels/SocketChannel", DoNotGenerateAcw=true)>]
type SocketChannel = class
inherit AbstractSelectableChannel
interface IByteChannel
interface IReadableByteChannel
interface IChannel
interface ICloseable
interface IJavaObject
interface IDisposable
interface IJavaPeerable
interface IWritableByteChannel
interface IGatheringByteChannel
interface IScatteringByteChannel
- 繼承
- 屬性
- 實作
備註
一個可選擇的通道,用於串流導向連接插座。
套接字通道是透過呼叫 #open open 此類別的方法之一來建立的。 無法為任意的既存套接字建立通道。 新建立的插槽通道已開啟,但尚未連接。 嘗試對未連接的通道呼叫 I/O 操作會導致拋出 A NotYetConnectedException 。 套接字通道可以透過呼叫其 #connect connect 方法來連接;一旦連接,套接字通道會保持連接直到關閉。 是否連接套接字通道可透過呼叫其 #isConnected isConnected 方法來判斷。
套接字通道支援 非阻塞連線: 可以建立一個套接字通道,並透過該 #connect connect 方法啟動建立與遠端套接字的連結流程,之後再由該 #finishConnect finishConnect 方法完成。 是否正在進行連線操作,可透過呼叫 #isConnectionPending isConnectionPending 該方法來判斷。
套接字通道支援 非同步關機, 這與類別 Channel 中指定的非同步閉合操作相似。 如果一個套接字的輸入端被一個執行緒關閉,而另一個執行緒在該套接字通道的讀取操作中被阻塞,那麼被阻塞的執行緒的讀取操作將不會讀取任何位元組,並會回傳 -1。 如果一個執行緒在該執行緒通道寫入操作中阻擋另一個執行緒時,該執行緒的輸出端會被關閉,則該阻塞的執行緒會收到一個 AsynchronousCloseException。
套接字選項是透過此 #setOption(SocketOption,Object) setOption 方法進行配置的。 socket 通道支援以下選項:<blockquote><table class=“striped”caption>< style=“display:none”>socket options</caption thead<>><tr<>th scope=“col”>Option Name</th><th scope =“col”>Description</th></thead<<>> tbody><tr><scope = “row”<java.net.StandardSocketOptions#SO_SNDBUF SO_SNDBUF>/th<>td> socket send buffer <大小 /td/tr<>tr<>th scope=“row”>java.net.StandardSocketOptions#SO_RCVBUF SO_RCVBUF</th<>td> socket 接收緩衝區<大小 /td></tr<>tr><scope = “row”<java.net.StandardSocketOptions#SO_KEEPALIVE SO_KEEPALIVE>/th><td> 保持連線存活 </td></tr><tr<>th scope =“row”java.net.StandardSocketOptions#SO_REUSEADDR SO_REUSEADDR<>/th><td> 重用位址 </td<>/tr<>tr th><scope =“row”/th><java.net.StandardSocketOptions#SO_LINGER SO_LINGER><td> 若有資料存在(僅<在區塊模式下設定)則在關閉時停留 /td></tr><tr<>th scope =“row”/<>java.net.StandardSocketOptions#TCP_NODELAY TCP_NODELAYth><td> 停用 Nagle 演算法 </td<>/tr<>/tbody<>/table<>/blockquote> 也可能支援額外的(實作專用)選項。><
套接字通道對多個並行執行緒是安全的。 它們支援同時閱讀與寫入,但同時最多只有一個執行緒在閱讀,最多只有一個執行緒在寫入。
#connect connect與 #finishConnect finishConnect 方法彼此同步,嘗試在呼叫過程中啟動讀寫操作時,會阻塞直到該呼叫完成。
在 1.4 版本加入。
Java 文件 java.nio.channels.SocketChannel。
本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。
建構函式
| 名稱 | Description |
|---|---|
| SocketChannel(IntPtr, JniHandleOwnership) |
用於建立 JNI 物件受管理表示的建構器;由執行時呼叫。 |
| SocketChannel(SelectorProvider) |
初始化此類別的新實例。 |
屬性
| 名稱 | Description |
|---|---|
| Class |
回傳此 |
| Handle |
底層 Android 實例的帳號。 (繼承來源 Object) |
| IsBlocking |
顯示該頻道是否處於阻塞模式。 (繼承來源 AbstractSelectableChannel) |
| IsConnected |
顯示此通道的插座是否已連接。 |
| IsConnectionPending |
顯示該頻道的插座是否仍在嘗試連接。 |
| IsOpen |
如果此通道開啟,則回傳為真。 (繼承來源 AbstractInterruptibleChannel) |
| IsRegistered |
顯示該頻道是否註冊於一個或多個選擇器。 (繼承來源 AbstractSelectableChannel) |
| JniIdentityHashCode |
一個可選擇的通道,用於串流導向連接插座。 (繼承來源 Object) |
| JniPeerMembers |
一個可選擇的通道,用於串流導向連接插座。 |
| LocalAddress |
一個可選擇的通道,用於串流導向連接插座。 |
| PeerReference |
一個可選擇的通道,用於串流導向連接插座。 (繼承來源 Object) |
| RemoteAddress |
一個可選擇的通道,用於串流導向連接插座。 |
| ThresholdClass |
此 API 支援 Mono for Android 基礎架構,並非直接從你的程式碼中使用。 |
| ThresholdType |
此 API 支援 Mono for Android 基礎架構,並非直接從你的程式碼中使用。 |
方法
| 名稱 | Description |
|---|---|
| Begin() |
這標誌著一個可能無限期阻塞的 I/O 操作開始。 (繼承來源 AbstractInterruptibleChannel) |
| Bind(SocketAddress) |
新增 1. |
| BlockingLock() |
取得用於同步 |
| Clone() |
建立並回傳此物件的副本。 (繼承來源 Object) |
| Close() |
關閉這個頻道。 (繼承來源 AbstractInterruptibleChannel) |
| ConfigureBlocking(Boolean) |
調整此頻道的阻擋模式。 (繼承來源 AbstractSelectableChannel) |
| Connect(SocketAddress) |
連接這個頻道的插座。 |
| ConnectAsync(SocketAddress) |
一個可選擇的通道,用於串流導向連接插座。 |
| Dispose() |
一個可選擇的通道,用於串流導向連接插座。 (繼承來源 Object) |
| Dispose(Boolean) |
一個可選擇的通道,用於串流導向連接插座。 (繼承來源 Object) |
| End(Boolean) |
這表示一個可能無限期阻塞的 I/O 操作結束。 (繼承來源 AbstractInterruptibleChannel) |
| Equals(Object) |
表示是否有其他物體「等同」於此物。 (繼承來源 Object) |
| FinishConnect() |
完成連接套接字通道的過程。 |
| FinishConnectAsync() |
一個可選擇的通道,用於串流導向連接插座。 |
| GetHashCode() |
回傳物件的雜湊碼值。 (繼承來源 Object) |
| ImplCloseChannel() |
關閉這個頻道。 (繼承來源 AbstractSelectableChannel) |
| ImplCloseSelectableChannel() |
關閉這個可選頻道。 (繼承來源 AbstractSelectableChannel) |
| ImplConfigureBlocking(Boolean) |
調整此頻道的阻擋模式。 (繼承來源 AbstractSelectableChannel) |
| JavaFinalize() |
當垃圾回收判定該物件不再有相關參考時,由垃圾回收器呼叫。 (繼承來源 Object) |
| KeyFor(Selector) |
取得該頻道指定選擇器的選擇鍵。 (繼承來源 AbstractSelectableChannel) |
| Notify() |
喚醒一個正在該物件監視器上等待的執行緒。 (繼承來源 Object) |
| NotifyAll() |
喚醒所有等待該物件監視器的執行緒。 (繼承來源 Object) |
| Open() |
打開一個插槽通道。 |
| Open(SocketAddress) |
開啟一個套接字通道並將其連接到遠端位址。 |
| Provider() |
回傳創建此通道的提供者。 (繼承來源 AbstractSelectableChannel) |
| Read(ByteBuffer) |
從此套接字通道讀取位元組到指定的緩衝區。 |
| Read(ByteBuffer[], Int32, Int32) |
從此套接字通道讀取位元組到給定緩衝區的子集。 |
| Read(ByteBuffer[]) |
從此套接字通道讀取位元組,並將其儲存在指定的緩衝區陣列中。 |
| Register(Selector, Operations, Object) |
將此通道註冊給指定的選擇器,並回傳一個選擇鍵。 (繼承來源 AbstractSelectableChannel) |
| Register(Selector, Operations) |
將此通道註冊給指定的選擇器,並回傳一個選擇鍵。 (繼承來源 SelectableChannel) |
| SetHandle(IntPtr, JniHandleOwnership) |
設定 Handle 屬性。 (繼承來源 Object) |
| SetOption(ISocketOption, Object) |
新增 1. |
| ShutdownInput() |
在不關閉頻道的情況下關閉連線以便讀取。 |
| ShutdownOutput() |
在不關閉通道的情況下關閉連線進行寫入。 |
| Socket() |
擷取與此通道相關的套接字。 |
| ToArray<T>() |
一個可選擇的通道,用於串流導向連接插座。 (繼承來源 Object) |
| ToString() |
回傳物件的字串表示。 (繼承來源 Object) |
| UnregisterFromRuntime() |
一個可選擇的通道,用於串流導向連接插座。 (繼承來源 Object) |
| ValidOps() |
回傳一個操作集,識別該通道所支援的操作。 |
| Wait() |
導致目前執行緒等待被喚醒,通常是透過 <em>通知</><em 或 em>中斷</em> 來喚醒。 (繼承來源 Object) |
| Wait(Int64, Int32) |
會讓目前執行緒等待喚醒,通常是透過 <em>通知</><em 或 em>中斷</em>,或是經過一定的真實時間。 (繼承來源 Object) |
| Wait(Int64) |
會讓目前執行緒等待喚醒,通常是透過 <em>通知</><em 或 em>中斷</em>,或是經過一定的真實時間。 (繼承來源 Object) |
| Write(ByteBuffer) |
從給定的位元組緩衝區寫入位元組到此套接字通道。 |
| Write(ByteBuffer[], Int32, Int32) |
嘗試將緩衝區中給定的部分位元組寫入此套接字通道。 |
| Write(ByteBuffer[]) |
將所有給定位元組緩衝區的位元組寫入此套接字通道。 |
明確介面實作
| 名稱 | Description |
|---|---|
| IJavaPeerable.Disposed() |
一個可選擇的通道,用於串流導向連接插座。 (繼承來源 Object) |
| IJavaPeerable.DisposeUnlessReferenced() |
一個可選擇的通道,用於串流導向連接插座。 (繼承來源 Object) |
| IJavaPeerable.Finalized() |
一個可選擇的通道,用於串流導向連接插座。 (繼承來源 Object) |
| IJavaPeerable.JniManagedPeerState |
一個可選擇的通道,用於串流導向連接插座。 (繼承來源 Object) |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
一個可選擇的通道,用於串流導向連接插座。 (繼承來源 Object) |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
一個可選擇的通道,用於串流導向連接插座。 (繼承來源 Object) |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
一個可選擇的通道,用於串流導向連接插座。 (繼承來源 Object) |
擴充方法
| 名稱 | Description |
|---|---|
| GetJniTypeName(IJavaPeerable) |
取得實例 |
| JavaAs<TResult>(IJavaPeerable) |
試著強制 |
| JavaCast<TResult>(IJavaObject) |
執行 Android 執行時檢查型別轉換。 |
| JavaCast<TResult>(IJavaObject) |
一個可選擇的通道,用於串流導向連接插座。 |
| ReadAsync(IReadableByteChannel, ByteBuffer) |
一個可選擇的通道,用於串流導向連接插座。 |
| ReadAsync(IScatteringByteChannel, ByteBuffer[], Int32, Int32) |
一個可選擇的通道,用於串流導向連接插座。 |
| ReadAsync(IScatteringByteChannel, ByteBuffer[]) |
一個可選擇的通道,用於串流導向連接插座。 |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
試著強制 |
| WriteAsync(IGatheringByteChannel, ByteBuffer[], Int32, Int32) |
一個可選擇的通道,用於串流導向連接插座。 |
| WriteAsync(IGatheringByteChannel, ByteBuffer[]) |
一個可選擇的通道,用於串流導向連接插座。 |
| WriteAsync(IWritableByteChannel, ByteBuffer) |
一個可選擇的通道,用於串流導向連接插座。 |