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

相关推荐
空白诗7 小时前
mdcat 在 HarmonyOS 上的构建与适配
后端·安全·华为·rust·harmonyos
百***35488 小时前
HarmonyOS在智能办公中的文档协作
华为·harmonyos
1560820721911 小时前
基于7VX690T FPGA实现万兆TCP/IP资源和性能测试
网络协议·tcp/ip·fpga开发
向哆哆12 小时前
深入理解华为 CANN 中的 Broadcast 算子实现:从底层机制到工程化落地
华为·算子·昇腾·cann
车载测试工程师15 小时前
CAPL学习-IP API函数-2
网络·学习·tcp/ip·capl·canoe
●VON16 小时前
在鸿蒙 PC 上使用 Electron 获取本机 IP 地址
tcp/ip·electron·harmonyos
汉堡黄16 小时前
鸿蒙开发:案例集合Tabs:tabs竖向粘性
harmonyos
威哥爱编程16 小时前
【鸿蒙开发实战篇】如何基于一多能力实现响应式布局
harmonyos·arkts·arkui
威哥爱编程17 小时前
【鸿蒙开发实战篇】如何实现高级图片滤镜
harmonyos·arkts·arkui
威哥爱编程17 小时前
【鸿蒙开发实战篇】强大的跨应用数据分享与应用内文件共享
harmonyos·arkts·arkui