更改WiFi-Direct IP范围?在Android WiFi-Direct中强制使用IPv6?

时间:2016-04-26 14:19:00

标签: android ip ipv6 wifi-direct wifip2p

我有两个Android KitKat手机,两个都是作为群组所有者运行WiFi-Direct群组,我们称之为GO1和GO2

我设法将GO1作为传统客户端连接到GO2而不会破坏任何(先前设置的)wifi直接组。

问题在于,正如您所知,GO IP地址在Android源代码中是硬编码的,并设置为192.168.49.1

因此,我的两个设备GO1和GO2在本地网络上都有相同的IP地址(**)。

我的应用程序同时是客户端和服务器。但是两个网络都使用相同的IP范围(192.168.49.XXX),显然,我无法改变。

因此,如果他们同时托管WiFi-Direct组,我就无法在他们之间创建TCP连接,因为任何设备在尝试连接到192.168.49.1时都会连接到自身

所以问题是:

  • 有没有办法更改Wifi-Direct中使用的IP范围?
  • 有没有办法在Wifi-Direct中使用IPv6而不是IPv4?
  • 这可以不用手机来完成吗?
  • 还有其他建议吗?

**:实际上,因为GO1作为传统客户端连接到GO2,所以GO1被称为192.168.49.227(例如)到GO2,GO2被称为192.168.49.1到GO1。但是因为GO1也是GO,它的客户(以及它自己)也称为192.168.49.1。

2 个答案:

答案 0 :(得分:1)

在不使用手机的情况下解决此问题的方法是通过多播UDP *发送数据包。这些数据包将从GO1到GO2。

这有一些副作用:

  • 要将其用于网络,您必须在OSI应用程序级别执行封装和路由(效率不高)。

  • 您还需要根据MAC地址进行路由,因为每个设备都具有相同的192.168.49.1地址。

  • "重要的是要注意多播套接字封装了一对多的单播通信,因此,无法充分利用总的可用WiFi和WiFi Direct带宽" *

还有其他值得注意的事情:

  • 当您扩展GO的数量时,您将遇到在同一个wifi通道上运行的所有节点的问题。这对一些设备来说不是问题,但是有数百台设备,这将是一个巨大的问题。

*这种方法在Colin Funai,Cristiano Tapparello和Wendi Heinzelman论文中提到,标题为"通过WiFi直接多组网络支持多跳设备到设备网络"在这里找到:https://arxiv.org/pdf/1601.00028.pdf

答案 1 :(得分:0)

无法更改IP范围,因为正如您正确指出的那样,它在Android Wi-Fi Direct系统服务中是硬编码的。就个人而言,我不知道在Wi-Fi P2P接口上启用了IPv6,即使它是,它也可能是一个硬编码的IPv6地址。

如果GO1和GO2必须在GO模式下相互连接,那么可能会考虑使用蓝牙或其他传输来允许它们进行通信。如果可以延迟GO1和GO2之间的通信,则缓存要交换的任何信息,并且当一个设备可以是另一个设备的客户端时,可以在这两个设备之间发送它。当GO1可以停止成为GO并且可以成为GO2的客户时。