Android Wi-Fi 直连网络

2024-01-04

我正在Android上开发一个应用程序,我正在搜索范围内的所有对等点,然后与所有这些点连接,发起发现的设备成为组所有者,所有其他人成为客户端,我已经完成了所有连接的事情但现在我想让群组所有者向所有连接的对等点发送消息,如何实现这一点,还请告诉我点对点通信的方法是什么,Android中的p2p是否也使用IP来发送和接收数据?

谢谢 问候塔利布。


Wi-Fi Direct/P2P 可被视为普通 Wi-Fi,但组所有者 (GO) 充当软件接入点(dhcp 服务器、配置等)。所以回答你的最后一个问题,是的,Wi-Fi Direct 也使用 IP 发送和接收数据。

您想向群组中的所有成员发送数据吗?对此有两种解决方案:

  1. 使用多播广播一次消息。
  2. 将消息发送给组中的每个单独客户端。

最有效的方法是解决方案 1,使用多播广播数据,因为您只需要发送一次数据。不幸的是,Android 中的 Wi-Fi 多​​播支持非常分散,因为许多设备似乎会阻止非单播流量。看本文 http://codeisland.org/2012/udp-multicast-on-android/如果您想沿着这条路线走下去,请获取更深入的信息。

如果您想保证所有设备上的支持并且仅传输少量数据,则解决方案 2 是最佳方法。 GO 需要组中客户端的 IP 地址,但由于 Android 中 Wi-Fi Direct 的实现方式,所有设备只知道 GO IP。一种解决方案是让客户端连接到 GO 上的套接字,以获取其 IP 地址:

客户端代码

private static final int SERVER_PORT = 1030;

... // on group join:
wifiP2pManager.requestConnectionInfo(channel, new ConnectionInfoListener() {
    @Override
    public void onConnectionInfoAvailable(WifiP2pInfo p2pInfo) {
        if (!p2pInfo.isGroupOwner) {
            // Joined group as client - connect to GO
            Socket socket = new Socket();
            socket.connect(new InetSocketAddress(p2pInfo.groupOwnerAddress, SERVER_PORT));
        }
    }
});

群组所有者代码:

private static final int SERVER_PORT = 1030;
private ArrayList<InetAddress> clients = new ArrayList<InetAddress>();

public void startServer() {
    clients.clear();
    ServerSocket serverSocket = new ServerSocket(SERVER_PORT);

    // Collect client ip's
    while(true) {
       Socket clientSocket = serverSocket.accept();
       clients.add(clientSocket.getInetAddress());
       clientSocket.close();
    }
}

现在您需要做的就是在每个客户端上启动一个serversocket,然后遍历客户端列表,为每个客户端创建一个套接字连接并发送您想要广播的消息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android Wi-Fi 直连网络 的相关文章

随机推荐

  • TinyMCE初始化后修改工具栏的正确方法

    我正在使用 JavaScript 扩展云托管的 LMS 因此 我们可以在页面中添加javascript 但不能针对不同的组件修改供应商的javascript LMS 经常使用tinyMCE 目标是在每个tinyMCE编辑器的工具栏上添加一个
  • 通过向包装器传递 R 中的一组参数来生成 N 个 ggplot 图?

    我有一个输出数据框的函数 如下所示 df A tibble 100 x 7 test idx train user id test user id train idx D isSame D rank
  • 如何修复 PHP 警告:PHP 启动:无法加载动态库 'ext\\php_curl.dll'?

    我目前在 Windows Server 2008 R2 上安装了 PHP 5 5 12 和 Apache 2 4 一切都运行完美 没有问题 警告 我所做的是将相同的 Apache 文件 配置复制到另一台服务器 我复制了C PHP目录 然后是
  • 正则表达式在文本中查找 url

    我必须使用正则表达式找到文本中的第一个网址 例如 I love this website http www youtube com music it s fantastic or es http www youtube com music
  • 具有可变数量的特定类型参数的 C++ 函数

    我刚刚了解了 C 中的可变参数模板 我实现了它 但我想知道它可以执行以下操作吗 如果我想要一个参数数量可变的函数 我可以这样做 template
  • 如何在React函数组件中不使用useEffect钩子来获取数据?

    我知道使用钩子时的传统方法是使用useEffect钩 但是为什么我不能直接在功能组件中调用axios而不是hook然后设置数据呢 基本上 我想问这样做有什么问题 const users setUsers useState null axio
  • 动态设置字典深处的值

    如果我有一个嵌套字典d a b 和一个字符串 a b c 和一个值 X 我需要根据键字符串将值放入字典中 我想要实现的目标可以硬编码为d a b c X 但我需要动态地做到这一点 密钥字符串可以是任意长度 对于奖励积分 如果密钥不存在 我还
  • 跟踪代码中某个点的所有语句

    我正在尝试跟踪复杂的 Python 应用程序 OpenERP 中的调用和代码流 更复杂的是 OpenERP 有自己的继承系统 与普通的 Python 继承并行 我想做的是获得执行代码的完整列表 以及模块 函数名称 我尝试过 Eclipse
  • 在 jQuery 验证中忽略所有隐藏的 div,但不忽略一个

    我在表单中使用 jQuery 验证http jqueryvalidation org documentation http jqueryvalidation org documentation 我想将验证添加到我的所有字段 但我想忽略隐藏的
  • 在 Mendix 中更新实体时,数据视图未更新

    问题是 如何在数据视图中显示数据 以便如果实体更新 数据视图也会更新 这是我的实体名称latestReading 这是我的页面LatestReading显示最新读数 它包含三个数据视图 该页面不会直接调用 因为它需要一个对象latestRe
  • 对 Ruby on Rails 应用程序的 OpenID 支持

    在 Ruby on Rails 应用程序中启用 OpenID 登录的最新技术是什么 这是一个社区 wiki 其中包含该问题的最新答案 真实逻辑 最先进的身份验证解决方案似乎是真实逻辑 http github com binarylogic
  • Angular 6 - 请求的资源上不存在“Access-Control-Allow-Origin”标头

    我有一个 Angular 6 项目 其中有一个服务指向 server js Angular is on port 4200 and Server js is on port 3000 当我将服务指向http localhost 3000 a
  • 为什么我的 QT 应用程序无法运行?

    我在 Windows 7 64 位 使用 msvc 2010 上使用 Qt Creator 构建了一个 Qt 5 应用程序 该应用程序在我的计算机上完美运行 但在其他计算机上无法运行 我复制了所有显示为缺失的 dll依赖步行者进入程序文件夹
  • vuejs中的beforeMount和created生命周期钩子有什么区别

    我仍然不清楚应该在哪里使用 beforeMount 以及在哪里创建生命周期挂钩 在我看来 在这两种情况下 反应数据都已加载 并且是在 DOM 挂载之前 大多数情况下 是否使用并不重要beforeMount or created但有一些地方很
  • 当我必须排除导航栏时如何使 div 为显示高度的 100%

    有个问题我在导航栏下面有一个 div 我希望 div 拥有 100 的剩余空间 并在其周围添加一个漂亮的填充作为 Frame 它不应该是可以滚动的 另外 我无法以某种方式绑定导航栏 因为在项目中它的组件完全不同 我尝试简化我的代码 nav
  • 使用 Ransack 搜索多个字段

    我正在使用 Ransack 来允许对我的用户进行高级搜索 目前 用户已first name middle name and last name列 这是我的代码 field f attribute fields do a a attribut
  • GetProcAddress 返回 NULL

    我必须使用 DLL 中的一个简单函数 我能够加载库 但 GetProcAddress 返回 NULL 我想我理解名称修改 但也许我做错了什么 谢谢 代码如下 我将尽快添加所需的其他信息 mydll h ifdef MYDLL EXPORTS
  • 我可以用 JPA 命名我的约束吗?

    当我使用 maven hibernate3 plugin 又名 hbm2ddl 生成数据库模式时 它会创建许多数据库约束 其约束名称非常难以记住 例如FK7770538AEE7BC70 有没有办法提供一个更有用的名称 例如FOO FK BA
  • 在 Shiny 中单击按钮时自动滚动

    我有一个选项卡式闪亮应用程序 它根据用户输入生成相当多的内容 我试图弄清楚每次生成新内容时如何滚动到活动选项卡的底部 我尝试实现此中给出的答案question https stackoverflow com questions 366777
  • Android Wi-Fi 直连网络

    我正在Android上开发一个应用程序 我正在搜索范围内的所有对等点 然后与所有这些点连接 发起发现的设备成为组所有者 所有其他人成为客户端 我已经完成了所有连接的事情但现在我想让群组所有者向所有连接的对等点发送消息 如何实现这一点 还请告