Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
柿饼_PersimmonUI
TCP Socket demo based on PersimmonUI WiFi APIs
发布于 2019-04-19 11:13:21 浏览:1711
订阅该版
* 本帖最后由 Tonny 于 2019-4-19 11:24 编辑 * ```/* *这部分代码设计目标为:①根据给定的WiFi账号密码自动网络连接, * ②根据给定IP地址及端口号自动建立TCP Socket通讯, * ③WiFi断网时自动重连, * ④TCP Socket连接断开时自动重连; *本demo只是基于PersimmonUI WiFi APIs的简单应用; *目前程序可实现网络连接、TCP Socket通讯; *已知问题为:①服务器的TCP服务强制关闭后,柿饼模块会超时重启, * ②WiFi断线重连相关代码还未进行测试及验证; *抛砖引玉,希望有精通的小伙伴提出修改意见,进一步完善此代码; *特此鸣谢柿饼团队给予的大力技术支持。 */ var socketglobal; //存储已连接的socket套接字,供跨page调用。 var resglobal; //存储已连接wifi的信息。 var page = { /*此方法加载窗体前发生*/ onLoad:function(event) { var thiz=this; //避免类型对象的转移。 thiz.wifi = require('wifi');/*采用this.wifi而不是var wifi,把wifi绑定为page的一个属性,其他Page内的函数也可以进行操作。*/ /*这里不需要startWifi(),柿饼在启动的时候已经调用了。*/ /*为GetWifiLists事件添加listener。返回一个Array对象,存放所有得到的Wifi设备信息的对象。*/ thiz.wifi.onGetWifiList(function(res){ console.log("enter ongetwifilist"); console.log("there is " + res.length + " wifi"); thiz.res1=res; thiz.length=res.length; var str1,str2; for(var i = 0; i < res.length; i++){ var item = res*; console.log("ssid : "+ item.ssid); console.log("bssid : " + item.bssid); console.log("strength" + item.strength+"dB"); console.log("secure" + item.secure); /*这里涉及到CustomPanels的使用,不作扩展。*/ str1="label"+(i+1); /*构造label的id值。*/ str2="textbox"+(i+1); /*构造textbox的id值。*/ /*这里涉及列表控件的使用,不作扩展。*/ thiz.setData({ listctrl1:{ page : thiz, xml : 'Panels/wifiitem', items :[ {label1:{id:str1,value:res*.ssid,refresh:true}, textbox1:{id:str2,value:'***',refresh:true}}, ], } }); } thiz.setData({ net: { refresh: true } });/*刷新net页面。*/ }); /*为WifiConnected事件添加listener。*/ thiz.wifi.onWifiConnected(function(){ console.log("enter onwificonnected"); console.log("wifi is connected"); }); /*为NetConnected事件添加listener。*/ thiz.wifi.onNetConnected(function(){ console.log("enter onnetconnect"); thiz.socket_action(); console.log("socket is connected"); }); /*为NetDisonnected事件添加listener。*/ thiz.wifi.onNetDisonnected(function(){ console.log("net is disconnected"); console.log("try to reconnect the net."); var thiz=this; /*WiFi断线重连,但未测试验证可靠性!!!*/ thiz.wifi.connectWifi({ ssid: resglobal.ssid, /*必要参数。*/ bssid: resglobal.bssid, /*非必要参数。*/ password: resglobal.password, /*必要参数。*/ success : function(){ console.log("Wifi reconnect success") }, fail : function(){ console.log("Wifi reconnect fail") }, complete : function(){ console.log("Wifi reconnect complete") }, }); }); }, /* 此方法展示窗体前发生 */ onShow:function(event){ var thiz=this; thiz.setData({listctrl1 : {empty : true}}); thiz.setData({ net: { refresh: true } }); thiz.wifi.getWifiList({ /*获取周围wifi设备成功操作返回的回调函数。*/ success : function(){ console.log("getWifiList success"); }, /*获取周围wifi设备失败操作的回调函数。*/ fail : function(){ console.log("getWifiList fail"); }, complete : function(){ console.log("getWifiList complete"); }, }); }, /* 此方法关闭窗体前发生 */ onExit:function(event){ }, /*主动搜索按钮。*/ onBtn4:function(event){ var thiz=this; thiz.setData({listctrl1 : {empty : true}}); thiz.setData({ net: { refresh: true } }); thiz.wifi.getWifiList({ //获取周围wifi设备成功操作返回的回调函数 success : function(){ console.log("getWifiList success"); }, //获取周围wifi设备失败操作的回调函数 fail : function(){ console.log("getWifiList fail"); }, complete : function(){ console.log("getWifiList complete") }, }); }, //TCP Socket()通讯操作。 //先判断socket是否存在,存在则先关闭! socket_action:function(){ console.log("enter socket_action"); /*socket连接超时*/ var fun_timeout=function(){ console.log("socket timeout"); }; /*socket接收数据回调函数*/ var fun_data = function(res){ console.log("read " + res.length+" bytes :"+res.toString('utf8')); console.log("reveive some messages"); }; /*socket连接成功回调函数*/ var fun_connect=function (){ console.log('connect success'); socketglobal.write("Hello, this is XXX.",function(){console.log("socket writes successful,starts transmitting data.");}); }; var thiz=this; var net=require('net');/*创建基于流的TCP服务。*/ socketglobal=new net.Socket();/*TCP的client端不用显式创建,默认创建client端。*/ socketglobal.on('data',fun_data);/*注册fun_data为socket的data事件的listener。*/ socketglobal.connect(端口号,'IP地址',fun_connect);/*进行socket连接。*/ }, }; Page(page); page = 0; ```
查看更多
3
个回答
默认排序
按发布时间排序
Tonny
2019-04-19
这家伙很懒,什么也没写!
[i=s] 本帖最后由 Tonny 于 2019-4-19 11:29 编辑 [/i] 关于排版,请不要吐槽,我贴了三遍,尽力了{:2_35:},如有指教,请同步在群内@Tonny,不经常在论坛~
子胥
2019-04-19
这家伙很懒,什么也没写!
1. 建议 全局对象,存放在app.js中 2. 把wifii对象存放成全局对象,23行代码中,wifi则是page中的一个对象,当page被删除后,wifi对象也会被释放,达不到跨page使用 3. wifi.onGetWifiList()的回调函数中,不太需要保留返回数据。 4. 可以使用storage相关API,把需要的wifi数据设定在flash中,在app启动时,直接在内存的获取数据,并连接wifi socket相关问题,稍后回复.
Tonny
2019-04-19
这家伙很懒,什么也没写!
[i=s] 本帖最后由 Tonny 于 2019-4-19 18:37 编辑 [/i] >1. 建议 全局对象,存放在app.js中 >2. 把wifii对象存放成全局对象,23行代码中,wifi则是page中的一个对象 ... --- 嗯嗯,其实你的第3条我有其他用,没发出来,其他建议很有价值。:lol
撰写答案
登录
注册新账号
关注者
0
被浏览
1.7k
关于作者
Tonny
这家伙很懒,什么也没写!
提问
45
回答
131
被采纳
0
关注TA
发私信
相关问题
1
【PersimmonUI柿饼学习营】+ A Byte of China + 环境搭建&20W年薪广告
2
【柿饼学习营】+werrysuzhen+20W年薪作业
3
【PersimmonUI柿饼学习营】+ meetwit + 20W年薪广告&lesson01
4
【PersimmonUI柿饼学习营】+ DaZhou + 20W年薪作业+视频有彩蛋
5
【PersimmonUI柿饼学习营】+ DMY+ lesson01 20W年薪广告
6
【PersimmonUI柿饼学习营】+ Bigmagic+20W年薪广告&day01
7
【PersimmonUI柿饼学习营】+ chowguohua+年薪广告
8
【柿饼学习营】+werrysuzhen+脚本及事件学习
9
【PersimmonUI柿饼学习营】+ DaZhou+ 手把手教你做计算器
10
【PersimmonUI柿饼学习营】+ A Byte of China + 2048游戏
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
使用RC522软件包驱动FM1722
2
常量数据类型和表达式陷阱分享
3
进行i2c驱动移植的经验总结
4
在VSCode中使用clang-format
5
我该如何使用这个微雪的WIFI400 WIFI-LPB-100在rtt里或者我该怎样为它开发驱动
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
freemodbus
PWM
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
编译报错
Debug
rt_mq_消息队列_msg_queue
SFUD
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1444
个答案
289
次被采纳
张世争
809
个答案
175
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
catcatbing
3
篇文章
5
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
Woshizhapuren
1
篇文章
5
次点赞
YZRD
1
篇文章
2
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部