54.HarmonyOS鸿蒙系统 App(ArkTS)tcp socket套接字网络连接

54.HarmonyOS鸿蒙系统 App(ArkTS)tcp socket套接字网络连接

复制代码
import socket from '@ohos.net.socket';
import process from '@ohos.process';
import wifiManager from '@ohos.wifiManager';


import common from '@ohos.app.ability.common';


let tcp = socket.constructTCPSocketInstance();
//let ipAddress = wifiManager.getIpInfo().ipAddress; //真机测试
//let local_ip2 = (ipAddress>>24 &0xFF)+"."+(ipAddress>>16 &0xFF)+"."+(ipAddress>>8 &0xFF)+"."
//+(ipAddress &0xFF) //真机测试
let local_ip2 = '127.0.0.1' //用于模拟器,真机则屏蔽此处

@Entry
@Component
struct Index {
  @State message: string = 'Hello World'

  @State local_ip:string = local_ip2
  @State local_port:number =6666
  @State ip_addr:string ='192.168.10.104'
  @State port:number =8080
  @State send_msg:string ='send content'
  @State recv_msg:string =''
  
  build() {


      Column() {
        Row(){
          Text(' ')
        }
        Row(){
          Text('TCP socket测试连接')
            .fontSize(38)
            .fontColor(Color.White)
            .backgroundColor(Color.Blue)
        }
        Row(){
          Text('本机IP:').fontSize(28)
            .backgroundColor(Color.Green)
          TextInput({text:`${this.local_ip}`})
            .fontSize(28)
            .width(280)
            .backgroundColor(Color.Transparent)
            .onChange((value:string)=>{
              this.local_ip = value
            })

        }
        Row(){
          Text('端口:').fontSize(28)
            .backgroundColor(Color.Green)
          TextInput({text:`${this.local_port}`})
            .fontSize(28)
            .width(280)
            .backgroundColor(Color.Transparent)
            .onChange((value:string)=>{
              this.local_port = parseInt(value, 10); //字符转数字
            })

        }
        Row(){
          Text('服务器IP:').fontSize(28)
            .backgroundColor(Color.Green)
          TextInput({text:`${this.ip_addr}`})
            .fontSize(28)
            .width(280)
            .backgroundColor(Color.Transparent)
            .onChange((value:string)=>{
              this.ip_addr = value
            })

        }
        Row(){
          Text('端口:').fontSize(28)
            .backgroundColor(Color.Green)
          TextInput({text:`${this.port}`})
            .fontSize(28)
            .width(280)
            .backgroundColor(Color.Transparent)
            .onChange((value:string)=>{
              this.port = parseInt(value, 10); //字符转数字
            })

        }
        Row(){
          Text('发送:').fontSize(28)

        }.align(Alignment.Start)
        Row(){
          TextArea({text:`${this.send_msg}`})
            .fontSize(28)
            .height(100)
            .onChange((value:string)=>{
              this.send_msg = value
            })
        }
        Row(){
          Text('接收:').fontSize(28)

        }.align(Alignment.Start)
        Row(){
          TextArea({text:`${this.recv_msg}`}).fontSize(28) //文本自动换行
            .height(200)
        }
        Row()
        {
          Button('连接')
            .width(100)
            .fontSize(28)
            .onClick(() => {
              // 绑定IP地址和端口。//连接服务器,必须首先绑定本机IP

              let bindAddress = {
                address: this.local_ip,
                port: this.local_port, // 绑定端口,如1234
                family: 1
              };
              tcp.bind(bindAddress, err => {
                if (err) {
                  console.log('bind fail_local');
                  this.recv_msg = 'connect fail_local,IP:'+this.local_ip
                  return;
                }
                 console.log('bind success_local');
                this.recv_msg = 'connect fail_local,IP:'+this.local_ip
              })

              let connectAddress = {
                address: this.ip_addr,
                port: this.port, // 连接端口,如5678
                family: 1
              };
              tcp.connect({
                address: connectAddress, timeout: 3000
              },err=>{
                if (err) {
                  console.log('connect fail_remote');
                  this.recv_msg = 'connect fail_remote,IP:'+this.ip_addr

                  return;
                }
                console.log('connect success');
                this.recv_msg = 'connect success_remote,IP:'+this.ip_addr
              }
              )

          })
          Button('______').onClick((event: ClickEvent) => {
          })
          Button('发送')
            .width(100)
            .fontSize(28)
            .onClick((event: ClickEvent) => {
              tcp.send({
                data: this.send_msg
              }, err => {
                if (err) {
                  console.log('send fail');
                  this.recv_msg='send fail_remote'
                  return;
                }
                console.log('send success');
                this.recv_msg='send success_remote';
              })
          })

        }
        Row(){
          Button('退出')
            .width(100)
            .fontSize(28)
            .onClick((event: ClickEvent) => {
              tcp.close();
              const context = getContext(this) as common.UIAbilityContext;
              context.terminateSelf();
              let applicationContext = context.getApplicationContext();
              // applicationContext.killProcessesBySelf().
              // then((data)=>
              // {console.log('The process running information is:'+ JSON.stringify(data));})
              //   .catch((error)=>{console.error('error:'+ JSON.stringify(error));})
              // process.kill(0, process.pid)
              // process.exit(0)
          })
        }


      }
      .width('100%')
    .padding(20) //边距
    .backgroundColor(Color.Gray)

  }
}

配置权限:

arkts获取真机本机IP:

连接远程服务器,tcp/ip,必须绑定本机IP

相关推荐
2601_9495936510 小时前
基础入门 React Native 鸿蒙跨平台开发:模拟智能音响
react native·react.js·harmonyos
xiaoqi92211 小时前
React Native鸿蒙跨平台如何进行狗狗领养中心,实现基于唯一标识的事件透传方式是移动端列表开发的通用规范
javascript·react native·react.js·ecmascript·harmonyos
jin12332211 小时前
React Native鸿蒙跨平台剧本杀组队消息与快捷入口组件,包含消息列表展示、快捷入口管理、快捷操作触发和消息详情预览四大核心功能
javascript·react native·react.js·ecmascript·harmonyos
烬头882113 小时前
React Native鸿蒙跨平台实现二维码联系人APP(QRCodeContactApp)
javascript·react native·react.js·ecmascript·harmonyos
xiaoqi92215 小时前
React Native鸿蒙跨平台如何实现分类页面组件通过searchQuery状态变量管理搜索输入,实现了分类的实时过滤功能
javascript·react native·react.js·ecmascript·harmonyos
听麟15 小时前
HarmonyOS 6.0+ 智慧出行导航APP开发实战:离线地图与多设备位置协同落地
华为·wpf·harmonyos
qq_1777673715 小时前
React Native鸿蒙跨平台实现应用介绍页,实现了应用信息卡片展示、特色功能网格布局、权限/联系信息陈列、评分展示、模态框详情交互等通用场景
javascript·react native·react.js·ecmascript·交互·harmonyos
jin12332217 小时前
基于React Native鸿蒙跨平台地址管理是许多电商、外卖、物流等应用的重要功能模块,实现了地址的添加、编辑、删除和设置默认等功能
javascript·react native·react.js·ecmascript·harmonyos
2501_9209317017 小时前
React Native鸿蒙跨平台医疗健康类的血压记录,包括收缩压、舒张压、心率、日期、时间、备注和状态
javascript·react native·react.js·ecmascript·harmonyos
ipooipoo118818 小时前
动态住宅IP的定义、核心优势与技术场景应用
网络·网络协议·tcp/ip