鸿蒙 HarmonyOS--WebSocket连接

WebSocket是一种长连接的双向通信方式,一旦连接完成,双方就能相互主动发起通信,每次通信不需要再次连接。

客户端向服务器发送握手报文,服务器响应确认握手的报文,连接就建立了,连接完成后,双方都可以主动发送数据,直到有一方发来断开连接的信号来关闭连接。

下面使用了一个WebSocket在线测试的url,客户端发送了什么消息,服务端就会返回什么消息,用id来区分客户端和服务端。

typescript 复制代码
import { webSocket } from '@kit.NetworkKit'
import { promptAction } from '@kit.ArkUI'
import { BusinessError } from '@kit.BasicServicesKit'

interface messageInfo {
  //用户id,我这里的设置:客户端的id为1001,服务端id为1002
  id: string
  msg: string
}

@Entry
@Component
struct WebSocketPage {
  @State data: messageInfo[] = [] //消息数组
  @State myMsg: string = ''
  //这是websocket在线测试url,客户端发送什么,服务器就会返回什么
  @State url: string = 'ws://124.222.224.186:8800/websocket'
  ws: webSocket.WebSocket | null = null

  async aboutToAppear() {
    this.connect2Server(this.url)
    this.receiveMsg()
  }

  //连接服务端
  connect2Server(defaultIpAddress: string) {
    this.ws = webSocket.createWebSocket();
    //根据URL地址,建立一个WebSocket连接
    this.ws.connect(defaultIpAddress, (err: BusinessError, value: boolean) => {
      if (!err) {
        //连接成功
        promptAction.showToast({ message: 'connect success ' })
      } else {
        AlertDialog.show({ message: 'connect fail ' + err.message })
      }
    })

    this.ws.on('open', (err: BusinessError, value: object) => {
      //打开webSocket失败
      if (err) {
        AlertDialog.show({ message: JSON.stringify(err) })
      }
    })
  }

  //接收到服务器消息
  receiveMsg() {
    if (this.ws) {
      this.ws.on('message', (err, value) => {
        this.data.push({ id: '1002', msg: JSON.stringify(value) })
      })
    }
  }

  //发送消息到服务端
  sendMsg2Server(msg: string) {
    if (this.ws) {
      this.ws.send(msg)
        .catch((e: Error) => {
          AlertDialog.show({ message: '发送失败' + e.message })
        })
    }
  }

  build() {
    Navigation() {
      Column() {
        List() {
          ForEach(this.data, (Item: messageInfo) => {
            ListItem() {
              Row() {
                //网络图片需要打开网络权限
                Image(Item.id === '1001' ?
                  "https://tse3-mm.cn.bing.net/th/id/OIP-C.JRIYJ3EqtcLF1LwK3oxjgAHaGg?w=201&h=181&c=7&r=0&o=5&dpr=1.3&pid=1.7" :
                  "https://tse3-mm.cn.bing.net/th/id/OIP-C.7Z068v6GRuOJVYYUSHsBDgHaNK?w=115&h=182&c=7&r=0&o=5&dpr=1.3&pid=1.7")
                  .height(40)
                  .width(40)
                  .borderRadius(6)
                Row() {
                  Text(Item.msg)
                    .backgroundColor(Item.id === '1001' ? Color.Orange : Color.Yellow)
                    .padding(10)
                    .lineHeight(24)
                    .margin({
                      left: 10,
                      right: 10
                    })
                    .borderRadius(5)
                }
                .layoutWeight(6)
                .justifyContent(Item.id === '1001' ? FlexAlign.End : FlexAlign.Start)

                Text().layoutWeight(1)
              }
              .alignItems(VerticalAlign.Top)
              .direction(Item.id === '1001' ? Direction.Rtl : Direction.Ltr)
            }
            .margin({ bottom: 10 })
          })
        }
        .padding(10)
        .backgroundColor(Color.Pink)
        .layoutWeight(1)

        TextInput({ placeholder: '请输入', text: $$this.myMsg })
          .onSubmit(() => {
            this.sendMsg2Server(this.myMsg)
            this.data.push({ id: '1001', msg: this.myMsg } as messageInfo)
            //清空输入框内容
            this.myMsg = ''
          })
      }
      .height('100%')
      .width('100%')
    }
    .title('webSocket通信')
    .titleMode(NavigationTitleMode.Mini)
  }
}
相关推荐
not coder8 小时前
我给鸿蒙原生 OFD 阅读器加了手写签批:手写笔防误触、矢量笔迹、批注追溯
华为·harmonyos·arkts·ofd
Magic-ZYJ9 小时前
HarmonyOS 页面生命周期完整梳理:aboutToAppear、onPageShow、onPageHide 别再混着用
华为·ts·harmonyos·移动应用开发·arcts·arcui
lilian23310 小时前
HarmonyOS 7 新特性(五)|ContainerReader 容器断点与自适应布局
前端·华为·harmonyos
less_1213811 小时前
HarmonyOS WPS Open SDK:统一版二开接入主线与能力分层概述
华为·harmonyos·wps
大雷神11 小时前
HarmonyOS APP<<古今职鉴定>>开源教程第13篇:隔空投送:ShareKit 分享服务
华为·华为云·harmonyos
时光慢煮11 小时前
开源鸿蒙PC上手体验:从 Windows 和 macOS 切换过来,我被惊艳到了
windows·开源·harmonyos
tsqtsqtsq030911 小时前
鸿蒙电脑升级 HarmonyOS 7:深度解析与 API 26 全特性指南
华为·电脑·harmonyos
lilian23314 小时前
HarmonyOS 7 新特性(一)|API 26 Beta2 十项变化与应用适配路线
华为·harmonyos
HwJack2014 小时前
鸿蒙ArkData键值型数据库实战:Schema 定义与商品库存同步案例
数据库·华为·harmonyos
m0_749690231 天前
【寻迹校园 HarmonyOS NEXT 实战 41】用户照片、演示图与图标兜底:ReportMedia 的三层媒体策略
华为·harmonyos·arkts·媒体·隐私保护