SocketChannel 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
一個可選擇的通道,用於串流導向連接插座。
[Android.Runtime.Register("java/nio/channels/SocketChannel", DoNotGenerateAcw=true)]
public abstract class SocketChannel : Java.Nio.Channels.Spi.AbstractSelectableChannel, IDisposable, 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”><>/thjava.net.StandardSocketOptions#SO_RCVBUF SO_RCVBUF<td> socket 接收緩衝區<大小 /td></tr><tr><scope = “row”><>/thjava.net.StandardSocketOptions#SO_KEEPALIVE SO_KEEPALIVE<td> 保持連線存活 </td></tr><tr><th scope =“row”><>/thjava.net.StandardSocketOptions#SO_REUSEADDR SO_REUSEADDR<td> 重用位址 </td></tr><tr th><scope =“row”/th><>java.net.StandardSocketOptions#SO_LINGER SO_LINGER<td> 若有資料存在(僅<在區塊模式下設定)則在關閉時停留 /td></tr><tr><th scope =“row”/><>thjava.net.StandardSocketOptions#TCP_NODELAY TCP_NODELAY<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 |
取得由互通執行時指派給此 Java 對等端的身份雜湊碼。 (繼承來源 Object) |
| JniManagedPeerState |
一個可選擇的通道,用於串流導向連接插座。 (繼承來源 JavaObject) |
| JniPeerMembers |
一個可選擇的通道,用於串流導向連接插座。 |
| LocalAddress |
回傳該通道的套接字綁定的套接字位址,或 |
| PeerReference |
取得這個 Java 節點的 JNI 物件參考。 (繼承來源 Object) |
| RemoteAddress |
回傳該通道套接字所連接的遠端位址,或 |
| ThresholdClass |
此 API 支援 Mono for Android 基礎架構,並非直接從你的程式碼中使用。 |
| ThresholdType |
此 API 支援 Mono for Android 基礎架構,並非直接從你的程式碼中使用。 |
方法
明確介面實作
| 名稱 | Description |
|---|---|
| IJavaPeerable.Disposed() |
一個可選擇的通道,用於串流導向連接插座。 (繼承來源 JavaObject) |
| IJavaPeerable.Finalized() |
一個可選擇的通道,用於串流導向連接插座。 (繼承來源 JavaObject) |
| IJavaPeerable.JniObjectReferenceControlBlock |
一個可選擇的通道,用於串流導向連接插座。 (繼承來源 JavaObject) |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
一個可選擇的通道,用於串流導向連接插座。 (繼承來源 JavaObject) |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
一個可選擇的通道,用於串流導向連接插座。 (繼承來源 JavaObject) |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
一個可選擇的通道,用於串流導向連接插座。 (繼承來源 JavaObject) |
| IJavaPeerable.UnregisterFromRuntime() |
一個可選擇的通道,用於串流導向連接插座。 |
擴充方法
| 名稱 | 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) |
一個可選擇的通道,用於串流導向連接插座。 |