今日总结 2024-12-26

今日工作概述

今日全身心投入到基于 ArkTS 语言的 TCPSocket 应用开发学习中,专注于构建可靠的网络通信功能。从基础理论的梳理到实际代码的编写与调试,逐步深入探索 TCPSocket 在 ArkTS 环境下的使用方式,旨在为后续开发稳定高效的网络应用程序积累经验。

工作成果与亮点

成功搭建开发环境

顺利完成了 ArkTS 语言开发环境的搭建,确保相关工具和依赖项均正确安装配置,为 TCPSocket 的使用奠定了坚实基础。

实现简单通信功能

基于 TCPSocket 实现了简单的客户端与服务端通信。以下是关键代码示例:

服务端代码(部分关键部分)

import socket from '@ohos.net.socket';

// 创建TCPSocketServer实例
let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();

// 定义监听地址
let listenAddr: socket.NetAddress = {
    address: '127.0.0.1',
    port: 8888,
    family: 1
};

// 监听连接请求
tcpServer.listen(listenAddr, (err: BusinessError) => {
    if (err) {
        console.log("listen fail");
        return;
    }
    console.log("listen success");

    // 处理连接事件
    tcpServer.on('connect', (client: socket.TCPSocketConnection) => {
        console.log('Client connected');

        // 接收客户端消息
        client.on('message', (value: socket.SocketMessageInfo) => {
            const uintArray = new Uint8Array(value.message);
            let messageView = '';
            for (let i = 0; i < uintArray.length; i++) {
                messageView += String.fromCharCode(uintArray[i]);
            }
            console.log('Received message from client:', messageView);

            // 向客户端发送响应
            let response = 'Server received your message: ' + messageView;
            let tcpSendOption: socket.TCPSendOptions = {
                data: response
            };
            client.send(tcpSendOption, (sendErr: BusinessError) => {
                if (sendErr) {
                    console.log('Send response fail');
                } else {
                    console.log('Send response success');
                }
            });
        });
    });
});

客户端代码(部分关键部分)

import socket from '@ohos.net.socket';

// 创建TCPSocket实例
let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();

// 定义服务器地址
let netAddress: socket.NetAddress = {
    address: '127.0.0.1',
    port: 8888
};

// 连接服务器
let tcpconnectoptions: socket.TCPConnectOptions = {
    address: netAddress,
    timeout: 6000
};
tcp.connect(tcpconnectoptions, (err: BusinessError) => {
    if (err) {
        console.log('connect fail');
        return;
    }
    console.log('connect success');

    // 发送消息给服务器
    let message = 'Hello, Server!';
    let tcpSendOptions: socket.TCPSendOptions = {
        data: message
    };
    tcp.send(tcpSendOptions, (sendErr: BusinessError) => {
        if (sendErr) {
            console.log('send fail');
        } else {
            console.log('send success');
        }
    });

    // 接收服务器响应
    tcp.on('message', (value: socket.SocketMessageInfo) => {
        const uintArray = new Uint8Array(value.message);
        let messageView = '';
        for (let i = 0; i < uintArray.length; i++) {
            messageView += String.fromCharCode(uintArray[i]);
        }
        console.log('Received response from server:', messageView);
    });
});

成功实现客户端向服务端发送消息,并接收服务端的响应,在控制台清晰展示了整个通信过程和数据交互情况。

深入理解异步编程

在处理 TCPSocket 的连接、发送和接收数据等操作中,充分运用 ArkTS 语言的异步编程特性。熟练使用 Promise 和 callback 方式处理异步操作,确保程序在等待网络操作完成时不会阻塞主线程,从而提升了程序的整体性能和响应速度。

问题与解决之道

连接超时问题

在测试客户端连接服务端时,偶尔出现连接超时的情况。经过仔细排查,发现是由于网络环境不稳定以及服务器资源有限导致连接建立过程缓慢。通过增加连接超时时间(在 TCPConnectOptions 中设置 timeout 参数为更大的值),并优化服务器端的资源配置,成功解决了连接超时问题。

数据接收不完整或乱码

当发送较长消息时,客户端接收服务端响应出现数据不完整或乱码现象。这是因为没有正确处理数据的编码和解码以及缓冲区大小设置不合理。在发送和接收数据时,明确指定字符编码(如 UTF - 8),并根据实际情况调整缓冲区大小(通过 TCPExtraOptions 设置 receiveBufferSize 和 sendBufferSize),确保数据能够完整准确地传输和接收。

多客户端连接处理复杂

尝试扩展程序以支持多个客户端同时连接服务端时,遇到了并发处理和数据管理的难题。研究发现需要使用合适的数据结构来存储和管理多个客户端连接对象,并合理设计逻辑来区分不同客户端的消息处理。通过使用数组来存储连接对象,并在接收消息时根据连接对象的标识进行针对性处理,成功实现了多客户端连接的基本功能,但仍需进一步优化性能和稳定性。

知识技能提升

ArkTS 语言网络编程能力提升

深入学习了 ArkTS 语言在网络编程领域的应用,尤其是 TCPSocket 相关的类和方法。掌握了如何创建 TCPSocket 实例、绑定地址、建立连接、发送和接收数据等核心操作,对网络通信的流程和原理有了更清晰的认识。

异步编程思维强化

在解决 TCPSocket 异步操作相关问题的过程中,进一步强化了异步编程思维。学会了如何合理安排异步任务的执行顺序,如何正确处理异步操作的回调和 Promise 链,以及如何避免异步操作带来的潜在问题,如回调地狱和内存泄漏等。

调试与问题排查技巧

通过解决一系列的实际问题,积累了丰富的调试和问题排查经验。学会了利用控制台输出、日志记录、断点调试等工具和方法来定位和解决程序中的错误,能够更快速准确地找到问题的根源并采取有效的解决措施。

明日工作计划

优化多客户端连接功能

继续完善多客户端连接的服务端程序,提高其并发处理能力和稳定性。优化数据存储结构和处理逻辑,确保多个客户端之间的通信互不干扰,数据准确无误地传输和处理。

探索高级特性

深入研究 TCPSocket 的高级特性,如设置 KeepAlive 选项保持长连接、启用 TCP_NODELAY 选项优化数据传输性能等。将这些高级特性应用到当前的项目中,观察对程序性能和功能的影响,并进行针对性的优化。

错误处理与异常情况应对

完善程序中的错误处理机制,针对可能出现的各种异常情况(如网络中断、服务器崩溃等)提供更友好的提示信息和更健壮的应对策略。确保程序在面对异常情况时能够保持稳定运行,避免因错误未处理而导致程序崩溃或数据丢失。

总结与展望

今日在 TCPSocket 的学习和实践中取得了一定的成果,但也遇到了诸多挑战。通过不断地探索和解决问题,对 ArkTS 语言下的网络通信开发有了更深入的理解和掌握。在未来的学习中,将继续深入研究网络编程技术,不断优化程序性能和功能,努力打造出更加稳定、高效的网络应用程序,为用户提供优质的网络服务体验。同时,也将关注行业动态和新技术发展趋势,积极学习和应用新的技术和理念,提升自己在网络开发领域的竞争力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/943126.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

从零开始k8s-部署篇(未完待续)

从零开始k8s 1.部署k8s-部署篇 1.部署k8s-部署篇 本次部署完全学习于华子的博客点击此处进入华子主页 K8S中文官网&#xff1a;https://kubernetes.io/zh-cn 笔者从零开始部署的k8s&#xff0c;部署前置条件为 1.需要harbor仓库&#xff0c;存放镜像&#xff0c;拉取镜像&am…

Dots 常用操作

游戏中有多个蚂蚁群落&#xff0c;每个蚂蚁属于一个群落&#xff0c;如何设计数据结构&#xff1f; 方法1&#xff1a;为蚂蚁组件添加一个属性 ID&#xff0c;会造成逻辑中大量分支语句&#xff0c;如果分支语句逻辑不平衡可能带来 Job 调度问题&#xff0c;每个蚂蚁会有一份蚂…

如何通过 Kafka 将数据导入 Elasticsearch

作者&#xff1a;来自 Elastic Andre Luiz 将 Apache Kafka 与 Elasticsearch 集成的分步指南&#xff0c;以便使用 Python、Docker Compose 和 Kafka Connect 实现高效的数据提取、索引和可视化。 在本文中&#xff0c;我们将展示如何将 Apache Kafka 与 Elasticsearch 集成以…

深入浅出:AWT的基本组件及其应用

目录 前言 1. AWT简介 2. AWT基本组件 2.1 Button&#xff1a;按钮 2.2 Label&#xff1a;标签 ​编辑 2.3 TextField&#xff1a;文本框 2.4 Checkbox&#xff1a;复选框 2.5 Choice&#xff1a;下拉菜单 2.6 List&#xff1a;列表 综合案例 注意 3. AWT事件处理 …

Go Energy 跨平台框架 v2.5.1 发布

Energy 框架 是Go语言基于CEF 和 LCL 开发的跨平台 GUI 框架, 具体丰富的系统原生 UI 控件集, 丰富的 CEF 功能 API&#xff0c;简化且不失功能的 CEF 功能 API 使用。 特性&#xff1f; 特性描述跨平台支持 Windows, macOS, Linux简单Go语言的简单特性&#xff0c;使用简单…

JS 异步 ( 一、异步概念、Web worker 基本使用 )

文章目录 异步代码异步执行概念ES6 之前的异步 Web worker 异步 代码异步执行概念 通常代码是自上而下同步执行的&#xff0c;既后面的代码必须等待前面的代码执行完才会执行&#xff0c;而异步执行则是将主线程中的某段代码交由子线程去执行&#xff0c;当交给子线程后&…

机器学习(二)-简单线性回归

文章目录 1. 简单线性回归理论2. python通过简单线性回归预测房价2.1 预测数据2.2导入标准库2.3 导入数据2.4 划分数据集2.5 导入线性回归模块2.6 对测试集进行预测2.7 计算均方误差 J2.8 计算参数 w0、w12.9 可视化训练集拟合结果2.10 可视化测试集拟合结果2.11 保存模型2.12 …

Java字符串操作利器:StringBuffer与StringBuilder类详解

在处理字符串变更时&#xff0c;StringBuffer和StringBuilder类是优选工具。与String类不同&#xff0c;StringBuffer和StringBuilder允许对象被多次修改&#xff0c;而不会生成新的未使用对象。 StringBuilder类自Java 5起引入&#xff0c;其与StringBuffer的主要区别在于Stri…

软件确认测试报告的内容和作用简析

软件确认测试报告是对软件确认测试过程及结果的正式记录&#xff0c;是评估软件质量的重要依据。它不仅对开发团队起到反馈作用&#xff0c;更是决策层判断软件是否可以交付的重要参考。 一、软件确认测试报告包括的内容   1、测试目的&#xff1a;明确此次测试的目的和所要…

结构体(初阶)

结构体&#xff1a; 结构体类型的声明 结构体初始化 结构成员访问 结构体传参 1.结构体的声明 1.1结构的基础知识 结构是一些值的集合&#xff0c;这些值称为成员变量。结构的每个成员可以是不同类型的变量。 1.2结构的声明 struct tag { member - list; }variable-lis…

详解VHDL如何编写Testbench

1.概述 仿真测试平台文件(Testbench)是可以用来验证所设计的硬件模型正确性的 VHDL模型&#xff0c;它为所测试的元件提供了激励信号&#xff0c;可以以波形的方式显示仿真结果或把测试结果存储到文件中。这里所说的激励信号可以直接集成在测试平台文件中&#xff0c;也可以从…

React 第二十节 useRef 用途使用技巧注意事项详解

简述 useRef 用于操作不需要在视图上渲染的属性数据&#xff0c;用于访问真实的DOM节点&#xff0c;或者React组件的实例对象&#xff0c;允许直接操作DOM元素或者是组件&#xff1b; 写法 const inpRef useRef(params)参数&#xff1a; useRef(params)&#xff0c;接收的 …

SQL子查询和having实例

有2个表如下&#xff1b;一个是站点信息&#xff0c;一个是站点不同时间的访问量&#xff0c; 现在要获取总访问量大于200的网站&#xff1b; 先执行如下sql&#xff0c;不包括having子句看一下&#xff0c;获得的是所有站点的总访问量&#xff1b; 这应是一个子查询&#xf…

【seatunnel】数据同步软件安装

【seatunnel】数据同步软件安装 下载 wget https://dlcdn.apache.org/seatunnel/2.3.8/apache-seatunnel-2.3.8-bin.tar.gz wget https://dlcdn.apache.org/seatunnel/seatunnel-web/1.0.2/apache-seatunnel-web-1.0.2-bin.tar.gz1、安装seatunnel Server 解压 tar zxvf ap…

散斑/横向剪切/迈克尔逊/干涉条纹仿真技术分析

摘要 本博文提供了多种数据类型的干涉条纹仿真&#xff0c;并展示了它们对应的散斑干涉条纹。还分别给出了横向剪切干涉以及剪切散斑干涉条纹的仿真。 一、迈克尔逊干涉与散斑干涉仿真 下图为干涉条纹与对应的散斑干涉条纹的仿真示意图。其中&#xff0c;干涉条纹可认为是源…

如何通过采购管理系统实现智能化采购?

随着人工智能、大数据等技术的快速发展&#xff0c;采购管理逐步迈入智能化时代。智能化采购不仅提升了效率&#xff0c;还为企业提供了更精准的采购决策支持。本文将从智能化采购的优势出发&#xff0c;探讨采购管理系统如何助力企业实现这一目标。 文中用到的采购管理系统&a…

【论文阅读笔记】IC-Light

SCALING IN-THE-WILD TRAINING FOR DIFFUSION-BASED ILLUMINATION HARMONIZATION AND EDITING BY IMPOSING CONSISTENT LIGHT TRANSPORT 通过施加一致的光线传输来扩展基于扩散模型的真实场景光照协调与编辑训练 前言摘要引言相关工作基于学习的基于扩散模型的外观和光照操纵光…

594: Maximum Tape Utilization Ratio

解法&#xff1a; 对于该题有以下错误&#xff08;敬希评论区指正 1.dp定义在全局会wa struct node {int count; // 当前容量下能够存储的程序数量int sum; // 当前容量下所占用的磁带长度vector<int> path; // 当前容量下选择的程序的路径&#xff08;存放的程序…

流量主微信小程序工具类去水印

工具类微信小程序流量主带后台管理&#xff0c;可开通广告&#xff0c;带自有后台管理&#xff0c;不借助第三方接口 介绍 支持抖音&#xff0c;小红书&#xff0c;哔哩哔哩视频水印去除&#xff0c;功能实现不借助第三方平台。可实现微信小程序流量主广告变现功能&#xff0c…

04软件测试需求分析案例-用户登录

通读文档&#xff0c;提取信息&#xff0c;提出问题&#xff0c;整理为需求。 从需求规格说明、设计说明、配置说明等文档获取原始需求&#xff0c;通读原始需求&#xff0c;分析有哪些功能&#xff0c;每种功能要完成什么业务&#xff0c;业务该如何实现&#xff0c;业务逻辑…