arkts @ohos.net.socket (Socket连接)模块使用

246 阅读1分钟

介绍

本模块提供利用Socket进行数据传输的能力,支持TCPSocket、UDPSocket、WebSocket和TLSSocket。

说明:

本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。

导包

接下来介绍该模块下tcp的使用

模拟器是一个虚拟机,所以如果要在本机测试需要获得本机的局域网地址。

image.png

客户端代码

客户端测试代码

import { socket } from '@kit.NetworkKit'
import { BusinessError } from '@kit.BasicServicesKit'
import { util } from '@kit.ArkTS';

class tcpOptions implements socket.TCPConnectOptions{
  address: socket.NetAddress={} as socket.NetAddress;
  timeout?: number | undefined;

}
let options=new tcpOptions()
options.address.address='192.168.110.1'
options.address.port=8000
options.timeout=6000
export const tcpSendData=()=>{

  let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();

  tcp.connect(options, (err: BusinessError) => {
    if (err) {
      console.log('connect fail');
      console.log(`res:${JSON.stringify(err)}`)
      return;
    }
    console.log('connect success');
    let textEncoder = new util.TextEncoder();
    let buffer = new ArrayBuffer(20);
    let result = new Uint8Array(buffer);
    result = textEncoder.encodeInto("test");
    let tcpSendOptions: socket.TCPSendOptions = {
      data: 'ok'
    }
    tcp.send(tcpSendOptions, (err: BusinessError) => {
      if (err) {
        console.log(`send:${JSON.stringify(err)}`)
        console.log('send fail');
        return;
      }
      console.log('send success');
    })
  })
}

测试页面代码

import { tcpSendData, udpSendData } from '../common/net'

@Entry
@Component
struct SocketTest {


  build() {
    Row() {
      Column() {
        Button('send udp data')
          .onClick(()=>{
            tcpSendData()
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}

测试成功

image.png

服务器端代码

使用python写一个简单的server连接接收,鸿蒙传输的数据

image.png

# This is a sample Python script.
import socket


# Press Shift+F10 to execute it or replace it with your code.
# Press Double Shift to search everywhere for classes, files, tool windows, actions, and settings.


def tcpServer():
    sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    # sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
    sock.bind(('192.168.110.1',8000))
    sock.listen()
    while True:
        client,client_address=sock.accept()
        data=client.recv(1024).decode()
        if client!=None :
            print('connect')
        if not data:
            break
        buffer=data
        print('receive data:'+buffer)


if __name__ == '__main__':
    tcpServer()

# See PyCharm help at https://www.jetbrains.com/help/pycharm/