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 需求
裝置系列 |
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 事件指派給事件處理常式。 若要接聽來自遠端端點的傳入封包 (伺服器案例,例如) ,您的應用程式會呼叫 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 在 Windows.Devices.WiFiDirect 命名空間中使用類別,在使用 Wi-Fi Direct 的裝置之間進行網路資料傳輸。 WiFiDirectDevice類別可用來尋找具有 Wi-Fi Direct (WFD) 裝置的其他裝置。 WiFiDirectDevice.GetDeviceSelector方法會取得鄰近 WFD 裝置的裝置識別碼。 取得鄰近 WFD 裝置的參考之後,您可以呼叫 WiFiDirectDevice.GetConnectionEndpointPairs 方法來取得 EndpointPair 物件。 DatagramSocket 類別上的方法可用來將資料傳送和接收至 EndpointPair 物件。 如需詳細資訊,請參閱 Windows.Devices.WiFiDirect 和 WiFiDirectDevice。
在 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");
這些程式碼片段使用 ConnectAsync。 GetOutputStreamAsync和GetEndpointPairsAsync方法支援與服務連線的類似用法。
建構函式
DatagramSocket() |
建立新的 DatagramSocket 物件。 |
屬性
Control |
取得 DatagramSocket 物件上的通訊端控制項資料。 |
Information |
取得 DatagramSocket 物件的本機和遠端主機名和本機和遠端服務名稱的通訊端資訊。 |
OutputStream |
取得要寫入遠端主機的輸出資料流程。 |
方法
事件
MessageReceived |
事件,指出 在 DatagramSocket 物件上收到訊息。 |