添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
耍酷的回锅肉  ·  Android ...·  9 月前    · 
卖萌的瀑布  ·  Verilog ...·  1 年前    · 

WIFI 直连简介

从Android4.0(API Level=14)开始,允许通过Wi-Fi模块在两个移动设备之间建立直接连接(这种技术称为Wi-Fi Direct),这种连接不需要无线路由作为中介,而只是像蓝牙一样在两个设备之间直接建立的数据传输通道。在Android SDK中提供了一些API,通过这些API可以发现其它支持Wi-Fi Direct的设备,也可以接收其它设备的Wi-Fi Direct请求。在Wi-Fi Direct出现之前,通常使用蓝牙或利用无线路由连接多部Android设备,蓝牙的有效距离比较短,而且传输速率不如Wi-Fi。不过有了Wi-Fi Direct后,两部设备可以直接连接,既方便又快速,非常适合数据分享。

WIFI 直连基本基本过程

通常WIFI 直连设备即有socket客户端,又有socket服务端.

1,搜索附近WIFI 直连设备

2,连接WIFI 直连设备,

3,用socket通信.

Wi-Fi Direct的核心API

WifiP2pManager类 该类中提供了允许用户发现、请求和连接其它支持Wi-Fi Direct设备的API。
Wi-Fi Direct广播接收器类 用于监听Wi-Fi Direct请求的广播接收器.
事件接口 被Wi-Fi Direct框架检测到的事件通知,例如,终止连接、发现新的Wi-Fi Direct设备等。

Wi-Fi Direct广播接收器的广播消息

WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION 检测Wi-Fi是否可用,并且将检测结果通知相应的窗口。
WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION

调用WifiP2pManager.requestPeers方法获取成功连接的设备列表。

注意它是搜索完所有设备后产生一个广播消息,而蓝牙是搜到一个产生一个广播消息
WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION 响应Wi-Fi连接状态(连接或断开)。
WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION 响应设备的Wi-Fi状态变化。

搜索Wi-Fi Direct设备

1,开始搜索

使用Wi-Fi Direct进行通信,首先要搜索周围有没有其它的Wi-Fi Direct设备。完成这项工作需要调用WifiP2pManager.discoverPeers方法.

 1 mChannel = mManager.initialize(this, getMainLooper(), null);
 2 mManager.discoverPeers(mChannel, new WifiP2pManager.ActionListener() 
 4     //  成功发现周围有Wi-Fi Direct设备
 5     @Override
 6     public void onSuccess() {//只通知成功,并没有数据
 7         ...
 9     //  未发现周围有Wi-Fi Direct设备
10     @Override
11     public void onFailure(int reasonCode) {//只通知失败,并没有数据
12         ...
13     }
14 });

2,得到设备列表

 1 PeerListListener myPeerListListener;
 2 ...
 3 if (WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION.equals(action)) {
 5 if (mManager != null) 
 7     //  异步获取可用的Wi-Fi Direct设备
 8         mManager.requestPeers(mChannel, myPeerListListener);
10 }
12 public interface PeerListListener 
13 {//通过这个接口得到所有direct设备列表
14      public void onPeersAvailable(WifiP2pDeviceList peers);
 

连接Wi-Fi 直连设备

 1 WifiP2pDevice device;
 2 … … //  需要从前面得到的设备列表中获取相应的设备(WifiP2pDevice对象)
 3 //  创建WifiP2pConfig对象
 4 WifiP2pConfig config = new WifiP2pConfig();
 5 //  存储设备的MAC地址
 6 config.deviceAddress = device.deviceAddress;
 7 //  开始连接设备
 8 mManager.connect(mChannel, config, new ActionListener() {
 9     //  当成功连接设备后调用该方法
10     @Override
11     public void onSuccess() {
12         //success logic
13     }
14     连接设备失败后调用该方法
15     @Override
16     public void onFailure(int reason) {
17         //failure logic
18     }
19 });
 1 WifiP2pManager. requestConnectionInfo(...)
 3 public void requestConnectionInfo(Channel c, ConnectionInfoListener listener);
 6 public interface ConnectionInfoListener 
 8     public void onConnectionInfoAvailable(WifiP2pInfo info);
12 WifiP2pInfo.groupOwnerAddress.getHostAddress
 
客户端用Socket连接、服务端用ServerSocket.accept等待客户端连接

转载于:https://www.cnblogs.com/sjjg/p/4786971.html

原文链接:http://www.cnblogs.com/sjjg/p/4786971.html 0. 准备好一个服务器、一个WiFi模块、一个串口助手 1. 程序打包部署到服务器上运行 2. 实现socket多线程,监听端口1314,最大socket队列100,都可以人为设置 3. 模拟了对串口助手发送来的一串十六进制数据进行解析 4. 使用串口助手发送数据,模拟数据如图“模拟数据.png”所示 爱吃凉拌辣芒果 2022年6月8日 vue + vuex + elementUi + socket.io实现一个简易的在线聊天室,提高自己在对vue系列在项目中应用的深度。因为学会一个库或者框架容易,但要结合项目使用一个库或框架就不是那么容易了。功能虽然不多,但还是有收获。设计和实现思路较为拙劣,恳请各位道友指正。 可以达到的需求 能查看在线用户列表 能发送和接受消息 使用到的框架和库 socket.io做为实时通讯基础 vuex/vue:客户端Ui层使用 Element-ui:客户端Ui组件 类文件关系图 服务端实现 实现聊天服务器的相关功能,包含通讯管道的创建、用户加入、消息的接受 前段时间公司让做一个通过手机连接硬件设备上的wifi实现手机app和硬件设备的数据通讯。当时做的时候查相关资料比较少,担心以后遇到相似需求忘记具体细节,在这写一下记录一下。 先说一下心路历程,因为个人开发的一个APP,需要连接蓝牙模块进行设备控制和双向的数据通信,所以尝试用uni-app开发一个手机程序对购买的蓝牙模块进行连接,emm.......怎么说呢,理论上过程都是通的,但坑还是太多了。今天过程跑通了,特来总结一下。说明下,代码太长了,所以我准备分段说明展示,完整代码到时候我上传到github上,地址最后我写在评论里哈。进入正题........... 1.蓝牙通信整体流程 上图一共九个步骤就是创建uni-app/微信小程序连接蓝牙设备并进行通信的基本步. 本篇会详细讲解如何在uniapp开发中去使用长连接,如有疑问可以下方评论或者私聊。 一、引入第三方插件socket.io import io from '@/common/uni-socket.io.js'; 二、建立长连接 onSocket(state,user) { //每次建立长连接之前先断开连接,防止重复 if(state.socket){ state.socket.close() const S = io(socketUrl, { //长连接接 关键词:HBuilder uniapp wifi RSSI SSID 最近做项目有一个需求,要求用HBuilder uniapp做一个app显示手机可接收的WiFi名称和对应的场强(信号强度) 背景使用uni-app 打包 app;适用很多版本 mqtt 支持H5端,但是app端并不支持;资料mqttws31.jsmqttws31.js 其实是 paho-mqtt 的早期版本;.vue 无法直接引入 mqttws31.js,所以对 mqttws31.js进行了一些修改;mqttws31.js 除了网上常见的版本外,git上还有一个自动重连的分支版本,这里使用的就是这个分支版本;plus... 如果要找线程与进程的区别,可以转车了哈。 首先说一下我的目的: 我有一个WiFi模块我希望将其获取到的数据传给我的服务器,服务器一直监听某个端口,然后将收到的数据进行处理,再存入数据库,之后的操作就是显示页面了。 因为服务器一直在监听有没有收到信息,或者说是否有连接,那么思路就是主线程是一直监听某个这个信息或者端口,一旦有阻塞(说明有人发数据),就创建一个子线程来接收并处理这个信息 **模拟的客... 真正意义上的实时的话需要类似nrf这类2.4G无线模块,直接传输。但如果实时性要求不高的话可以用esp8266,里面集成了网络的协议栈,开发起来很方便,可以直接接入网络跟手机进行tcp、udp之类的配对,但会因为网络延迟之类产生延时。最后最差的就是各种云平台,因为有上报周期限制,往往同步速度延迟达到秒级别,但胜在可以方便地运行在不同网段,否则的话就需要自己搭公网——自己搭公网服务器可以拜托上报周期...