Articles of p2p

Android,NSD / DNS-SD:NsdManager不可靠的发现和IP解析

在过去的几周里,Android的NSD实现让我发疯: 从用户的角度来看,出现以下问题: 设备以完全不确定的方式发现彼此。 如果我启动基于NsdManager的应用程序,如果只涉及两个设备,它会或多或少地起作用。 如果第三个设备加入,它将很少发现前两个 ,前两个将不会看到第三个。 如果我退出应用程序(它们优雅地取消注册NSD侦听器)并以不同的顺序重新启动它们,则发现模式不完全相同,但类似。 在我的家庭网络中,已发现设备的IP分辨率基本上按预期工作。 在工作中,有时即使仅使用两个设备(A和B), 设备A也将使用A的IP地址和B的端口解析设备B的服务,反之亦然。 因此,某种程度上IP地址和服务名称似乎在较低级别(可能是NsdManager)混淆。 我现在已经为此提交了有关Google代码的错误报告( https://code.google.com/p/android/issues/detail?id=201314&thanks=201314&ts=1455814995 )。 我也在这里发帖,希望得到更多反馈; 也许我的Nsd助手类错了。 首先,在无休止的调试之后,我现在在logcat中发现了Android的底层NsdService本身可能出现故障的提示,而MDnsDS似乎正常工作。 但我不确定…… 这是一些日志输出,用于说明问题(为了便于阅读,已过滤了一些消息): 02-18 16:57:02.327: D/NsdService(628): startMDnsDaemon 02-18 16:57:02.327: D/MDnsDS(187): Starting MDNSD 02-18 16:57:02.529: D/NsdService(628): New client listening to asynchronous messages 02-18 16:57:02.529: D/NsdService(628): New client, channel: com.android.internal.util.AsyncChannel@1fa188ce messenger: android.os.Messenger@cca33ef 02-18 16:57:02.532: D/NsdService(628): Register service 02-18 16:57:02.532: D/NsdService(628): registerService: […]

从笔记本电脑控制您的手机

想法 :为你的Android手机创建一个遥控器。 原因 :我喜欢在连接扬声器的基座站的手机上听音乐。 现在有时我想要上调/下调音量,更改歌曲等等。所以我需要解锁手机,find正在播放音乐的应用程序(音乐播放器,网络电台应用程序等)。 有时我会设法取消电话,或者只是弄乱一些东西,通常是这个问题。 所以我想从笔记本电脑(在wifi上)控制我的手机(在数据连接上,而不是wifi上)。 我调查了几种方法,并希望得到一些建议: 使用XMPP 。 这很好,因为我可以使用很多免费的XMPP服务。 我试过的两个库(都基于smack)工作得很好(Flow aSmack port和Beem smack port )。 我可以在设备上自动创建新用户并呈现我(用户)将在桌面端输入以链接两个设备的一些ID /密码组合。 使用JXTA 。 应该是下一个真正的交易,但可能是一个矫枉过正。 我想在某处运行一个集合和中继服务器(需要托管以解决防火墙/ NAT)并创建一个受密码保护的对等组。 使用设备唯一ID和密码(带组)链接到桌面应用程序。 (可以从这里下载一本很好的电子书来解释p2p和JXTA)。 使用C2DM 。 可能是答案,但通知交付有时可能需要几秒钟才能完成,而且没有反馈机制。 到目前为止,第一个解决方案看起来更容易选择。 创建自定义扩展或仅在两个端点之间创建聊天,并使用它来中继命令/消息。 但我想知道我是否会滥用XMPP系统? JXTA听起来很棒,但从我所做的所有阅读中可以看出,它是专为群组通信和服务共享而设计的,而不是连接两个端点的解决方案。 你们有什么感想? 我也欢迎所有的建议。 更新我不想远程接听电话并以交互方式控制它。 我想在笔记本电脑和手机之间建立连接(套接字连接),即使它们都位于防火墙,路由器后面的不同网络上。 有了这个,我可以定义一个协议来向手机发出命令(低音量,静音,启动应用程序等)。 更新2我给JXTA一个机会。 这是一个很好的解决方案,但缺乏文档是一个下降。 得到了VPS FreeBSD服务器来测试RDV / relay方面的东西。 我不断更新这个问题,因为它可能对其他人有帮助。 更新3更多阅读: 如何使两个Android设备通过TCP进行通信 两台计算机之间的连接没有使用第三台计算机打开端口 更新4到目前为止,我没有足够的时间继续我的项目。 我find了一个有趣的项目 。 目前项目所有者正在重新编写他们的图书馆,您可以在此处跟踪他们的进度。

适用于iOS和Android的Unity3D:多人游戏(蓝牙连接)

我正在寻找一种方法来在Unity iOS和Android Basic中使用蓝牙连接两个设备以进行多人游戏。 我发现: 高通公司的AllJoyn – 蓝牙显然仅适用于Root -Android设备,目前还不适用于iOS。 由game31开发的iOS GameKit Local Multiplayer – 仅适用于iOS。 Gregzo的Bonjour插件 – 不是蓝牙,而是仅适用于iOS的其他本地多人游戏解决方案。 TNet :非蓝牙,仅适用于Android和iOS Pro 有没有任何其他解决方案(特别是Android)? 我将不胜感激任何帮助。 也适用于其他p2p-Unity-Solutions。

移动设备之间的实时P2P通信

我正在构建一个需要向其他设备发送实时信息的移动设备。 我考虑过XMPP,但我没有服务器,因此通信必须只在设备之间进行。 有没有办法在没有服务器的移动设备之间使用XMPP进行通信(或者使用移动设备作为服务器)? 套接字是个好主意吗? 即拥有一个ServerSocket和客户端Socket并以这种方式进行通信。 有更聪明的方法吗? 我听说过jWebSocket,但我真的不知道它是如何工作的,或者它是否值得。 编辑 过程如下: 我正在使用Parse作为服务器/后端http://parse.com 当用户运行应用程序时,将从解析服务器检索用户列表 然后用户拥有(可能拥有)其他客户端的IP,然后尝试与他们通信。 问题 1. Parse不支持XMPP服务器或其他types的服务器

通过互联网进行Android P2P(直接连接)(NAT后面)

我正在开始一个小型项目,基本上是经典战舰游戏的多人游戏(与超过两个玩家一样)。 在我深入编码之前,我试图解决的一个问题是多个玩家之间的沟通问题。 当前的可能性是使用中央HTTP服务器作为通信的中央集线器(与Android C2DM API结合以允许从HTTP服务器到设备的推送通信)。 这似乎是一个很好的解决方案,因为从理论上讲,只要您可以访问Internet,它就应该可以正常工作,无论您是否支持NAT。 然而,所提出的解决方案具有存在一个单点故障/额外负载(网络服务器)的缺点。 所以我想尝试其他选择。 我想过在客户端之间使用套接字建立直接连接(网络服务器只是用作初始会合点),但是这只有在所有设备都在同一网络中时才能正常工作。 考虑到今天我们几乎总是落后于路由器的NAT,我怎样才能实现直接通信? 我一直在阅读有关打孔的内容,但我找不到任何有良好记录的好文库(包含很好的使用示例),并且肯定适用于Android。 大多数(如果不是全部)打孔技术(STUN,ICE等等)广泛使用只适用于UDP,这对于音频/video以及可能丢失一些消息的实时多人游戏很好,但对于多人转向基于游戏的重要一点是保证每个回合的数据传递(这是不可能直接用UDP进行的)。 那么任何想法如何在NAT后面的Android设备之间实现可靠的打孔(最好通过TCP)? 它不必在100%的情况下工作(可能不支持某些陌生人的NAT)但如果它适用于大多数情况会很好。

Android WiFi Direct的自动身份validation

在Android ICS中,提供无线P2P(WiFi Direct)API。 我尝试开发一个应用程序,如果MAC地址匹配,可以通过无线P2P自动连接2部手机。 从SDK文档中,我必须执行以下步骤: 从设置开启WiFi Direct。 初始化P2P连接。 – initialize() 发现同行。 – discoverPeers() 查看MAC地址是否匹配。 连接到发现的Peer。 – connect() 一旦调用了connect()API,Farside手机就会popup一个连接身份validation对话框。 (取决于WifiP2pConfig) 反正自动连接,没有FarsidepopupDialog?

点对点通信选项

任何人都可以确认Android框架内目前允许的点对点通信方法是什么? 我需要传输json字符串,我现在正在使用短信工作正常,但问题是数据也最终成为大量的短信。 我已经阅读了Reto Meier的第一版专业Android应用程序开发,他说由于安全问题,数据传输选项没有实现。 这有没有改变,你将如何进行数据的点对点传输?

我们可以直接从Android设备发送数据到另一台android设备(p2p)吗?

我需要发送数据从一个Android设备到另一个Android设备直接(P2P)后,他们通过服务器find对方。 我读了一些东西,这是不能做的,但我不明白为什么可以访问互联网(它有一个IP权利?)的设备不能创build一个对等连接? 如果这不可能,为什么? 如果是这样的话? PS:我知道没有互联网我们不能达到这个目的,这个问题假设两个目标都有互联网连接,无论是gprs / 3g / 4g还是wifi互联网连接! 注意:我希望这是可能的无线和非WiFi互联网!

Android,NSD / DNS-SD:NsdManager不可靠的发现和IPparsing

在过去的几周里,Android的NSD实现让我发疯: 从用户的angular度来看,会出现以下问题: 设备以完全不确定的方式相互发现。 如果我启动基于NsdManager的应用程序,则只要涉及到两个设备,就可以或多或less地工作。 如果第三个设备join,它很less会发现前两个 ,而前两个设备不会看到第三个。 如果我退出应用程序(它们正常地取消注册NSD侦听器)并以不同的顺序重新启动它们,则发现模式不完全相同,但是类似。 在我的家庭networking中,被发现设备的IP分辨率基本上按预期工作。 在工作中,有时甚至只使用两个设备(A和B), 设备A将用A的IP地址和B的端口parsing设备B的服务,反之亦然。 所以不知何故,IP地址和服务名称似乎混在一个较低的级别(可能是NsdManager)。 我现在已经提交了有关Google代码的错误报告( https://code.google.com/p/android/issues/detail?id=201314&thanks=201314&ts=1455814995 )。 我也在这里张贴这个,希望得到更多的反馈; 也许我在我的Nsd helper类中有错误的东西。 首先,经过无尽的debugging,现在我已经在logcat中发现了一些提示,说明Android的底层NsdService本身可能出现故障,而MDnsDS似乎正常工作。 但是我不确定… 下面是一些说明问题的日志输出(为了可读性过滤了一些消息): 02-18 16:57:02.327: D/NsdService(628): startMDnsDaemon 02-18 16:57:02.327: D/MDnsDS(187): Starting MDNSD 02-18 16:57:02.529: D/NsdService(628): New client listening to asynchronous messages 02-18 16:57:02.529: D/NsdService(628): New client, channel: com.android.internal.util.AsyncChannel@1fa188ce messenger: android.os.Messenger@cca33ef 02-18 16:57:02.532: D/NsdService(628): Register service 02-18 16:57:02.532: D/NsdService(628): […]

从iOS到Android的点对点video?

我开始为iOS和Android开发/构build对等video聊天应用程序。 我正在尝试为FaceTime或Tango创build一个类似的体验 – 即高质量的video,可以在互联网/ 3G上运行(不只是在同一个局域网上)。 我刚开始研究阶段。 我做了一堆谷歌search,但没有find太多(因为这是一个新的领域,我可能在错误的地方看)。 你能提出我应该预料会遇到的任何陷坑吗? 我应该使用什么协议(从阅读我看,人们使用SIP或XMPP,这是最好的select?)。 我是否会遇到这样的跨平台沟通问题? 我应该探索的任何其他资源。 我的大部分经验是在开发Web应用程序和后端服务器端的东西。 所以这对我来说是一个新的尝试,但是我期待着心灵的舒展。 谢谢!