如何在VB.NET中通过SSDP搜索获取网络中Roku的IP和端口
我之前也碰到过类似的SSDP设备发现踩坑的情况,结合你描述的问题,给你整理一下用RSSDP实现Roku设备发现的具体步骤和代码示例,应该能帮到你:
用RSSDP实现Roku设备的SSDP发现(VB.NET版本)
一、前期准备
- 先卸载之前安装的ssdpradar包(如果还没移除的话),打开Visual Studio 2017的NuGet包管理器,搜索并安装
RSSDP包——这个库不仅对VB.NET适配友好,还有完善的文档和社区支持,比ssdpradar省心很多。
二、核心代码实现
下面是完整的VB.NET代码示例,直接复制就能用:
Imports RSSDP Imports System.Net Imports System.Threading.Tasks Public Class RokuDeviceDiscovery Public Async Function FindRokuDevicesAsync() As Task(Of List(Of SsdpDevice)) Dim foundRokuDevices As New List(Of SsdpDevice)() ' 初始化SSDP发现客户端 Using discoveryClient As New SsdpDeviceDiscoveryClient() ' 订阅设备找到的事件,实时筛选Roku设备 AddHandler discoveryClient.DeviceFound, Sub(sender, args) ' Roku设备的SSDP类型是"roku:ecp",也可以通过地址判断 If args.Device.DeviceType.Contains("roku:ecp") OrElse args.Device.Location.ToString().Contains("roku") Then foundRokuDevices.Add(args.Device) Console.WriteLine($"找到Roku设备:{args.Device.FriendlyName},访问地址:{args.Device.Location}") End If End Sub ' 开始搜索,超时设为5秒(可根据你的网络环境调整) Await discoveryClient.SearchAsync("roku:ecp", TimeSpan.FromSeconds(5)) End Using Return foundRokuDevices End Function End Class
代码关键点说明
SsdpDeviceDiscoveryClient是RSSDP的核心类,封装了SSDP协议的搜索逻辑,不用自己处理UDP包的细节- 搜索时指定
roku:ecp这个设备类型,能精准过滤出Roku设备,避免搜到其他SSDP设备 - 事件回调里的判断条件可以灵活调整,比如优先用设备类型判断,更准确
三、注意事项
- 确保你的应用有网络访问权限:如果是桌面应用,要在项目配置里允许网络访问;如果是UWP应用,需要在清单文件里添加“家庭网络”权限
- 检查网络环境:电脑和Roku电视必须在同一个局域网网段,同时确保路由器/防火墙没有拦截1900端口的UDP包(SSDP默认用这个端口)
- 超时时间可以灵活调整:如果你的网络环境比较复杂,把超时改成10秒能提高设备发现的成功率
四、关于ssdpradar的补充
其实ssdpradar本身功能是正常的,但它的维护活跃度很低,官方文档几乎没有,遇到问题很难找到解决方案。而RSSDP不仅有详细的使用说明,社区里也有大量的示例代码,后续扩展功能(比如获取Roku设备的详细信息)也更方便。
内容的提问来源于stack exchange,提问作者Afshin Rahimi
相关产品推荐
相关产品推荐

