在过去几周的过程中,Android的NSD实施使我发疯: 从用户的角度来看,出现以下问题: 设备以完全不确定性的方式相互发现.如果我启动基于NsdManager的应用程序,则仅涉及两个设备,它或多或少都可以使用. 如果第三个设备连接,它很少会发现前两个,而前两个将看不到第三个.如果我退出应用程序(他们优雅地登记了NSD听众)并以不同的顺序重新启动它们,那么发现模式并不完全相同,但相似. 在我的家庭网络中,发现设备的IP分辨率基本上可以按预期工作.在工作中,有时即使仅使用两个设备(A和B),设备A也会使用A的IP地址和B的端口和反之亦然来解决设备B的服务.因此,某种程度上的IP地址和服务名称似乎在较低级别(可能是NSDManager). 我现在已经在Google代码上提交了一个错误报告(首先,在无尽的调试之后,我现在发现了LogCat中的提示,即Android的基础NsdService本身可能会出现故障,而MDNSD似乎可以正常工作.但是我不确定... 这是一
以下是关于 discovery 的编程技术问答
在URL上是否有任何规格或约定在其中应放置swagger.json(或者同意的任何名称),以便可以自动发现我网站的公共API? 解决方案 更新了2017年4月19日:我之前给出的Openapi Wiki答案是"对于非常非常古老的规格" .同一源指出,对于2.0,标准为swagger.json,对于3.0,它更改为openapi.json. 原始答案: Openapi Wiki 建议使用/api-docs 服务器API的最少.我在野外看到了几个使用 那是我们的商店标准. 希望会有所帮助. 其他解决方案 在响应url/? 的选项请求时,如何在HTTP响应主体中提供Swagger JSON 这是由相关rfc . 此外,请考虑实施Hateoas,如强有力地提倡罗伊·菲尔丁(Roy Fielding). 其他解决方案 好的. OpenAPI 3.0仍然缺乏自动发现机制,我尝试提出基于有些事情已经有效: https://example.com
我想执行一个彻底的LAN设备发现,以便我可以创建一个类似于附件的图表,但是还有其他信息,例如IP和MAC地址. 我尝试了Torry的代码: type PNetResourceArray = ^TNetResourceArray; TNetResourceArray = array[0..100] of TNetResource; function CreateNetResourceList(ResourceType: DWord; NetResource: PNetResource; out Entries: DWord; out List: PNetResourceArray): Boolean; var EnumHandle: THandle; BufSize: DWord;
我已经阅读了Android 文档使用NSD的网络服务.以下是我发现所有可用 _http._tcp 服务的代码. final NsdManager.DiscoveryListener discoveryListener = new NsdManager.DiscoveryListener() { @Override public void onDiscoveryStarted(String s) { Log.i(TAG, "onDiscoveryStarted: " + s); } @Override public void onServiceFound(NsdServiceInfo nsdServiceInfo) { Log.i(TAG, "onServiceFound: " + nsdServiceInfo.toString()); } @Override public void
对于我的Android应用程序,用户需要连接到将在同一LAN上托管的服务器.可以在同一LAN上托管多个服务器.为了使用户容易,我将扫描当前LAN,以确保Android设备已连接至手动. 我是网络的新手,经过一些搜索,我发现我必须使用多铸DNS搜索或UDP广播来检测其他设备.我还找到了一个名为JMDNS的不错的库,尽管我发现很少有文档和示例代码.有人可以将我指向正确的方向,以节省我的浪费时间(主要是我在正确的轨道上)?我假设我必须修改服务器以广播它在那里?如果我手动将IP手动输入到我的应用程序上的配置页面中,则它的工作原理完全按预期工作.另外,这只需要发现Windows计算机,不确定这是否重要.预先感谢. 解决方案 好吧,JMDNS是一个完整的Java库,您可以用于设置.它可以用来braodcast您的服务,其他客户可以搜索. Windows上的Bounjour服务有些棘手,尽管绝对有可能.我要说的是,更容易的方法是将JMDN用于服务器和客户的广播和发现. 其他解
我正在尝试将NSDServiceInfo的MHOST作为参数传递到nsdmanager.discoverylistener.onervicefound(),但这是无效的. 我有两个Android设备,其中设备1是服务器,设备2是客户端. 这就是我在设备1 中注册服务器的方式 public void registerService(int port, InetAddress myIp) { NsdServiceInfo serviceInfo = new NsdServiceInfo(); serviceInfo.setPort(port); serviceInfo.setServiceName(this.serviceName); serviceInfo.setServiceType(SERVICE_TYPE); serviceInfo.setHost(myIp); this.nsdManager.registerServic
我需要能够在本地网络上发现服务(所以说我正在运行聊天应用程序,我想在运行此聊天的本地网络上发现其他设备),但可悲的是我需要能够使用它在具有API 解决方案 至少有三个或四个选项. 您可以使用 TCP或UDP 广播地址 多播地址 迭代网络中的所有地址 http 4使用外部服务器或GCM(Google Cloud Messaging) 之类的东西 ad.1和2 专利: +易于实现,服务器正在在特定端口的子网/网络的广播/多播地址发送预定义的" Hello"消息,客户端正在该端口上侦听,当" Hello"消息到达时,他会自动知道服务器IP地址(包含在数据包中) +不需要连接到Internet cons: 一些公共网络阻止此地址以避免攻击(例如洪水). ad 3. 专利: 当多播和广播被阻止时,您可以做的就是在整个子网上迭代.它是"蛮力"方法,但起作用,尤其是在蒙版为/24的典型家庭/小型网络上,只有255
在使用示例和 现在似乎已经破裂了... 启动程序后,经过一定初始化后,代码将输入以下方法并成功运行: public void discoverServices() { Log.d(TAG, "Initializing discovery on NSD"); mNsdManager.discoverServices( SERVICE_TYPE, NsdManager.PROTOCOL_DNS_SD, mDiscoveryListener); } 收到日志消息.一段时间后(例如5分钟).这是从程序中输出的: 05-21 11:08:32.518: E/NsdCamera(12236): Discovery failed: Error code:0 05-21 11:08:32.518: W/dalvikvm(12236): threadid=12: thread exiting with uncaught exception (
我目前使用SDK> = 16开发了一个Android应用程序,该应用程序应该能够使用WiFi Radio在局部网络中发现其他Android设备(后来iOS设备). 我的第一个猜测是使用Multicast,它在我的Samsung Galaxy S2上是不起作用的:只有从同一设备发送时才会收到数据包. 我的第二个猜测是使用有限的IP地址范围积极扫描网络,并等待适当的响应.不幸的是,这意味着网络使用DHCP来解决IP地址. 上述解决方案似乎都不是完美的解决方案. 我目前的第一个猜测解决方案: public class MulticastReceiver extends AsyncTask { private static final String host = "224.1.1.1"; private static final int port = 5007; private stat
我当前正在处理一个程序,该程序扫描我的网络并发现网络上的计算机和设备.我使用各种操作来查找我发现的设备上的数据,但想将网络设备与计算机区分开.我想知道是否有人知道我该怎么做? 我看了一些SNMP,并尝试连接到我的网络打印机,路由器和调制解调器.但是我似乎只能连接到打印机,路由器或调制解调器都没有响应. 有其他方法可以识别IP地址属于哪种设备? 解决方案 使用命令行工具,例如 nmap 您可以指责打印可以给您各种各样的设备信息. 也许您可以通过C#调用NMAP并回复响应. 另一种选择是查找给定MAC地址的网络芯片供应商.但是我不确定会给您多少细节. 这是 nmap网站的示例: # nmap -O -v scanme.nmap.org Starting Nmap ( http://nmap.org ) Nmap scan report for scanme.nmap.org (64.13.134.52) Not shown: 994 filter
我正在尝试制作客户端/服务器Java应用程序.客户端和服务器都将在同一Wi-Fi网络上运行.服务器将在客户端知道的特定端口上运行. 我计划通过网络向客户端发送多播消息,以发现该服务器.但是,我不太确定如何找出网络中的哪个IP收到我的消息. 如果我发送多播消息后,我需要在客户端上创建套接字并收听传入数据包吗? ? 预先感谢. 解决方案 (1)服务器在预先安排的端口上听 DatagramSocket s = new DatagramSocket(8888); s.receive //(1) s.send //(2) (3)客户在广播IP上向端口发送消息,255.255.255.255 DatagramSocket c = new DatagramSocket(); c.send(255.255.255.255:8888,msg) //(3) c.receive //(4) 客户也可以绑定到端口.我们没有指定它,所以它是为我们
由于eureka使用HTTP/HTTPS协议与其注册人(客户端)进行交互,因此您可以通过假装是其向其发布错误/错误数据的客户之一来轻松欺骗Eureka服务器,告诉服务最终结果下降,最终会导致结果.从注册表中删除这些服务.在大型系统中,这是一个非常可能的情况. 防止这种攻击的替代安全/身份验证方案是什么? 解决方案 如果您可以从外部访问您的服务发现,则需要向其添加一些安全性,而HTTPS只能保护中间攻击,因此它不够. 如果您将Eureka与Spring Cloud Starter(@enableeurekaserver)一起使用,则可以使用Spring Security来保护您的服务器. 对于一个简单的典范,您可以添加: security: user: name: admin password: password 并在Spring-Boot客户端上声明Eureka: eureka: client: serviceUrl:
DiscoveryClient还需要什么? 我正在尝试使用DiscoveryClient向Eureka获取注册服务. 独立程序运行良好,但是以下代码段将与在JBOSS上运行的Web应用程序集成. 这是代码 discoveryclientcontroller.java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.client.discovery.DiscoveryClient; import org.springframework.stereotype.Controller; @Controller public class DiscoveryClientController { @Autowired private DiscoveryClient discoveryClient;
我想发现NAT的类型(FullCone,受限锥,端口受限锥,对称)给定的网络接口. 我已经测试过不同的工具( http://freshmeat.net.net.net/projects/projects/jstun/ , http://code.google.com/p/boogu/)但是他们报告了不同的相同接口的结果. 我正在寻找python的确定答案(或其他语言,第二选择是java,如果没有其他可用的话). 解决方案 i第二次来自 @s.lott的答案:不可能使用stun(或任何其他协议)确定您落后哪种类型的NAT. 问题是(正如我最近见证的那样),NAT有时可能充当地址 - 依赖性(对称),有时为当您考虑它时,与地址相关的意思是,当您从NAT后面的客户端的一个套接字发送到两个不同的服务器时,NAT将创建两个自定义公共地址:每个服务器的端口clubl .就我而言,这些绑定似乎是完全随机的,但是如果范围很小,则有时会碰到这些元组实际上相等!混淆了测试.
我认为我的问题很简单. Web客户端是否有可能从特定的WCF服务中发现哪些方法(通过 http:///the.web.server/somewcfservice.svc )? 这不是我们要做的事情,而是我们试图发现我们的服务有多脆弱,我们正在寻找使它们更安全的方法. 预先感谢. 解决方案 以下MSDN文章应解决您的关注,因为它显然指出,客户必须在发现之前对服务地址有先验的了解. (然后,文章讨论了您如何启用动态发现,这似乎不像您想要的): " Microsoft .NET框架3.5共享两个约束.首先,分配给服务的端口或管道可能可用. 客户必须了解服务端点的地址,端口号和服务机或管道名称." EE335779.aspx
有没有办法检查iOS来查看是否已安装了另一个应用程序然后启动?如果内存为我服务,这在早期版本中是不可能的,但是是否已更改? 解决方案 可行,但很棘手. 使用自定义URL方案启动安装的应用程序,例如FB或Twitter应用程序.这些可以在其他应用程序和网站上使用. 不过,看看是否存在URL可能很棘手.检测已安装应用程序的应用程序的一个很好的示例是 boxcar .这里的问题是Boxcar对自定义URL具有高级知识.我完全(99%)确定有一个canOpenURL:,因此知道您要提前定位的应用程序的自定义方案可以使其易于实现. 有一种方法可以找出自定义应用URL: https://www.amerhukic.com/finding-the-custom-url-scheme-scheme-of-an-ios-app 但是,如果您想扫描应用程序并推断出其URL,则不能在非JB设备上完成. 其他解决方案 有一个如下脚本.
我试图使WCF Discovery在Mono 3.2.8中工作.单声道网页提到很多发现行为应该存在,但是我无法通过"代码"或" app.config设置"来工作.这在.NET中100%起作用,因此我知道至少原理是正确的. 这类似于未解决的问题: wcf udp udp Discovery in mono 但是,我的具体问题是:是否有任何在Mono中使用WCF发现的方法? app.config设置给出此错误: [ERROR] FATAL UNHANDLED EXCEPTION: System.Configuration.ConfigurationErrorsException: Error deserializing configuration section behaviors: Invalid element in configuration. The extension name 'serviceDiscovery' is not registered i
我想在Android中创建一个服务,如果他们想启动蓝牙并设置蓝牙发现,那么最初会询问用户. 我的问题是: 我可以在活动后在服务中启动吗? if (!mBluetoothAdapter.isEnabled()) { Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableBtIntent, 0); } // Set Phone Discoverable for 300 seconds. Intent discoverableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE); discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 6