【问题标题】:Network Service Discovery网络服务发现
【发布时间】:2014-08-03 00:55:03
【问题描述】:

我正在考虑为 Android(客户端)和服务器(Windows)制作客户端/服务器应用程序。

应用程序的目的是来自服务器 (PC),它允许用户扫描网络以查找与我的 C# 应用程序兼容的设备,然后可以在客户端和服务器之间发送消息。

我一直在阅读 Android 文档并在 android 中找到了网络发现服务 在http://developer.android.com/training/connect-devices-wirelessly/nsd.html

我对其工作原理的理解是,android 应用程序会发送一条广播消息,其中包含服务名称、IP 和端口号,其他设备可以通过该消息连接到它。因此,在我的情况下,C# 将接收此广播消息并确定该服务是否是我的 C# 应用程序可以支持的服务,如果是,则使用广播中的详细信息建立到 android 设备的套接字连接。

正如我所说,我找到了用于注册服务的 android 开发人员教程,但我找不到任何关于 C# 如何找到此广播消息并对其采取行动的信息。

您可能拥有的任何帮助或教程都会很棒,因为 Google 没有找到我任何东西,我不完全确定我是否正在寻找正确的东西。

谢谢

【问题讨论】:

  • 没有。您的 C# 服务器应该广播消息。您的 android 客户端会监听它并确定是否可以使用该服务。客户端连接到服务器。服务器/服务无法连接到客户端。
  • 啊,有道理,你有没有任何教程可以做到这一点,因为似乎找不到任何东西

标签: c# android sockets


【解决方案1】:

@greenapps 是对的,服务器应该广播。因此,使用网络服务发现discover a service 正在被您的 C# 服务广播。

Android 的NsdManager 类有一个教程可以做到这一点。它使用“基于 DNS 的服务发现”工作,官方规范列出了 here。我相信这是 DNS 服务发现 (DNS-SD) 标准。

您的服务器必须进行广播。您应该可以使用 this question 来执行此操作,它涵盖了 DNS SRV,这是 DNS-SD 的基础之一。

当然,C# 广播服务类型必须与您的 Android 代码中的 SERVICE_TYPE 字符串参数相匹配:

mNsdManager.discoverServices(
    SERVICE_TYPE, NsdManager.PROTOCOL_DNS_SD, mDiscoveryListener);

【讨论】:

  • 啊,没想到它会使用 DNS。因此,我猜 DNS 服务器需要在其记录中包含详细信息,以便希望它知道将请求发送到哪个 IP 的设备。不幸的是,这对我不起作用,因为目标受众可能不知道如何修改 dns 记录及其用于内部家庭网络,因此可能无法添加/更改记录。不过谢谢
  • 我不确定您是否需要配置 DNS 服务器。据我所知,这与用于无线打印机的协议相同,而且我肯定从未为此设置过 DNS 服务器。试试看!
【解决方案2】:

这可能会有所帮助: http://justanapplication.wordpress.com/2013/11/20/service-discovery-in-android-and-ios-part-eight-ios-take-four/

我用过一次,前几页列出了如何从 android 应用程序中的 DNS 发现服务接收回调,就像 greenapps 建议的那样。虽然它可能不是您使用的确切方法,因为您的方法只能找到兼容的设备;这至少可以作为一个起点。

【讨论】:

  • 问题是关于服务器端的。不是安卓
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-27
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 2015-10-20
相关资源
最近更新 更多