harmonyos:Socket连接

本文介绍了在Ohos平台中如何通过Socket模块实现TCP和UDP数据传输,详细讲解了构建连接、绑定端口、事件订阅、数据发送和关闭连接等关键步骤,以TCP示例进行说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

场景介绍

应用通过Socket进行数据传输,支持TCP和UDP两种协议。

接口说明

Socket连接主要由socket模块提供。具体接口说明如下表。

接口名

功能描述

constructUDPSocketInstance()

创建一个UDPSocket对象。

constructTCPSocketInstance()

创建一个TCPSocket对象。

bind()

绑定IP地址和端口。

send()

发送数据。

close()

关闭连接。

getState()

获取Socket状态。

connect()

连接到指定的IP地址和端口(仅TCP支持)

getRemoteAddress()

获取对端Socket地址(仅TCP支持,需要先调用connect方法)

on(type: 'message')

订阅Socket连接的接收消息事件。

off(type: 'message')

取消订阅Socket连接的接收消息事件。

on(type: 'close')

订阅Socket连接的关闭事件。

off(type: 'close')

取消订阅Socket连接的关闭事件。

on(type: 'error')

订阅Socket连接的Error事件。

off(type: 'error')

取消订阅Socket连接的Error事件。

on(type: 'listening')

订阅UDPSocket连接的数据包消息事件(仅UDP支持)。

off(type: 'listening')

取消订阅UDPSocket连接的数据包消息事件(仅UDP支持)。

on(type: 'connect')

订阅TCPSocket的连接事件(仅TCP支持)。

off(type: 'connect')

取消订阅TCPSocket的连接事件(仅TCP支持)。

开发步骤

UDP与TCP流程大体类似,下面以TCP为例:

  1. import需要的socket模块。

  2. 创建一个TCPSocket连接,返回一个TCPSocket对象。

  3. (可选)订阅TCPSocket相关的订阅事件。

  4. 绑定IP地址和端口,端口可以指定或由系统随机分配。

  5. 连接到指定的IP地址和端口。

  6. 发送数据。

  7. Socket连接使用完毕后,主动关闭。

    import socket from '@ohos.net.socket';
    
    // 创建一个TCPSocket连接,返回一个TCPSocket对象。
    let tcp = socket.constructTCPSocketInstance();
    
    // 订阅TCPSocket相关的订阅事件
    tcp.on('message', value => {
        console.log("on message")
        let buffer = value.message
        let dataView = new DataView(buffer)
        let str = ""
        for (let i = 0;i < dataView.byteLength; ++i) {
            str += String.fromCharCode(dataView.getUint8(i))
        }
        console.log("on connect received:" + str)
    });
    tcp.on('connect', () => {
        console.log("on connect")
    });
    tcp.on('close', () => {
        console.log("on close")
    });
    
    // 绑定IP地址和端口。
    let bindAddress = {
        address: '192.168.xx.xx',
        port: 1234, // 绑定端口,如1234
        family: 1
    };
    tcp.bind(bindAddress, err => {
        if (err) {
            console.log('bind fail');
            return;
        }
        console.log('bind success');
        // 连接到指定的IP地址和端口。
        let connectAddress = {
            address: '192.168.xx.xx',
            port: 5678, // 连接端口,如5678
            family: 1
        };
        tcp.connect({
            address: connectAddress, timeout: 6000
        }, err => {
            if (err) {
                console.log('connect fail');
                return;
            }
            console.log('connect success');
            // 发送数据
            tcp.send({
                data: 'Hello, server!'
            }, err => {
                if (err) {
                    console.log('send fail');
                    return;
                }
                console.log('send success');
            })
        });
    });
    // 连接使用完毕后,主动关闭。取消相关事件的订阅。
    setTimeout(() => {
        tcp.close((err) => {
            console.log('close socket.')
        });
        tcp.off('message');
        tcp.off('connect');
        tcp.off('close');
    }, 30 * 1000);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值