Как найти Roku IP + Port в сети с помощью поиска SSDP в VB.NET

Я пытаюсь найти свой Roku TV в своей сети, и, по-видимому, ему требуется обнаружение SSDP на основе Roku API help, однако я не могу найти свое устройство ни с одной из библиотек 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

person Afshin Rahimi    schedule 03.05.2018    source источник


Ответы (1)


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

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

person libertyernie    schedule 11.05.2018
comment
Спасибо за ответ @libertyernie. Я попробую и обновлю пост. - person Afshin Rahimi; 12.05.2018
comment
Я попробовал этот метод, но он не увенчался успехом. Он говорит, что сборка компонента несовместима с моей Framework. @libertyernie - person Afshin Rahimi; 02.06.2018