DatagramSocket 類別

定義

支援使用 UDP 資料包通訊端的網路通訊。

如需程式碼範例,請參閱 通訊端

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 需求

裝置系列
Windows 10 (已於 10.0.10240.0 引進)
API contract
Windows.Foundation.UniversalApiContract (已於 v1.0 引進)
應用程式功能
ID_CAP_NETWORKING [Windows Phone] internetClient privateNetworkClientServer

備註

DatagramSocket 類別支援使用 UDP 資料包通訊端的網路通訊。 DatagramSocket 物件可用於傳送 UDP 封包的用戶端應用程式,或接聽傳入 UDP 資料的伺服器應用程式。

使用 DatagramSocket 物件傳送或接收資料需要數個步驟。 您的應用程式會先將 MessageReceived 事件指派給事件處理常式。 若要接聽來自遠端端點的傳入封包 (伺服器案例,例如) ,您的應用程式會呼叫 BindEndpointAsyncBindServiceNameAsync 方法,將 DatagramSocket 系結至本機服務名稱或 UDP 埠。 不過,當您的應用程式需要與單一遠端端點通訊 (用戶端案例時,例如) ,您的應用程式會呼叫 ConnectAsync 方法。 MessageReceived事件處理常式必須在任何系結或連接作業之前設定,否則會發生錯誤。

作業的一般順序如下:

  1. 建立 DatagramSocket。
  2. 使用 Control 屬性擷取 DatagramSocketControl 物件,並設定任何進階控制項。 大部分應用程式通常不需要此步驟。
  3. MessageReceived 事件指派給事件處理常式。
  4. 若要接聽來自任何遠端端點 (伺服器案例的傳入封包,例如) ,請呼叫 BindEndpointAsyncBindServiceNameAsync 方法,將 DatagramSocket 系結至本機服務名稱或 UDP 埠。
  5. 若要與單一遠端端點通訊 (用戶端案例,例如) ,請呼叫 ConnectAsync 方法,將 DatagramSocket 系結至特定的遠端端點。
  6. 每當來自遠端端點的訊息送達時,就會叫用 MessageReceived 事件處理常式。 這個類別也可以用來聯結多播群組,並將 UDP 封包傳送至多播群組。 如需詳細資訊,請參閱 JoinMulticastGroup 方法。

處理例外狀況

當您在 DatagramSocket 類別上呼叫非同步方法時,必須撰寫程式碼來處理例外狀況。 例外狀況可能是因為參數驗證錯誤、名稱解析失敗和網路錯誤所造成。 網路錯誤 (連線中斷、連線失敗和伺服器失敗的例外狀況,例如,隨時可能會發生) 。 這些錯誤會造成擲出例外狀況。 如果應用程式未處理,例外狀況可能會導致整個應用程式由執行時間終止。

Windows.Networking.Sockets命名空間具有方便的協助程式方法和列舉,可用來在使用通訊端時處理錯誤。 這對於在您的應用程式中以不同的方式處理特定網路例外狀況時很有用。 應用程式也可以使用來自參數驗證錯誤例外狀況的 HRESULT ,深入瞭解造成例外狀況之錯誤的詳細資訊。

如需可能例外狀況以及如何處理例外狀況的詳細資訊,請參閱 處理網路應用程式中的例外狀況

搭配使用 DatagramSocket 搭配 Wi-Fi Direct

您的應用程式可以使用 DatagramSocket 在 Windows.Devices.WiFiDirect 命名空間中使用類別,在使用 Wi-Fi Direct 的裝置之間進行網路資料傳輸。 WiFiDirectDevice類別可用來尋找具有 Wi-Fi Direct (WFD) 裝置的其他裝置。 WiFiDirectDevice.GetDeviceSelector方法會取得鄰近 WFD 裝置的裝置識別碼。 取得鄰近 WFD 裝置的參考之後,您可以呼叫 WiFiDirectDevice.GetConnectionEndpointPairs 方法來取得 EndpointPair 物件。 DatagramSocket 類別上的方法可用來將資料傳送和接收至 EndpointPair 物件。 如需詳細資訊,請參閱 Windows.Devices.WiFiDirectWiFiDirectDevice

在 Windows Server 2012 上使用 DatagramSocket

在 Windows Server 2012 和 Windows Server 2012 R2 上,除非啟用媒體基礎功能,否則實作Windows.Networking.Sockets命名空間中大部分類別的Windows.Networking.dll將無法載入。 因此,如果停用 Media Foundation 功能,則 Windows.Networking.Sockets 命名空間中使用 DatagramSocket 和相關通訊端類別的應用程式將會失敗。 Windows Server 2012 或 Windows Server 2012 R2 會安裝並停用 Media Foundation 功能。

媒體基礎功能可以在 Windows Server 2012 或 Windows Server 2012 R2 上使用 伺服器管理員,或在命令提示字元或腳本中輸入下列文字來啟用:

dism /online /enable-feature /featurename:ServerMediaFoundation 啟用媒體基礎功能之後,系統會提示使用者重新開機。 重新開機電腦之後, Windows.Networking.Sockets 命名空間中的通訊端和 WebSockets 類別會如預期般運作。

使用 DatagramSocket 解析 DNS 服務記錄

應用程式可以與屬於 SRV 記錄的目標 DNS 位址通訊。 例如,透過網路位址轉譯的簡單周遊 (NAT) (Contoso 網域中的 STUN) 服務對應至 _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");

這些程式碼片段使用 ConnectAsyncGetOutputStreamAsyncGetEndpointPairsAsync方法支援與服務連線的類似用法。

建構函式

DatagramSocket()

建立新的 DatagramSocket 物件。

屬性

Control

取得 DatagramSocket 物件上的通訊端控制項資料。

Information

取得 DatagramSocket 物件的本機和遠端主機名和本機和遠端服務名稱的通訊端資訊。

OutputStream

取得要寫入遠端主機的輸出資料流程。

方法

BindEndpointAsync(HostName, String)

DatagramSocket 上啟動系結作業至本機主機名稱和本機服務名稱。

BindServiceNameAsync(String)

DatagramSocket 上啟動系結作業至本機服務名稱。

BindServiceNameAsync(String, NetworkAdapter)

DatagramSocket 上啟動系結作業至本機服務名稱和特定網路介面。

CancelIOAsync()

取消 DatagramSocket 物件的暫止讀取和寫入。

Close()

關閉 DatagramSocket 物件,並中止 DatagramSocket上的任何擱置作業。

ConnectAsync(EndpointPair)

DatagramSocket 上啟動連線作業,以指定為 EndpointPair 物件的遠端網路目的地。

ConnectAsync(HostName, String)

啟動 DatagramSocket 上的連線作業至遠端主機名和遠端服務名稱所指定的遠端目的地。

Dispose()

執行與釋放 (Free)、釋放 (Release) 或重設 Unmanaged 資源相關聯之應用程式定義的工作。

EnableTransferOwnership(Guid)

當此 DatagramSocket 的流量在應用程式未使用時送達時,通訊端代理程式會觸發應用程式的背景工作。

EnableTransferOwnership(Guid, SocketActivityConnectedStandbyAction)

當此 DatagramSocket 的流量在系統處於連線待命狀態時,可讓通訊端代理程式觸發應用程式的背景工作。

GetEndpointPairsAsync(HostName, String)

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

GetEndpointPairsAsync(HostName, String, HostNameSortOptions)

根據遠端主機名和遠端服務名稱和要使用的排序次序,取得 EndpointPair 物件清單。

GetOutputStreamAsync(EndpointPair)

啟動作業,將 IOutputStream 取得 EndpointPair 物件所指定的遠端網路目的地,然後可用來傳送網路資料。

GetOutputStreamAsync(HostName, String)

啟動作業,將 IOutputStream 取得遠端主機名所指定的遠端目的地,以及可用來傳送網路資料的遠端服務名稱。

JoinMulticastGroup(HostName)

DatagramSocket 物件聯結至多播群組。

TransferOwnership(String)

DatagramSocket 的擁有權轉移至通訊端代理服務,這會監視通訊端活動,並在有任何活動時透過背景工作通知應用程式。

TransferOwnership(String, SocketActivityContext)

DatagramSocket 的擁有權轉移至通訊端代理服務,這會監視通訊端活動,並在有任何活動時透過背景工作通知應用程式。

TransferOwnership(String, SocketActivityContext, TimeSpan)

DatagramSocket 的擁有權轉移至通訊端代理服務,這會監視通訊端活動,並在有任何活動時透過背景工作通知應用程式。

事件

MessageReceived

事件,指出 在 DatagramSocket 物件上收到訊息。

適用於

另請參閱