Как найти Roku IP + порт в сети, используя поиск SSDP в VB.NET - PullRequest
0 голосов
/ 03 мая 2018

Я пытаюсь найти мой Roku TV в моей сети, и, по-видимому, требуется некоторое обнаружение SSDP на основе Roku API , однако я не могу найти свое устройство с помощью любая из библиотек Nuget.

Я столкнулся с ssdpradar и смог установить пакет Nuget для Visual Studio (VB.NET) через выпуск сообщества Visual Studio 2017. Однако я не могу найти какую-либо документацию о том, как его использовать.

Любой совет будет полезен.

Решение:

Я нашел решение, но не с 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

1 Ответ

0 голосов
/ 11 мая 2018

Мне недавно удалось успешно использовать библиотеку под названием 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

Возможно, вы захотите добавить попытку / перехват в ожидании в этой асинхронной функции, чтобы она могла показать ошибку, если есть проблема с сетью.

...