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

这篇具有很好参考价值的文章主要介绍了无需服务器:Android 应用中使用 P2P 技术进行局域网内设备通信。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

随着局域网内设备数量的不断增加和不断演化的 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://www.toymoban.com/news/detail-630550.html

到了这里,关于无需服务器:Android 应用中使用 P2P 技术进行局域网内设备通信的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 阿里云盘自动每日签到无需部署无需服务器(仅限学习交流使用)

    阿里云盘自动每日签到,无需部署,无需服务器 执行思路:使用金山文档的每日定时任务,执行阿里云盘签到接口。   1、进入金山文档网页版 金山文档官网: https://www.kdocs.cn/ 2、新建一个空表格 点击【效率】-【高级开发】-【AirScript脚本编辑器】   3、点击【创建脚本】

    2024年02月16日
    浏览(43)
  • P2P 应用

    ·在 P2P 工作方式下,所有的音频/视频文件都是在普通的互联网 用户之间传输 。 ·Napster 最早 使用 P2P 技术,提供免费下载 MP3 音乐。 ·Napster 将所有音乐文件的索引信息都集中存放在 Napster 目录服务器中。 ·使用者只要查找目录服务器,就可知道应从何处下载所要的 MP3 文件

    2024年02月19日
    浏览(42)
  • 【OpenSSH】无需公网IP使用SSH远程连接服务器

    转发自CSDN远程穿透的文章:【vscode远程开发】使用SSH远程连接服务器 「内网穿透」 远程连接服务器工具有很多,比如XShell、putty等,可以通过ssh来远程连接服务器,但这用于写代码并不方便,可能需要现在本地写好代码后再将源代码传送到服务器运行、服务器上的图片也无

    2024年02月04日
    浏览(80)
  • Android12 P2P 初始化

    目录  学习资料:Android Miracast 投屏 1. 开机log 2. WifiP2pService 启动

    2024年02月06日
    浏览(50)
  • 使用公网访问内网IIS网站服务器【无需公网IP】

    前言 这里介绍通过内网穿透,实现公网访问内网IIS网站服务器。 都知道,现在基本不会被分配到公网IP了,普遍是内网IP。而在没有公网IP的情况下,想要从公网访问在本地的IIS网站服务器,一般都是通过内网穿透。 市面上内网穿透的工具有很多,但是有的会限制流量,或者

    2024年02月13日
    浏览(55)
  • Android WiFi P2P数据传输

    WiFi P2P是指通过WiFi直接连接两台设备之间的无线点对点通信,不需要通过路由器或者互联网。这种技术被广泛应用于移动设备之间的文件共享、游戏联机、音乐播放等应用场景中。 WiFi P2P的优点在于可以在没有网络的情况下建立设备之间的连接,同时具有高速和低延迟的特点

    2024年02月07日
    浏览(42)
  • 使用 cpolar 内网穿透将本地 web 网站发布上线(无需服务器)

    当我们以本地电脑做服务器搭建web网站时,如何将它发布到互联网上,实现公网用户都可以访问内网的web网站就变得很重要。 这里我们以macOS系统自带的Apache为例,在本地启用Apache服务器,并通过cpolar内网穿透将其暴露至公网,实现在外公网环境下访问本地web服务,无需购买

    2024年01月23日
    浏览(72)
  • 使用frp中的xtcp映射穿透指定服务实现不依赖公网ip网速的内网穿透p2p

    通过frp实现内网client访问另外一个内网服务器 1)配置公网服务端frps 2)配置内网服务端frpc Ubuntu 配置公网服务端frps 配置 frps.ini ./frps -c frps.ini 启动 配置service自启(可选) /etc/systemd/system/frps.service systemctl start frps.service 启动服务 systemctl enable frps 设置自启 配置内网服务端frpc 配

    2024年02月15日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包