Ser*_*lov 4 android wifi-direct wifip2p
问题是:我正在制作一个离线多人安卓游戏,人们可以通过Wi-Fi创建或加入一个房间并一起玩.考虑用户创建房间时的情况,他(当然)必须通知所有其他用户有可用房间.所以问题是"如何?".我已经阅读了大约1000次这个 和这个.它写在那里,为了将一些数据发送到另一个设备,其中一个应该是服务器而另一个应该是客户端.客户端向服务器发送一些信息,服务器接受它.那么,这是否意味着我必须让所有"玩家"服务器和"房间创建者"成为客户?这听起来很疯狂.请帮忙,可能是我在读错了文档?
Bar*_*ski 11
首先,您需要记住,如果您决定WiFiP2P在项目中使用,则需要在困难时期做好准备.不幸的是(正如你已经注意到的那样:))WiFiP2PAndroid的官方文档并不是那么好.不同的设备以不同的方式运行(例如,它们WifiP2P以不同的顺序调用某些事件),并且文档根本不覆盖它.实现稳定的联系需要引入非常规的,有时甚至是激烈的措施.获取WifiP2P连接与显示系统窗口(询问您是否确实要连接到设备)密不可分.
在开始实施WifiP2P解决方案之前,您需要考虑以下几点:
如果您对问题1或2的回答为"是",那么您真的需要考虑是否真的想要使用WifiP2P.WifiP2P(Android的实现Wifi-Direct)并不真正符合您的需求.使用WifiP2P可能意味着房间所有者创建了一个WifiP2P-group,任何想要加入房间的人都必须连接到此WifiP2p-group.问题是Android不允许单个设备同时加入多个组(这也意味着它不允许同时创建多个组).检测WiFiP2P周围可用设备的更改也存在问题(当您已连接到设备时).
如果你真的想要使用,Wifi-Direct你可能需要使用一个WiFiP2P-group并将所有设备连接到它.这个组的行为就像一个普通的网络,所有与游戏室相关的东西都必须由一个充当典型服务器的节点(或者可能不是典型的服务器,而是一些其他网络解决方案)来管理.
如果你真的不需要WifiP2P只使用常规Wifi.将所有设备连接到一个网络(甚至可能在您的某个设备上启动热点),整个连接过程可以相对简单,在后台执行而无需用户直接参与其中.人类可读的房间名称不是问题,因为您可以从服务器发送任何内容.
如果对问题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或者什么......
| 归档时间: |
|
| 查看次数: |
2401 次 |
| 最近记录: |