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

相关推荐
TrisighT17 小时前
AI写埋点代码,35%覆盖率坑惨运营
harmonyos·arkts·arkui
Junerver4 天前
把 DevEco Code 的 HarmonyOS 开发能力装进口袋——harmonyos-dev-skill
harmonyos
程序猿追4 天前
那个右下角的小数字怎么“卡”住我打字——我用 HarmonyOS 自己写了一个字数限制输入框
pytorch·华为·harmonyos
古德new4 天前
鸿蒙PC使用electron迁移:Joplin Electron 桌面适配全记录
华为·electron·harmonyos
世人万千丶4 天前
桌面便签小应用 - HarmonyOS ArkUI 开发实战-TextArea与Flex布局-PC版本
华为·harmonyos·鸿蒙·鸿蒙系统
慧海灵舟4 天前
AGenUI 鸿蒙端实战踩坑录:从 Column 布局消失到异步组件宽度为 0
华为·harmonyos
yuegu7774 天前
HarmonyOS应用<节气通>开发第33篇:状态管理实战
华为·harmonyos
YM52e4 天前
买菜计算器小应用 - HarmonyOS ArkUI 开发实战-PC版本
学习·华为·harmonyos·鸿蒙·鸿蒙系统
阿捏利4 天前
系列总览-鸿蒙科普系列完全指南
华为·harmonyos
treesforest4 天前
AI安全系统如何识别异常访问?IP风险识别正在成为关键能力
网络·人工智能·tcp/ip·安全·web安全