SocketChannel 類別

定義

一個可選擇的通道,用於串流導向連接插座。

[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

回傳此 Object的執行時類別。

(繼承來源 Object)
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()

取得用於同步 registerconfigureBlocking的物件。

(繼承來源 AbstractSelectableChannel)
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)

取得實例 self類型的 JNI 名稱。

JavaAs<TResult>(IJavaPeerable)

試著強制self輸入 TResult,檢查 強制在 Java 端是否有效。

JavaCast<TResult>(IJavaObject)

執行 Android 執行時檢查型別轉換。

JavaCast<TResult>(IJavaObject)

一個可選擇的通道,用於串流導向連接插座。

ReadAsync(IReadableByteChannel, ByteBuffer)

一個可選擇的通道,用於串流導向連接插座。

ReadAsync(IScatteringByteChannel, ByteBuffer[], Int32, Int32)

一個可選擇的通道,用於串流導向連接插座。

ReadAsync(IScatteringByteChannel, ByteBuffer[])

一個可選擇的通道,用於串流導向連接插座。

TryJavaCast<TResult>(IJavaPeerable, TResult)

試著強制self輸入 TResult,檢查 強制在 Java 端是否有效。

WriteAsync(IGatheringByteChannel, ByteBuffer[], Int32, Int32)

一個可選擇的通道,用於串流導向連接插座。

WriteAsync(IGatheringByteChannel, ByteBuffer[])

一個可選擇的通道,用於串流導向連接插座。

WriteAsync(IWritableByteChannel, ByteBuffer)

一個可選擇的通道,用於串流導向連接插座。

適用於