文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

无需服务器:Android 应用中使用 P2P 技术进行局域网内设备通信

2023-09-09 08:34

关注

随着局域网内设备数量的不断增加和不断演化的 IoT 技术,设备之间的互联变得越来越重要。对于许多 Android 应用程序而言,这样的互联性是必不可少的,需要使用一些技术来实现跨设备的通信。P2P 技术(点对点技术)已证明是一种非常成功的通信技术,可以实现在局域网内设备之间建立直接连接,而无需通过服务器进行通信。在本文中,我们将介绍如何在 Android 应用中利用 P2P 技术实现局域网内设备通信,以及如何为应用程序实现该功能。

P2P 技术基础

P2P(Peer-to-Peer)是指一种计算机网络通信的方式,它使得设备之间可以直接相互通信,而不必通过服务器或者其他中介设备。P2P 技术广泛地应用于文件共享、在线游戏、实时通信等场景。

在 P2P 技术中,每个设备都既是客户端,又是服务器。设备之间可以直接相互通信,不受中介设备的限制。由于它无需经过服务器就可以使设备之间相互通信,所以 P2P 技术常常被称为无服务器(Serverless)技术。

在 Android 应用中也可以使用 P2P 技术实现设备间通信。为了实现 P2P 技术,Android 应用可以使用 Wi-Fi Direct 技术。Wi-Fi Direct 技术允许设备在没有网络连接的情况下直接相互通信。在局域网内, Wi-Fi Direct 技术可以通过 Wi-Fi 连接,使设备之间能够建立直接的连接。

在 Android 应用中实现 P2P 技术

在 Android 应用中实现 Wi-Fi Direct 技术,需要注意以下几个步骤:

添加 Wi-Fi Direct 权限

首先,在 AndroidManifest.xml 文件中添加 Wi-Fi Direct 相关的权限,包括 ACCESS_WIFI_STATE、CHANGE_WIFI_STATE、ACCESS_COARSE_LOCATION、WRITE_EXTERNAL_STORAGE、READ_PHONE_STATE 权限和硬件特性android.hardware.wifi.direct 权限。

<manifest>        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>    <uses-feature android:name="android.hardware.wifi.direct" android:required="true"/>    manifest>

初始化 Wi-Fi Direct

然后,在 Activity 中初始化 Wi-Fi Direct:

WifiP2pManager mManager;Channel mChannel;mManager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);mChannel = mManager.initialize(this, getMainLooper(), null);

搜索设备

接下来,需要搜索局域网内的设备:

mManager.discoverPeers(mChannel, new WifiP2pManager.ActionListener() {    @Override    public void onSuccess() {        // 搜索成功    }    @Override    public void onFailure(int reason) {        // 搜索失败    }});

获取设备列表

执行上述操作后,可以获取搜索到的设备列表,例如:

mManager.requestPeers(mChannel, new WifiP2pManager.PeerListListener() {    @Override    public void onPeersAvailable(WifiP2pDeviceList peers) {        List<WifiP2pDevice> deviceList = new ArrayList<>(peers.getDeviceList());        // 获取设备列表    }});

这个回调函数需要将设备列表保存到一个 List 中。

建立连接

如果要与另一个设备建立连接,可以执行以下操作:

WifiP2pConfig config = new WifiP2pConfig();config.deviceAddress = device.deviceAddress;config.wps.setup = WpsInfo.PBC;mManager.connect(mChannel, config, new WifiP2pManager.ActionListener() {    @Override    public void onSuccess() {        // 连接成功    }    @Override    public void onFailure(int reason) {        // 连接失败    }});

在这个代码段中,需要创建一个 WifiP2pConfig 对象来指定要连接的设备,然后使用 connect() 方法来建立连接。

传输数据

连接成功后,可以使用 WifiP2pManager 实例来传输数据。例如,可以使用 WifiP2pManager.send() 方法来发送数据:

String data = "Hello, World!";byte[] bytes = data.getBytes();mManager.requestConnectionInfo(mChannel, new WifiP2pManager.ConnectionInfoListener() {    @Override    public void onConnectionInfoAvailable(WifiP2pInfo info) {        if (info.groupFormed && info.isGroupOwner) {            // 如果当前设备是组长            WifiP2pGroup group = info.group;            InetAddress address = group.getOwner().deviceAddress;            // 将数据发送给客户端            mManager.send(mChannel, address, 8888, bytes, new WifiP2pManager.ActionListener() {                @Override                public void onSuccess() {                    // 发送成功                }                @Override                public void onFailure(int reason) {                    // 发送失败                }            });        }    }});

需要注意的是,在传输数据之前需要确保两台设备已经成功建立连接。

总结

P2P 技术是 Android 应用中构建局域网设备通信的一种有效方式。通过使用 Wi-Fi Direct 技术,可以实现设备之间的直接通信,而无需经过服务器或者其他中介设备。要在 Android 应用程序中实现 P2P 技术,需要完成以下步骤:添加 Wi-Fi Direct 权限,初始化 Wi-Fi Direct,搜索设备,获取设备列表,建立连接和传输数据等。借助 P2P 技术, Android 应用程序可以实现更高效的局域网通信,从而增强用户体验。

来源地址:https://blog.csdn.net/qq_24252589/article/details/131105875

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-服务器
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯