范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

鸿蒙上实现简单的聊天功能

  需求分析:连接指定 IP 和端口 显示接收的内容 具有发送的功能
  控件介绍 ①Socket 连接场景介绍:应用通过 Socket 进行数据传输,支持 TCP 和 UDP 两种协议。接口说明:Socket 连接主要由 socket 模块提供。具体接口说明如下表。
  基本例程(参考我之前的家庭医生终端系统): import socket from "@ohos.net.socket"; let tcp = socket.constructTCPSocketInstance();  tcp.bind({address: "0.0.0.0", port: 12121, family: 1}, err => {   if (err) {     console.log("bind fail");     return;   }   console.log("bind success"); })  tcp.on("message", value => {   console.log("on message, message:" + value.message + ", remoteInfo:" + value.remoteInfo)   let da = resolveArrayBuffer(value.message);   let dat_buff = String(da); //此处对接受到的数据进行处理    }); //将接受到的数据转化为文本型            function resolveArrayBuffer(message){    if (message instanceof ArrayBuffer) {     let dataView = new DataView(message)     let str = ""     for (let i = 0;i < dataView.byteLength; ++i) {       let c = String.fromCharCode(dataView.getUint8(i))       if (c !== " ") {         str += c       }     }     return str;   } } //数据的发送函数 function send_once(Con_buff) {   if (flag == false) {      let promise = tcp.connect({ address: { address: "xxx.xxx.xxx.xxx", port: xxxx, family: 1 }, timeout: 2000 });     promise.then(() => {       console.log("connect success");       flag = true;       tcp.send({         data: Con_buff       }, err => {         if (err) {           console.log("send fail");           return;         }         console.log("send success");       })     }).catch(err => {       console.log("connect fail");     });    } else if (flag == true) {     tcp.send({       data: Con_buff     }, err => {       if (err) {         console.log("send fail");         return;       }       console.log("send success");     })   } }②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 组件进行状态更新。 let varA = AppStorage.Link("varA") let envLang = AppStorage.Prop("languageCode") @Entry @Component struct ComponentA {   @StorageLink("varA") varA: number = 2   @StorageProp("languageCode") lang: string = "en"   private label: string = "count"    private aboutToAppear() {     this.label = (this.lang === "zh") ? "数" : "Count"   }    build() {     Row({ space: 20 }) {        Button(`${this.label}: ${this.varA}`)         .onClick(() => {           AppStorage.Set("varA", AppStorage.Get("varA") + 1)         })       Button(`lang: ${this.lang}`)         .onClick(() => {           if (this.lang === "zh") {             AppStorage.Set("languageCode", "en")           } else {             AppStorage.Set("languageCode", "zh")           }           this.label = (this.lang === "zh") ? "数" : "Count"         })     }   } }
  即通过 AppStorage.Link 和 @StorageLink 的方式,可实现外部动态刷新 Text 组件和 image 组件(等等之类都可以),方便我们在全局调用时更新数据。
  UI 设计
  本项目的基本内容是可以在预览器中看到的,所以先在预览器中简单设计 UI。 ①基本界面
  以后不会大时间讲解 UI 了,会直接放成品,且我的源码都在 Gitee 仓上存在,需要的可以自己下载,会着重体现程序部分。 ②接口绑定
  首先是接收框处的变量绑定: let Rc_message = AppStorage.Link("Rc_message") @StorageLink("Rc_message") Rc_message: String = "收到消息"       Text(`${this.Rc_message}`)         .width("98%")         .height("35%")         .borderStyle(BorderStyle.Solid).borderWidth(8).borderColor(0xAFEEEE).borderRadius(20)         .fontSize(25)
  ③TCP 回调设置 tcp.on("message", value => {   console.log("on message, message:" + value.message + ", remoteInfo:" + value.remoteInfo)   let da = resolveArrayBuffer(value.message);   let dat_buff = String(da);   AppStorage.Set("Rc_message",dat_buff); //AppStorage.Set("ID_1_stata","rgba(0, 109, 229, 0.95)"); });
  该部分实现聊天框内部的文字刷新。 ④IP 设置
  这里我是使用的合宙的 TCP 工具[wstool (luatos.com)](
  在此处修改 IP 和端口:
  ⑤远端模拟器
  在模拟器中打开如上。
  实际测试
  使用模拟器进行发送:
  在 TCP 工具处有接收到内容,此时进行回复。
  在 APP 端可以接收到并显示(暂时可能只支持英文接受显示)。
  动态图
  TCP 助手显示如下:
  本项目 Gitee 仓地址:https://gitee.com/lalhan/eTs_Study

翔宇医疗2022年实现营收4。89亿元,净利润1。21亿元大河财立方消息2月10日,翔宇医疗披露2022年业绩快报。2022年,翔宇医疗实现营业收入4。89亿元,同比减少6。68归母净利润1。21亿元,同比减少39。98扣非净利润65162022年,河南省社会消费品零售总额同比增长0。1大河财立方消息2月8日,河南省统计局发布20222023年河南省消费品市场形势分析与展望。2022年,全省上下认真贯彻落实党中央国务院和省委省政府各项决策部署,统筹推进疫情防控和经终于名正言顺!普尔库里回来之前能不能进季后赛就看我的了勇士官方宣布库里韧带伤病缺席一段时间。随后主教练科尔接受了媒体的采访时表示在谈到库里缺阵期间的阵容变化时普尔将在库里缺阵期间担任球队首发!库里我累了先休息一下,球队靠你俩压阵了!库德雷蒙德格林不喜欢欧文交易,因为独行侠太难防了勇士前锋德雷蒙德格林在自己的播客中,谈到了凯里欧文被交易到独行侠之事。我不喜欢。我不喜欢的原因是,他们将很难被防住,很难被防住。凯里欧文,是我们见过最优秀的得分手之一,可能是历史最浓眉詹姆斯是我个人取得成功的重要部分他值得所有的一切直播吧2月8日讯今日NBA常规赛,湖人在主场以130133不敌雷霆。湖人球星安东尼戴维斯赛后接受了采访。当被问及如何看待詹姆斯超越贾巴尔成为历史得分王时,浓眉说道他是我们球队能取得高调离开!美媒提湖人3换3交易,从根本上一劳永逸!新世纪以来不少球员都给我们带来了非常多的惊喜,其中如今公牛队的悍将拉文显然是其中的一员了,在近来刚刚结束的比赛当中,拉文高效砍下41分打破所有人质疑的表现尽显男儿本色,恰逢不少球员马德兴中超新政出台整体较为积极,各方反应还是可以接受直播吧2月8日讯昨天,由中国足协与中国职业足球俱乐部联合会筹备组召集中超中甲中乙三级职业俱乐部负责人参加的职业联赛工作会议在香河足球基地进行。会议期间,相关的政策计划等已经向与会代法国杯2遭淘汰北京时间2月9日凌晨4点,202223赛季法国杯18决赛迎来一场焦点战,巴黎圣日耳曼客场挑战马赛。上半场,拉莫斯送点,桑切斯主罚命中为马赛先拔头筹,补时阶段拉莫斯将功补过头球扳平比英超2利兹联瓦拉内送乌龙拉什福德桑乔破门北京时间2月9日凌晨4点,202223赛季英超联赛第8轮一场补赛在老特拉福德进行,曼联主场迎战利兹联。上半场,尼奥托在开场第1分钟就为利兹联取得领先下半场,瓦拉内打进乌龙球,随后拉锡安确定不会参加全明星据ESPN记者AndrewLopez报道,鹈鹕球星锡安威廉姆森因为腿筋伤势,确定不会参加全明星。鹈鹕主帅威利格林确认了这一消息,并表示锡安会在全明星后接受复查。这位22岁的年轻球星湖人三方交易得到拉塞尔,威少加盟爵士,森林狼得到康利ESPN记者Woj报道,多位消息人士称,湖人和森林狼爵士达成交易。湖人得到森林狼后卫迪安吉洛拉塞尔爵士球员马利克比斯利前锋贾里德范德比尔特。森林狼得到爵士控卫迈克康利爵士后卫尼基尔
你知道吗?喝水也有讲究,这五个谣言你会信了吗?早起不能喝凉水,隔夜水,会致癌?喝水前一定要弄清的四个问题,千滚水就是多次烧开的自来水,它和隔夜水经常会被扣上亚硝酸盐超标的罪名,然后就和致癌扯上了关系。但是实验表明,就算是反复烧感受明亮风采,运动套裙,这个季节穿刚刚好在夏日的街头,一身亮眼的运动套装实在吸引人眼球。上衣是假两件,以适合大众的白色为底,变得不那么挑人肤色了。膝上裙打造长腿既视感,不沉闷不单一。粉色也不用担心,轻松hold住。连帽款三本差生逆袭后辞职做网红,90后的她年入千万,一开口火出圈最近,综艺为歌而赞热播,一个90后女孩爆火,冲上热搜。她不是一线歌手,不是明星嘉宾,也不是知名乐评人,只是一个听众评委。然而,她在节目中的金句却刷爆朋友圈,视频引一亿人观看,被称为许冠英邓丽君闺密,因自卑终生未娶,65岁孤独离世这个世界的人太多了,有人住高楼,有人在深沟,有人光万丈,有人一身锈,世人万千种。每个人都想成为主角,但总有人比你更加优秀耀眼,最终你只能沦为绿叶做陪衬。在上个世纪八九十年代的香港娱TVB末代男神林保怡,住千万豪宅,开百万豪车,56岁仍孤身一人现年56岁的林保怡已经很少出现在大众视野中了,近乎于退圈的他,在近7年内仅播出了一部网剧,也就是2020年担任监制并领衔主演的悬疑网剧叹息桥。不过,虽然鲜少以艺人的身份公开露面,但暗夜行者于升海打骆翔一枪,廖永嘉藏得深,谁会是内鬼?花煜寒文电视剧暗夜行者内鬼藏得好深,除了骆翔,其他人看着好像都有嫌疑。5年前华城老大帕拉与金三角第一毒枭坤托的世纪交易,牵扯到几方势力,1000kg毒品不翼而飞,行动组于升海明明知赵丽颖大女主剧宣发,林更新窦骁强势加盟,堪称楚乔传22015年,赵丽颖领衔主演的古装大女主剧花千骨上线,该剧一经播出便人气拉满,大有一波全民追剧的气势,自此之后,有关大女主剧的市场便被彻底打开。赵丽颖大女主剧宣发,林更新窦骁强势加盟福将张晞临,遇贵人冯远征,戏外娶娇妻朱敏,48岁当爸很幸福在演员面前,他没有名字,行走江湖30余年,他遭遇过人生最至暗的时刻,但依旧不变的是藏在眼里的笑意,不似那般凌厉,却始终温和而坚定。对我来说,演员是我在世界上唯一的身份,张晞临如是说勇士奇兵打出千万身价,交往黑富美,爱情事业双丰收勇士队的中锋凯文鲁尼是一位十分低调的球员,自2015年进入NBA后,鲁尼就一直效力于金州勇士队。虽然是在首轮最后顺位(第30顺位)才被选中,但鲁尼的实力真的被低估了。2米06的身高谈判顺利,降薪续约正式回归葡萄牙国家队报道,C罗更新ins嗮照他将与国家队的弟兄们备战下个月的欧国联,首战作客对阵西班牙。目前他的经纪人门德斯正和曼联进行深度接触。首先就是努涅斯,根据TheAthl12年一阵能打爆22年一阵?别扯了10年前的NBA一阵和如今的一阵!如果可以实现让两支球队组队,让1112的一阵和2122的一阵打,哪个球队能获胜?有人说,别扯了!以队中王牌的最绝对实力而言,现在的字母已经很接近最