问题标签 [nsd]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - 通过 Wi-Fi P2P 使用网络服务发现时无法连接到 Android 设备
每个人!我正在开发一个 Android 应用程序,允许与附近已安装此应用程序的设备聊天。为了实现这一点,我正在使用 Wi-Fi P2P API 和网络服务发现来搜索附近的此类设备。我已经编写了用于在服务启动的线程中搜索附近设备的代码。当检测到设备时,Service 将其(通过广播意图)发送到显示目前检测到的设备的 Activity。检测到的设备被添加到 recyclerView 中,当用户按下其中一个时,必须建立与此类设备的连接。Wi-Fi Direct 连接建立成功(即 WifiP2pManager.connect() 方法成功)并捕获 WIFI_P2P_CONNECTION_CHANGED_ACTION。在广播接收器中,当这样的广播意图被捕获时,
使用 requestConnectionInfo() 方法,我可以获得有关连接的更多信息,例如我尝试连接的设备的 IP 地址。为了获取此类信息,我为该方法提供了 WifiP2pManager.ConnectionInfoListener 的实现,由 connectionInfoListener 变量表示。这是我实现 WifiP2pManager.ConnectionInfoListener 的代码:
“设备”是我的 BroadcastReceiver 实现的一个实例变量,现在并不重要。相反,重要的是 ConnectThread 线程。这是处理连接两个设备之间的套接字所需代码的线程。当我尝试连接到检测到的设备时,ConnectThread 在其 run() 方法中创建一个新的 ChatConnection 实例,将先前获得的 IP 地址和端口号传递给此构造函数:
这就是问题发生的地方。当我在我的物理设备上测试我的应用程序时,我得到的只是这个异常:
当然,我也在第二个物理设备上安装了我的应用程序,它被成功检测到并且 Wi-Fi Direct 连接成功建立。但是,当谈到这行代码时:
抛出异常......我为这个问题的长度道歉,但我想尽可能清楚。我真的提前感谢您的帮助。
编辑:我忘了提及初始化 ServerSocket 的代码。
ServerSocket 在启用 Wi-Fi 后立即启动的线程中进行初始化。
也就是说,当 WifiP2pBroadcastReceiver(扩展 BroadcastReceiver 的应用服务的内部类)捕获 WIFI_P2P_STATE_CHANGED_ACTION 意图时,它会检查 Wi-Fi 是否启用,如果启用,它会启动 ServerSocket 所在的线程:
ServerSocket 在 NsdProviderThread 的 run() 方法中初始化:
“server”是 NsdProviderThread 的一个实例变量,声明为 ServerSocket。
java - 使用 IPv6 的 Android 网络服务发现
我开发了一个新的安卓应用程序。这个应用程序创建一个热点网络和一个服务。但有一个问题。在网络发现服务的客户端解析我的 android 应用程序的 IPv6 地址,因此客户端无法通过 tcp 套接字连接到我的服务。
我的问题是
- 有没有办法将 IPv4 地址发送到网络服务发现客户端?
- 或者有没有办法在客户端创建与 IPv6 地址的套接字连接?
注意:我的安卓设备版本高于安卓5.0.1
android - 通过 NsdManager 发现的打印机如何添加到 PrintService?
我正在尝试实现 PrintService。我正在使用网络服务发现 (NSD) 来查找打印机(参见https://developer.android.com/training/connect-devices-wireless/nsd.html等)NsdManager.DiscoveryListener
和NsdManager.ResolveListener
进行异步调用。但是,系统会在调用onStartPrinterDiscovery()
NSD 函数之前调用 my 。我没有看到任何其他机会打电话addPrinters()
。
这怎么行?
android - 服务注册如何与 NsdManager 一起工作?
我刚刚开始使用适用于 Android 的 NSDManager 类来处理多播 DNS。我从这个链接https://android.googlesource.com/platform/development/+/master/samples/training/NsdChat/src/com/example/android/nsdchat/NsdHelper.java找到了 NsdChat 示例。在这段代码中,注册服务似乎很简单,但我想了解它的底层工作机制,我在任何地方都找不到信息。
如果有人对此有经验并可以向我解释,将不胜感激。这些是我现在能想到的主要问题。
1) 当 registerService() 被调用时,应用程序在向谁注册这个服务?
2) 注册流程是什么?名称和端口等信息是否像 DNS 一样存储在查找表中的某个位置?
3)如果有人有一个图表来解释它是如何工作的,那就太棒了。
先感谢您。
android - 如何使用以前的客户端端口和 IP 与服务器重新连接客户端
我正在使用 NSD(Network service disovery) 在 Android 中创建一个聊天应用程序。
我的问题是如何使用以前的客户端 IP 和端口重新连接客户端。
示例:客户端第一次连接到服务器时的 IP 和端口
端口:52354
IP:110.100.92.187
假设如果以某种方式丢失连接,那么我可以重新连接到具有相同 IP 和端口的服务器,即端口:52354
IP:110.100.92.187
或任何其他使代码可靠以使其不会断开连接的方法?请记住,我将 NSD 用于本地网络(本地 wifi 网络和热点)而不是用于互联网。
对此问题的任何其他更好的解决方案都是最受欢迎的。
android - Android NSDService 发现 onServiceResolved 得到错误的端口号
我在获取注册服务端口号时遇到问题。实际上我的应用程序注册了一个端口为xxxx(例如40206)的服务,并且注册成功了。在另一台设备上,当我注册发现以发现所有已注册的服务时,我成功地找到了该服务,主机名有效,但端口号错误,它总是返回端口 41。
任何帮助为什么会发生以及如何解决它?
android - 如何在网络服务发现中获取 InetAddress 列表?
嗨朋友们,我在 android 应用程序中使用 NETWROK SERVICE DISCOVERY 来查找服务类型“_dockset._tcp”。我已成功获取设备列表,但无法获取所有设备的 InetAddres 列表。我只得到第一个发现设备的 InetAdress,但我想要发现所有设备的 InetAdress。您将非常感谢您的帮助。我在用
我很困惑如何迭代 InetAddess
android - 使用wifi p2p创建组以连接多个设备
我想创建一个连接,其中一个设备将像服务器一样将一些数据流式传输到连接的设备,并且多个设备可以连接到接收数据的设备。
所以我做了一些研究,我知道我们可以使用网络服务发现和 WiFi 点对点来做到这一点,所以我已经建立了连接,我可以连接一个设备和流数据,但我想创建一个组连接多个设备,因此任何人的任何帮助都将不胜感激。
谢谢!