我正在尝试在我的网络上找到我的Roku TV,显然它需要一些基于 Roku API 帮助的 SSDP 发现,但是,我无法使用任何 Nuget 库搜索我的设备。
我遇到了ssdpradar,并且能够通过Visual Studio 2017社区版本安装Visual Studio(VB.NET(的Nuget包。但是,我找不到有关如何使用它的任何文档。
任何建议都会有所帮助。
溶液:
我找到了一个解决方案,但不要使用ssdpradar,而是使用RSSDP。在项目中添加金块后,您可以使用以下代码行获取所有设备,然后从该列表中找到Roku位置(ip+端口(。
Imports Rssdp
For Each founddevice As DiscoveredSsdpDevice In founddevices.Result
If founddevice.Usn.Contains("roku:ecp") Then
Rokulocation = founddevice.DescriptionLocation.ToString()
Exit For
End If
Next
我最近能够成功地使用一个名为RokuDotNet的库。它是用 C# 编写的,但你可以将其作为项目加载到解决方案中,并从 VB.NET 引用它。
这大致是我使用它的方式:
Imports RokuDotNet.Client
Public Class Form1
Private _discoveryClient As RokuDeviceDiscoveryClient
Public Sub New()
_discoveryClient = New RokuDeviceDiscoveryClient
AddHandler _discoveryClient.DeviceDiscovered, AddressOf DiscoveryHandler
End Sub
Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown
_discoveryClient.DiscoverDevicesAsync()
End Sub
Private Async Sub DiscoveryHandler(sender As Object, e As DeviceDiscoveredEventArgs)
If InvokeRequired Then
BeginInvoke(New Action(Sub() DiscoveryHandler(sender, e)))
Return
End If
' Get the display name for the device (if the user entered one when setting it up)
Dim deviceInfo = Await e.Device.Query.GetDeviceInfoAsync
Dim name = deviceInfo.UserDeviceName
If String.IsNullOrEmpty(name) Then
name = deviceInfo.ModelName
End If
AddDevice(e.Device, name)
End Sub
Private Sub AddDevice(device As RokuDevice, name As String)
' Your code here
End Sub
End Class
您可能希望在该异步函数中的 await 周围添加一个 try/catch,以便在出现网络问题时显示错误。