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

相关推荐
TechWayfarer5 小时前
知乎/微博的IP属地显示为什么偶尔错误?用IP归属地查询平台自检工具3步验证
网络·python·网络协议·tcp/ip·网络安全
Wave8455 小时前
从单片机开发看透网络底层:Wi-Fi、TCP/IP 与 HTTP 的通俗解析
网络·单片机·tcp/ip
积水成渊,蛟龙生焉6 小时前
鸿蒙装饰器V2详解
华为·harmonyos·arkts·鸿蒙·ark
zuowei28896 小时前
华为网络设备配置文件备份与恢复(上传、下载、导出,导入)
开发语言·华为·php
2401_873479407 小时前
应急响应:勒索软件攻击源IP分析,如何通过IP地址查询定位辅助溯源?
网络·tcp/ip·安全·网络安全·ip
C雨后彩虹11 小时前
最多等和不相交连续子序列
java·数据结构·算法·华为·面试
Byron Loong11 小时前
【网络】Python 怎么做TCP通讯
网络·python·tcp/ip
代码飞一会儿11 小时前
Harmony OS开发之沉浸式模式设计学习
harmonyos·敏捷开发
SilentSamsara12 小时前
HTTP/1.1 到 HTTP/3:每代协议解决了什么问题
网络·网络协议·tcp/ip·http·https
Flash.kkl12 小时前
传输层UDP、TCP
网络协议·tcp/ip·udp