成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

深入淺出學習eTs—TCP聊天室(十九)

系統 OpenHarmony
本章節我們來實現一個TCP聊天的功能。

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

??https://ost.51cto.com??

一、需求分析

#盲盒+碼##深入淺出學習eTs#(十九)TCP聊天室-開源基礎軟件社區

本章節我們來實現一個TCP聊天的功能

  • 連接指定IP和端口
  • 顯示接收的內容
  • 具有發送的功能

二、控件介紹

1、Socket連接

場景介紹

應用通過Socket進行數據傳輸,支持TCP和UDP兩種協議。

接口說明

Socket連接主要由socket模塊提供。具體接口說明如下表。

接口名

功能描述

constructUDPSocketInstance()

創建一個UDPSocket對象。

constructTCPSocketInstance()

創建一個TCPSocket對象。

bind()

綁定IP地址和端口。

send()

發送數據。

close()

關閉連接。

getState()

獲取Socket狀態。

connect()

連接到指定的IP地址和端口(僅TCP支持)

getRemoteAddress()

獲取對端Socket地址(僅TCP支持,需要先調用connect方法)

on(type: ‘message’)

訂閱Socket連接的接收消息事件。

off(type: ‘message’)

取消訂閱Socket連接的接收消息事件。

on(type: ‘close’)

訂閱Socket連接的關閉事件。

off(type: ‘close’)

取消訂閱Socket連接的關閉事件。

on(type: ‘error’)

訂閱Socket連接的Error事件。

off(type: ‘error’)

取消訂閱Socket連接的Error事件。

on(type: ‘listening’)

訂閱UDPSocket連接的數據包消息事件(僅UDP支持)。

off(type: ‘listening’)

取消訂閱UDPSocket連接的數據包消息事件(僅UDP支持)。

on(type: ‘connect’)

訂閱TCPSocket的連接事件(僅TCP支持)。

off(type: ‘connect’)

取消訂閱TCPSocket的連接事件(僅TCP支持)。

基本例程(參考我之前的家庭醫生終端系統)。

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 !== "\n") {
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');
})
}
}

2、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<number>('varA', AppStorage.Get<number>('varA') + 1)
})
Button(`lang: ${this.lang}`)
.onClick(() => {
if (this.lang === 'zh') {
AppStorage.Set<string>('languageCode', 'en')
} else {
AppStorage.Set<string>('languageCode', 'zh')
}
this.label = (this.lang === 'zh') ? '數' : 'Count'
})
}
}
}

即通過AppStorage.Link和 @StorageLink的方式,可實現外部動態刷新Text組件和image組件(等等之類都可以),方便我們在全局調用時更新數據。

三、UI設計

本項目的基本內容是可以在預覽器中看到的,所以先在預覽器中簡單設計UI

1、基本界面

#盲盒+碼##深入淺出學習eTs#(十九)TCP聊天室-開源基礎軟件社區

以后不會大時間講解UI了,會直接放成品,且我的源碼都在Gitee倉上存在,需要的可以自己下載,會著重體現程序部分。

2、接口綁定

首先是接收框處的變量綁定。

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)

3、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<String>('Rc_message',dat_buff);
//AppStorage.Set<String>('ID_1_stata','rgba(0, 109, 229, 0.95)');
});

該部分實現聊天框內部的文字刷新。

4、IP設置

這里我是使用的合宙的TCP工具[wstool (luatos.com)](。

#盲盒+碼##深入淺出學習eTs#(十九)TCP聊天室-開源基礎軟件社區

在此處修改IP和端口。

#盲盒+碼##深入淺出學習eTs#(十九)TCP聊天室-開源基礎軟件社區

5、遠端模擬器

#盲盒+碼##深入淺出學習eTs#(十九)TCP聊天室-開源基礎軟件社區

在模擬器中打開如上。

四、實際測試

#盲盒+碼##深入淺出學習eTs#(十九)TCP聊天室-開源基礎軟件社區

使用模擬器進行發送。

#盲盒+碼##深入淺出學習eTs#(十九)TCP聊天室-開源基礎軟件社區

在TCP工具處有接收到內容,此時進行回復。

#盲盒+碼##深入淺出學習eTs#(十九)TCP聊天室-開源基礎軟件社區

在APP端可以接收到并顯示(暫時可能只支持英文接受顯示)。

#盲盒+碼##深入淺出學習eTs#(十九)TCP聊天室-開源基礎軟件社區

#盲盒+碼##深入淺出學習eTs#(十九)TCP聊天室-開源基礎軟件社區

#盲盒+碼##深入淺出學習eTs#(十九)TCP聊天室-開源基礎軟件社區

#盲盒+碼##深入淺出學習eTs#(十九)TCP聊天室-開源基礎軟件社區

五、動態圖

#盲盒+碼##深入淺出學習eTs#(十九)TCP聊天室-開源基礎軟件社區

TCP助手顯示如下:

#盲盒+碼##深入淺出學習eTs#(十九)TCP聊天室-開源基礎軟件社區

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

??https://ost.51cto.com??。

責任編輯:jianghua 來源: 51CTO開源基礎軟件社區
相關推薦

2022-12-01 08:20:00

2023-04-03 15:32:21

學習eTsHTTP協議

2009-11-30 16:46:29

學習Linux

2013-09-16 09:56:29

TCP協議網絡協議send

2011-07-04 10:39:57

Web

2021-03-16 08:54:35

AQSAbstractQueJava

2022-09-26 09:01:15

語言數據JavaScript

2019-01-07 15:29:07

HadoopYarn架構調度器

2017-07-02 18:04:53

塊加密算法AES算法

2012-05-21 10:06:26

FrameworkCocoa

2021-07-20 15:20:02

FlatBuffers阿里云Java

2009-06-18 12:59:39

Criteria Qu深入淺出Hiberna

2014-08-05 09:27:20

TCP網絡協議

2023-12-04 13:22:00

JavaScript異步編程

2016-10-14 14:32:58

JavascriptDOMWeb

2009-11-17 17:31:58

Oracle COMM

2010-07-16 09:11:40

JavaScript內存泄漏

2010-07-26 12:57:12

OPhone游戲開發

2021-07-19 11:54:15

MySQL優先隊列

2016-10-14 13:53:05

JavascriptDOMWeb
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久久久久国产精品免费免费狐狸 | 精品久久久久久亚洲精品 | 亚洲人在线播放 | 欧美高清成人 | 综合国产| 久久天堂网 | 亚洲成人第一页 | 黄色av大片| 天天草狠狠干 | 2一3sex性hd | 国产精品日韩欧美一区二区三区 | 国产一区二区三区色淫影院 | 91精品国产色综合久久不卡98 | 日本精品裸体写真集在线观看 | 国产成人午夜精品影院游乐网 | 国产精品一区二区三区在线 | 国产黑丝av | 伊人色综合久久天天五月婷 | 亚洲免费观看视频网站 | 精品一区二区久久久久久久网站 | 国产欧美久久精品 | 欧美精品福利视频 | 黄色视频a级毛片 | 午夜精品一区二区三区免费视频 | 亚洲高清在线 | 久久久久国产一区二区三区四区 | 欧美成人在线影院 | 91九色麻豆 | 亚洲一区导航 | 9191成人精品久久 | 欧美精品网站 | 国产激情91久久精品导航 | 中文字幕在线一 | 中文字幕日本一区二区 | 亚洲一区三区在线观看 | 午夜影院在线观看 | 欧美成年人视频在线观看 | www.国产日本| 91精品国产综合久久久久久 | 91超碰在线观看 | 国产欧美在线视频 |