需求分析:连接指定IP和端口显示接收的内容具有发送的功能 控件介绍Socket连接场景介绍:应用通过Socket进行数据传输,支持TCP和UDP两种协议。接口说明:Socket连接主要由socket模块提供。具体接口说明如下表。 基本例程(参考我之前的家庭医生终端系统):importsocketfromohos。net。socket;lettcpsocket。constructTCPSocketInstance();tcp。bind({address:0。0。0。0,port:12121,family:1},err{if(err){console。log(bindfail);return;}console。log(bindsuccess);})tcp。on(message,value{console。log(onmessage,message:value。message,remoteInfo:value。remoteInfo)letdaresolveArrayBuffer(value。message);letdatbuffString(da);此处对接受到的数据进行处理});将接受到的数据转化为文本型functionresolveArrayBuffer(message){if(messageinstanceofArrayBuffer){letdataViewnewDataView(message)letstrfor(leti0;idataView。byteLength;i){letcString。fromCharCode(dataView。getUint8(i))if(c!){strc}}returnstr;}}数据的发送函数functionsendonce(Conbuff){if(flagfalse){letpromisetcp。connect({address:{address:xxx。xxx。xxx。xxx,port:xxxx,family:1},timeout:2000});promise。then((){console。log(connectsuccess);flagtrue;tcp。send({data:Conbuff},err{if(err){console。log(sendfail);return;}console。log(sendsuccess);})})。catch(err{console。log(connectfail);});}elseif(flagtrue){tcp。send({data:Conbuff},err{if(err){console。log(sendfail);return;}console。log(sendsuccess);})}}AppStorage与组件同步 在管理组件拥有的状态中,已经定义了如何将组件的状态变量与父组件或祖先组件中的State装饰的状态变量同步,主要包括Prop、Link、Consume。 本章节定义如何将组件变量与AppStorage同步,主要提供StorageLink和StorageProp装饰器。StorageLink装饰器 组件通过使用StorageLink(key)装饰的状态变量,与AppStorage建立双向数据绑定,key为AppStorage中的属性键值。 当创建包含StorageLink的状态变量的组件时,该状态变量的值将使用AppStorage中的值进行初始化。 在UI组件中对StorageLink的状态变量所做的更改将同步到AppStorage,并从AppStorage同步到任何其他绑定实例中,如PersistentStorage或其他绑定的UI组件。StorageProp装饰器 组件通过使用StorageProp(key)装饰的状态变量,将与AppStorage建立单向数据绑定,key标识AppStorage中的属性键值。 当创建包含StoageProp的状态变量的组件时,该状态变量的值将使用AppStorage中的值进行初始化。 AppStorage中的属性值的更改会导致绑定的UI组件进行状态更新。letvarAAppStorage。Link(varA)letenvLangAppStorage。Prop(languageCode)EntryComponentstructComponentA{StorageLink(varA)varA:number2StorageProp(languageCode)lang:stringenprivatelabel:stringcountprivateaboutToAppear(){this。label(this。langzh)?数:Count}build(){Row({space:20}){Button({this。label}:{this。varA})。onClick((){AppStorage。Setnumber(varA,AppStorage。Getnumber(varA)1)})Button(lang:{this。lang})。onClick((){if(this。langzh){AppStorage。Setstring(languageCode,en)}else{AppStorage。Setstring(languageCode,zh)}this。label(this。langzh)?数:Count})}}} 即通过AppStorage。Link和StorageLink的方式,可实现外部动态刷新Text组件和image组件(等等之类都可以),方便我们在全局调用时更新数据。 UI设计 本项目的基本内容是可以在预览器中看到的,所以先在预览器中简单设计UI。基本界面 以后不会大时间讲解UI了,会直接放成品,且我的源码都在Gitee仓上存在,需要的可以自己下载,会着重体现程序部分。接口绑定 首先是接收框处的变量绑定:letRcmessageAppStorage。Link(Rcmessage)StorageLink(Rcmessage)Rcmessage:String收到消息Text({this。Rcmessage})。width(98)。height(35)。borderStyle(BorderStyle。Solid)。borderWidth(8)。borderColor(0xAFEEEE)。borderRadius(20)。fontSize(25) TCP回调设置tcp。on(message,value{console。log(onmessage,message:value。message,remoteInfo:value。remoteInfo)letdaresolveArrayBuffer(value。message);letdatbuffString(da);AppStorage。SetString(Rcmessage,datbuff);AppStorage。SetString(ID1stata,rgba(0,109,229,0。95));}); 该部分实现聊天框内部的文字刷新。IP设置 这里我是使用的合宙的TCP工具〔wstool(luatos。com)〕( 在此处修改IP和端口: 远端模拟器 在模拟器中打开如上。 实际测试 使用模拟器进行发送: 在TCP工具处有接收到内容,此时进行回复。 在APP端可以接收到并显示(暂时可能只支持英文接受显示)。 动态图 TCP助手显示如下: 本项目Gitee仓地址:https:gitee。comlalhaneTsStudy