无线 P2P。通知所有可用的对等点某些事件

     2023-02-23     132

关键词:

【中文标题】无线 P2P。通知所有可用的对等点某些事件【英文标题】:Wi-fi P2P. Inform all peers available of some event 【发布时间】:2015-04-19 19:17:30 【问题描述】:

问题:我正在制作一款离线多人安卓游戏,人们可以在其中创建或加入房间并通过 Wi-fi 一起玩。考虑用户创建房间并且他(当然)必须通知所有其他用户有可用房间的情况。所以问题是“如何?”。我已经阅读了大约 1000 次 this 和this。 那里写道,为了将一些数据发送到另一台设备,其中一个应该是服务器,另一个应该是客户端。客户端向服务器发送一些信息,服务器接受它。那么,这是否意味着我必须让所有“玩家”成为服务器,而“房间创建者”应该成为客户端?这听起来很疯狂。请帮忙,可能我正在阅读错误的文档?

【问题讨论】:

【参考方案1】:

首先,您需要记住,如果您决定在您的项目中使用WiFiP2P,您需要为一些困难时期做好准备。不幸的是(你可能已经注意到了:))WiFiP2P Android 的官方文档不是很好。不同的设备以不同的方式运行(例如,它们以不同的顺序调用一些 WifiP2P 事件)并且文档根本​​没有涵盖它。实现稳定的连接需要引入非常规的,有时甚至是严厉的措施。获得WifiP2P 连接与显示系统窗口(询问您是否真的要连接到设备)密不可分。

在开始实施WifiP2P 解决方案之前,您需要考虑几件事:

    您的游戏玩家能否同时连接到多个房间? 您的游戏玩家是否能够在连接到另一个房间时检测到新房间? 您的游戏玩家能否使用“人类可读”的名称来命名他们的房间?其他用户(不是房间的创建者)会使用这些名称来选择他们想要连接的房间吗?

场景 A:

如果您对问题 1. 或 2. 回答“是”,您需要认真考虑是否真的要使用 WifiP2PWifiP2P(Android 对Wifi-Direct 的实现)并不能真正满足您的需求。 使用WifiP2P 可能意味着房间所有者创建了一个WifiP2P-group,任何想要加入房间的人都必须连接到这个WifiP2p-group。 问题是 Android 不允许单个设备同时加入多个群组(这也意味着它不允许同时创建多个群组)。检测周围可用的WiFiP2P 设备的变化也是有问题的(当您已经连接到设备时)。

如果您真的想使用Wifi-Direct,您可能需要使用一个WiFiP2P-group 并将所有设备连接到它。这个组的行为就像一个常规网络,所有与游戏室相关的东西都必须由一个充当典型服务器的节点管理(或者可能不是典型的服务器,而是其他一些网络解决方案)。

如果您真的不需要WifiP2P,请使用普通的Wifi。将所有设备连接到一个网络(甚至可以在您的一台设备上启动热点),整个连接过程可以相对简单,在后台执行,无需用户直接参与。人类可读的房间名称不是问题,因为您可以从服务器发送任何内容。

场景 B:

如果您对问题 3 的回答为“是”并且您确实需要使用 WifiP2P,您将需要找到某种方法将您的“人类可读”名称广播到其他设备。

您可能认为这非常简单:您连接到其他设备,说出您创建的房间的名称,然后就完成了。没那么简单。正如我之前所说:

获得WifiP2P 连接与显示系统窗口(询问您是否真的要连接到设备)密不可分

所以整个过程会比较少:

    设备 A: 发起连接设备 B(设备 B 也可以执行此步骤

    设备 B: 出现丑陋的系统窗口,询问您是否要连接到 Android-ao12ij219sa(一些 PROGRAMMATICALLY UNCHANGEABLE 系统设备名称)

    设备 B: 接受

    设备 B:等待连接结果

    设备 B: 已连接,等待设备 A 房间名称的信息

    设备 A:已连接,正在发送房间名称

    设备B:设备A的房间名已获取,正在断开连接(未来的连接请求也会导致显示系统窗口)

在执行步骤 1-7 时,没有其他设备可以连接到设备 A(因此在此期间没有其他设备可以获取房间的名称)。

可以做什么:

    使用WifiP2P Service Discovery。它允许在不需要获得连接的情况下广播一些信息。不幸的是,它的记录比WifiP2P 本身更糟糕,而且它可能更不可靠(主观上)。如果您想在此基础上制定可靠的解决方案,您将需要花费数小时的测试并找到可能无法正常工作的不同情况。我从经验中知道这是可能的,但需要您采取一些变通方法才能始终获得稳定的WiFiP2P 连接。

    以其他方式将这些(不可更改的)WifiP2P 名称和创建的房间名称之间的映射发送到您的设备。例如通过您的服务器 api 或其他东西...

【讨论】:

非常感谢您的回复!我只剩下一个问题:您说服务发现可能不太可靠。这是什么意思?经常断线?是什么导致了这个问题?硬件还是软件?谢谢! 也许 可靠 不是最好的词。我的意思是:服务发现的使用会产生更多的异常设备行为案例,您需要预见这些案例以确保您的应用程序正常工作。这样您的游戏室总是被检测到,这样您的客户端总是可以连接到一个房间,依此类推…… @BartoszLipinski 在您的回答中您说使用 WifiP2P 服务发现我可以广播一些信息而无需获得连接,您能解释一下我该怎么做吗?我的意思是,如果我的设备上有一项服务,我如何才能广播更改的内容?非常感谢, @Bartek Lipinski 您可以通过反射使用带有@hide 注释的WiFiP2pManger 的setDeviceName 方法。我尝试使用它来更改设备名称,并且效果很好。但是发现过程仍然存在一些奇怪的问题。例如,即使设备 B 上的 wifi 已关闭,设备 A 仍会继续接收 WIFI_P2P_PEERS_CHANGED_ACTION 意图,该意图在对等列表中包含设备 B。 @Niakros 我总是尽量避免使用反射。它可能变得非常不可靠,特别是如果您使用开发人员(在本例中为 Google 开发人员)不希望您使用的某些方法。如果方法不是公共 api 的一部分,则可以将其从构建更改为构建。而且不会有任何关于它的信息。【参考方案2】:

基本上,在我看来,您的设计为 Wifi Direct 的设计提供了非常简单的解决方案。

基本上在创建其他人可以加入的“房间”时,只需创建一个组,然后添加本地服务来宣传该房间。

请注意,您可能需要启动对等发现,以便在本地服务中可见,至少我的经验是,您确实需要以某种方式处于活动状态,否则您将无法被发现。

然后使用客户端,只需进行服务发现,一旦找到“房间”,只需连接到它。

然后当连接由客户端发起时,接受对话框应显示在组所有者侧。

【讨论】:

非常感谢!您能否澄清一下:服务器可以向所有连接的对等方发送数据,对吗? 这次你的“服务器”基本上是 Wifi Direct 组的组所有者。所有客户端都将连接到组所有者,因此组所有者可以与他们通信。 再一次,群组信息,只有群组所有者的IP地址,因此最简单的开始通信的方法是从客户端开始。

当外部端口不断变化时,natted 网络中对等点之间的 P2P

...导致我开始研究STUN(NAT会话遍历实用程序),我看到的所有示例似乎都假设公共ip和端口在至少几秒钟或几分钟内是静态的时间。但是,我的家庭互 查看详情

P2P 分发 - 用于监督对等点的抽象算法

】P2P分发-用于监督对等点的抽象算法【英文标题】:P2Pdistrubution-abstractalgorithmforsupervisingpeers【发布时间】:2017-02-0820:32:39【问题描述】:我计划使用BitTorrent协议制作一个系统,用于在多个站点之间分发VM映像。当前系统如下:|... 查看详情

win7设置虚拟wifi对等网p2p

连接工具两台已经互连的计算机,两块无线网卡,一个可以上网的手机。【保证无线网卡已经插入电脑】连接过程a)  方法一1、打开所使用计算机的控制面板,选择网络和Internet,然后选择网络和共享中心,选择设置新的网络... 查看详情

p2p模拟和分布式哈希表

...下是我计划前进的方式:创建一个能够加入p2p“网络”的对等程序。该网络是此类对等点的集合。对等点通过机器中的进程ID标识。当一个对等点被创建,即加入网络时,它 查看详情

是否适合 p2p 应用程序的 TCP 打孔流程:

...口和NAT类型。在我的中间服务器(公共ip)上,我将注册对等点的外部ip/端口(现在服务器知道对等点1和2的外部ip/端口)。交换ip/port(对等体1将了解对等体2的ip/po 查看详情

p2p(对等网络)

对等网络,即对等计算机网络,是一种在对等者(Peer)之间分配任务和工作负载的分布式应用架构[1]  ,是对等计算模型在应用层形成的一种组网或网络形式。“Peer”在英语里有“对等者、伙伴、对端”的意义。因此,... 查看详情

p2p技术概要

    P2P(PeertoPeer)也就是对等网络,即对等计算机网络,是一种在对等者(Peer)之间分配任务和工作负载的分布式应用架构[1]  ,是对等计算模型在应用层形成的一种组网或网络形式。“Peer”在英语里有“... 查看详情

Android Wi-Fi Direct P2P 连接多个设备

...到问题。我的应用程序的工作流程是:一个设备调用发现对等点(参见代码A)一旦发现对等点,我会显示一个AlertDialog,允许用户选择他们想要连接的对等点(参见代码B)一旦用户 查看详情

使用 node.js 作为 WebRTC 对等点?

】使用node.js作为WebRTC对等点?【英文标题】:Usenode.jsasaWebRTCpeer?【发布时间】:2013-06-2103:14:36【问题描述】:存在哪些模块可以在WebRTC中使用node.js作为对等点?我想以比P2P更多的客户端/服务器方式使用WebRTC,因为它明显能够不... 查看详情

在wifi-direct p2p连接中获取对等设备的IP地址[重复]

...9:43:32【问题描述】:当我的设备是wifi-directP2P连接中的组所有者(GO)时,我的应用程序需要知道对等设备的IP地址(通常GO充当DHCP服务器,对等站从服务器接收IP)。我发现D 查看详情

取消挂起的推送通知

】取消挂起的推送通知【英文标题】:Cancelpendingpushnotification【发布时间】:2015-06-0915:01:34【问题描述】:我正在通过APN从我的服务器发送推送通知。可以说,下午3点有一个事件,因此在下午1点,我从我的服务器向我的所有用... 查看详情

Multipeer Connectivity - 检查所有附近的对等点是不是已连接并尝试重新连接它们

】MultipeerConnectivity-检查所有附近的对等点是不是已连接并尝试重新连接它们【英文标题】:MultpeerConnectivity-CheckingifallnearbypeersareconnectedandtryingtoreconnectthemMultipeerConnectivity-检查所有附近的对等点是否已连接并尝试重新连接它们【... 查看详情

直播p2p技术

...迟模型由上一篇文章我们知道:网状拓扑虽最大化利用了所有节点的资源却无法降低数据延迟,而树状拓扑尽管数据传输效率高,延迟低,但只利用了少部分节点的带宽资源,不适应高码率的直播P2P网络。那么如何在高码率的直... 查看详情

获取 JXTA 对等组中的成员列表

】获取JXTA对等组中的成员列表【英文标题】:GetthelistofmembersinaJXTApeergroup【发布时间】:2011-08-0112:43:20【问题描述】:我只是想知道有没有办法获取已加入JXTA中特定对等组的活动或在线(成员)对等点列表?提前致谢。【问题... 查看详情

用于点对点通信的 Java“对等”套接字

...“服务器”,另一个被视为“客户端”,服务器必须首先可用。那么,有没有 查看详情

ios 决定是不是在客户端代码的某些条件下静音我的远程通知,而不是设置内容可用

】ios决定是不是在客户端代码的某些条件下静音我的远程通知,而不是设置内容可用【英文标题】:iosdecidewhethertosilentmyremotenotificationundersomeconditionsonclientsidecodeinsteadofsettingcontent-availableios决定是否在客户端代码的某些条件下静... 查看详情

iOS - 当 wifi 或网络无线电激活时通知(不仅可用)

】iOS-当wifi或网络无线电激活时通知(不仅可用)【英文标题】:iOS-Notifiedwhenwifiornetworkradiosbecomeactive(notjustavailable)【发布时间】:2013-05-0702:26:51【问题描述】:我正在编写一个需要每隔一段时间“打电话回家”但不是在任何特... 查看详情

点对点架构模式

 点对点模式中。单个组件被称为对等点。对等点可以作为客户端,从其他对等点请求服务,作为服务器,为其他对等点提供服务。对等点可以充当客户端或服务器或两者的角色,并且可以随时间动态地更改其角色。通过上网... 查看详情