語言

DatagramSocket 類別

定義

支援使用 UDP 資料報套接字進行網路通訊。

關於程式碼範例,請參見 Sockets。

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
繼承
Object Platform::Object IInspectable DatagramSocket
屬性
實作

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 事件處理器必須在任何綁定或連接操作前設定,否則會發生錯誤。

典型的操作順序如下:

  1. 建立 DatagramSocket。
  2. 使用 Control 屬性來取得 DatagramSocketControl 物件並設定進階控制項。 大多數應用程式通常不需要這個步驟。
  3. 將 MessageReceived 事件指派給事件處理器。
  4. 若要監聽來自任何遠端端點(例如伺服器情境)的封包,請呼叫 BindEndpointAsync 或 BindServiceNameAsync 方法,將 DatagramSocket 綁定到本地服務名稱或 UDP 埠。
  5. 若要與單一遠端端點(例如用戶端情境)通訊,請呼叫 ConnectAsync 方法將 DatagramSocket 綁定至特定的遠端端點。
  6. 每當遠端端的訊息抵達時,都會呼叫 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
BindEndpointAsync(HostName, String)

啟動 DatagramSocket 的綁定操作,連接本地主機名稱與服務名稱。

BindServiceNameAsync(String, NetworkAdapter)

啟動綁定操作,將 資料報套接 點與本地服務名稱及特定網路介面綁定。

BindServiceNameAsync(String)

啟動 DatagramSocket 的綁定操作到本地服務名稱。

CancelIOAsync()

取消對 DatagramSocket 物件的待處理讀取與寫入。

Close()

關閉 DatagramSocket 物件並中止 DatagramSocket 上任何待處理的操作。

ConnectAsync(EndpointPair)

在 DatagramSocket 上啟動連接操作,連接到指定為 EndpointPair 物件的遠端網路目的地。

ConnectAsync(HostName, String)

在資料 報套接 字上啟動連接操作,連接到由遠端主機名稱與遠端服務名稱指定的遠端目的地。

Dispose()

執行與釋放、釋放或重設非受控資源相關聯的應用程式定義工作。

EnableTransferOwnership(Guid, SocketActivityConnectedStandbyAction)

當系統處於連線待機狀態時,當該 DatagramSocket 的流量抵達時,能由套接程式代理觸發你的應用程式背景任務。

EnableTransferOwnership(Guid)

當 DatagramSocket 的流量抵達時,應用程式未啟用時,能由套接程式代理觸發你的應用程式背景任務。

GetEndpointPairsAsync(HostName, String, HostNameSortOptions)

根據遠端主機名稱、遠端服務名稱及排序順序,取得 EndpointPair 物件清單。

GetEndpointPairsAsync(HostName, String)

根據遠端主機名稱與遠端服務名稱,取得 EndpointPair 物件清單,可用於將資料報傳送至遠端網路目的地。

GetOutputStreamAsync(EndpointPair)

啟動操作,將 IOutputStream 傳送至 EndpointPair 物件指定的遠端網路目的地,該物件可用來傳送網路資料。

GetOutputStreamAsync(HostName, String)

啟動操作,將 IOutputStream 傳送到由遠端主機名稱及遠端服務名稱指定的遠端目的地,進而可用來傳送網路資料。

JoinMulticastGroup(HostName)

將 DatagramSocket 物件連接到多播群組。

TransferOwnership(String, SocketActivityContext, TimeSpan)

將 DatagramSocket 的所有權轉移給 socket 經紀服務,該服務監控 socket 活動,並在有活動時透過背景任務通知應用程式。

TransferOwnership(String, SocketActivityContext)

將 DatagramSocket 的所有權轉移給 socket 經紀服務,該服務監控 socket 活動,並在有活動時透過背景任務通知應用程式。

TransferOwnership(String)

將 DatagramSocket 的所有權轉移給 socket 經紀服務,該服務監控 socket 活動,並在有活動時透過背景任務通知應用程式。

事件

名稱 Description
MessageReceived

一個表示已收到訊息的事件,該物件在 DatagramSocket 物件上。

適用於

另請參閱