DatagramSocket 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
public ref class DatagramSocket sealed : IClosable
/// [Windows.Foundation.Metadata.Activatable(65536, Windows.Foundation.UniversalApiContract)]
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class DatagramSocket final : IClosable
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
/// [Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
class DatagramSocket final : IClosable
[Windows.Foundation.Metadata.Activatable(65536, typeof(Windows.Foundation.UniversalApiContract))]
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class DatagramSocket : System.IDisposable
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
[Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
public sealed class DatagramSocket : System.IDisposable
function DatagramSocket()
Public NotInheritable Class DatagramSocket
Implements IDisposable
- 繼承
- 屬性
- 實作
Windows 需求
| 規格需求 | Description |
|---|---|
| 裝置系列 |
Windows 10 (已於 10.0.10240.0 引進)
|
| API contract |
Windows.Foundation.UniversalApiContract (已於 v1.0 引進)
|
| 應用程式功能 |
internetClient
privateNetworkClientServer
|
備註
DatagramSocket 類別支援使用 UDP 資料報套接字進行網路通訊。 DatagramSocket 物件可用於傳送 UDP 封包的用戶端應用程式,或監聽 UDP 資料的伺服器應用程式。
使用 DatagramSocket 物件傳送或接收資料需要多個步驟。 你的應用程式會先將 MessageReceived 事件指派給事件處理器。 要監聽來自遠端端點(例如伺服器場景)的封包,應用程式會呼叫 BindEndpointAsync 或 BindServiceNameAsync 方法,將 DatagramSocket 綁定到本地服務名稱或 UDP 埠口。 然而,當你的應用程式需要與單一遠端端點通訊(例如用戶端情境)時,應用程式會呼叫 ConnectAsync 方法。 MessageReceived 事件處理器必須在任何綁定或連接操作前設定,否則會發生錯誤。
典型的操作順序如下:
- 建立 DatagramSocket。
- 使用 Control 屬性來取得 DatagramSocketControl 物件並設定進階控制項。 大多數應用程式通常不需要這個步驟。
- 將 MessageReceived 事件指派給事件處理器。
- 若要監聽來自任何遠端端點(例如伺服器情境)的封包,請呼叫 BindEndpointAsync 或 BindServiceNameAsync 方法,將 DatagramSocket 綁定到本地服務名稱或 UDP 埠。
- 若要與單一遠端端點(例如用戶端情境)通訊,請呼叫 ConnectAsync 方法將 DatagramSocket 綁定至特定的遠端端點。
- 每當遠端端的訊息抵達時,都會呼叫 MessageReceived 事件處理程序。 此類別也可用於加入多播群組,並將 UDP 封包傳送至該群組。 欲了解更多資訊,請參閱 JoinMulticastGroup 方法。
處理例外狀況
當你呼叫 DatagramSocket 類別的非同步方法時,必須寫程式碼來處理例外。 例外可能因參數驗證錯誤、名稱解析失敗及網路錯誤而產生。 網路錯誤的例外(例如連線中斷、連線失敗及伺服器故障)隨時可能發生。 這些錯誤會導致拋出例外。 如果應用程式無法處理,例外可能會導致整個應用程式在執行時被終止。
Windows。Networking.Sockets 命名空間有方便的輔助方法和列舉方式,用於處理使用套接字時的錯誤。 這對於在應用程式中處理特定網路例外的方式很有幫助。 應用程式也可以利用例外中對參數驗證錯誤的 HRESULT 來學習導致異常的更詳細資訊。
欲了解更多可能例外及如何處理例外的資訊,請參閱 「網路應用程式中的例外處理」。
使用 DatagramSocket 搭配 Wi-Fi Direct
你的應用程式可以用 DatagramSocket 來在使用 Wi-Fi Direct 的裝置間透過 Windows 中的類別進行網路資料傳輸。Devices.WiFiDirect 命名空間。 WiFiDirectDevice 類別可用來定位具備 Wi-Fi Direct(WFD)裝置的其他裝置。 WiFiDirectDevice.GetDeviceSelector 方法會取得附近 WFD 裝置的裝置識別碼。 一旦你有附近 WFD 裝置的參考,就可以呼叫 WiFiDirectDevice.GetConnectionEndpointPairs 方法來取得 EndpointPair 物件。 DatagramSocket 類別上的方法可以用來傳送和接收資料給 EndpointPair 物件。 欲了解更多資訊,請參閱 Windows。裝置。WiFiDirect 和 WiFiDirectDevice。
在 Windows Server 2012 上使用 DatagramSocket
在 Windows Server 2012 和 Windows Server 2012 R2,這是實作大部分 Windows 類別的 Windows.Networking.dll。Networking.Sockets 命名空間若未啟用 Media Foundation 功能,將無法載入。 因此,使用 DatagramSocket 及相關 socket 類別的應用程式在 Windows 中,如果關閉 Media Foundation 功能,Networking.Sockets 命名空間將會失敗。 Windows Server 2012 或 Windows Server 2012 R2 安裝時,關閉了媒體基礎功能。
媒體基礎功能可在 Windows Server 2012 或 Windows Server 2012 R2 上啟用,使用 伺服器管理員,或透過命令提示字元或腳本輸入以下文字:
dism /online /enable-feature /featurename:ServerMediaFoundation 啟用 Media Foundation 功能後,使用者會被提示重新啟動。 電腦重新啟動後,Windows 中會建立 sockets 和 WebSockets 的類別。Networking.sockets 命名空間會如預期運作。
使用 DatagramSocket 解析 DNS 服務記錄
應用程式可以與屬於 SRV 紀錄的目標 DNS 位址通訊。
例如,在 Contoso 領域中,透過網路位址轉換(NAT)(STUN)服務對應 UDP 的簡單遍歷。_stun._udp.contoso.com
該服務名稱對應伺服器 DNS 名稱,例如 stunServer01.contoso.com。
若要連接該服務伺服器的 DNS 位址,請在 DatagramSocket 實例上使用以下方法呼叫:
using Windows.Networking.Sockets;
DatagramSocket socket = new DatagramSocket();
socket.ConnectAsync(new HostName("contoso.com"), "stun");
該協定被推斷為 DatagramSocket 實例的 UDP。 此方法處理底線字元。
DNS 可以設定為具有 SRV 階層結構。
DNS SRV 資源記錄可以呈現以下形式: _stun._service01._udp.contoso.com。
在此範例中,請對 DatagramSocket 實例使用以下方法呼叫:
socket.ConnectAsync(new HostName("contoso.com"), "stun._service01");
這些程式碼片段使用 ConnectAsync。 GetOutputStreamAsync 和 GetEndpointPairsAsync 方法支援類似的連接服務方式。
建構函式
| 名稱 | Description |
|---|---|
| DatagramSocket() |
建立一個新的 DatagramSocket 物件。 |
屬性
| 名稱 | Description |
|---|---|
| Control |
取得 DatagramSocket 物件上的 socket 控制資料。 |
| Information |
取得 DatagramSocket 物件的本地與遠端主機名稱,以及本地與遠端服務名稱的套接字資訊。 |
| OutputStream |
取得輸出串流以寫入遠端主機。 |
方法
事件
| 名稱 | Description |
|---|---|
| MessageReceived |
一個表示已收到訊息的事件,該物件在 DatagramSocket 物件上。 |