华为仓颉语言体验:一个简单的socket服务端实现

前言
由于仓颉目前是内测状态, 不能展示仓颉的详细信息,但是华为仓颉官网的公共文档的内容是可以公开的。

我相信有不少喜欢编程的朋友都申请了内测,但是一些编程初学者应该和我一样,处于摸索阶段。所以,我这里把我测试的一个示例程序分享一下,以便大家参考。

环境配置
系统:windows 10
平台:visual studio code
语言:仓颉
库:–

一、仓颉sdk和vscode插件获取

这个需要关注仓颉编程的公众号,要去填内测申请,等官方审核通过,就可以在gitcode上下载,需要注册一个gitcode账号。
根据我的经验,这个审核挺快的,基本上一天就可以。至于gitcode的界面,根据官方要求,暂时无法展示。

二、socket服务端程序

下载安装好sdk和插件后,在visual studio code上新建一个仓颉项目,这里暂时也无法展示仓颉项目的具体内容,但是如果你已经申请内测成功,应该就了解了。
我这里主要说一下代码,官方文档有一个socket的示例,这是公开文档,如下:
在这里插入图片描述
代码:

import std.socket.*
import std.time.* 导入 std.time.*
import std.sync.*let SERVER_PORT: UInt16 = 8080func runTcpServer() {try (serverSocket = TcpServerSocket(bindAt: SERVER_PORT)) {serverSocket.bind()try (client = serverSocket.accept()) {let buf = Array<Byte>(10, item: 0)let count = client.read(buf)// 服务端读取到的数据为: [1, 2, 3, 0, 0, 0, 0, 0, 0, 0]println("Server read ${count} bytes: ${buf}")}}
}main(): Int64 {spawn {runTcpServer()}sleep(Duration.millisecond * 500)try (socket = TcpSocket("127.0.0.1", SERVER_PORT)) {socket.connect()socket.write(Array<Byte>([1, 2, 3]))}return 0
}

这里有个注意的问题,如果你按照文档上面提供的导入方法,即:

import std.socket.*
import std.time.* 
import std.sync.*

vscode很可能会提示错误,你可以改一下:

from std import socket.*
from std import time.*
from std import sync.*

至少,在我测试的时候,改成from这种导入形式是可以的。

我们再来看socket,官方文档提供的示例,是将服务端和客户端写在一起,而且只运行了一次,但我们实际使用中,通常都是循环读取的,所以我们来改写一下:

   let port:UInt16=2000let server1=TcpServerSocket(bindAt:port)server1.bind()try(clt1=server1.accept()){println("client is ${clt1}")var i:UInt16=0while (i<20){if (clt1 is Nothing){println("no client")}else{let buf=Array<Byte>(10,item:0)let count=clt1.read(buf)println("server read ${count} bytes:${buf}")}//}i +=1sleep(Duration.millisecond * 1000)}}

可以看到,我们使用了while来循环,在上面的示例中,我为while循环添加了条件,即循环20次就退出,我本来是想用loop的,但我在仓颉的官方文档中没找到loop关键字。
我们运行以上代码后,程序就会生一个本地端口为2000的server,这时候,你可以使用其他调试助手,打开一个socket客户端,连接到“127.0.0.1:2000”,然后给服务器发送数据,可以在vscode的终端上看到接收数据:
在这里插入图片描述
以上是我初学仓颉的一个体验,根据仓颉的官方文档,可以发现仓颉语言缝合不少其他语言的特性,对于有经验的程序员来说,应该是感到很熟悉的。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

排序题目:多数元素 II

文章目录 题目标题和出处难度题目描述要求示例数据范围进阶 前言解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 解法三思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;多数元素 II 出处&#xff1a;229. 多数元素 II 难度 3 级 题目描述 …

css高度0到高度auto,过渡的设置

1.css从高度0到高度auto,过渡设置 方法(vue代码) 你可以通过设置transform: scale(0);到 transform: scale(1); 来实现,具体代码 你也可以通过设置transform: scaleY(0);到 transform: scaleY(1); 这两种展示的效果不一样,你可以看看你喜欢那种 // css代码// 原来的css类 .s…

港口危险货物安全管理人员考试题库(含答案)

一、单选题 1.化学品安全标签内容中警示词有( )种分别进行危害程度的警示。 A、3 B、4 C、5 参考答案:A 2.运输放射性物品&#xff0c;应当使用( )的放射性物品运输包装容器(以下简称运输容器)。 A、专业 B、专用 C、统一 D、定制 参考答案:B 3.库区仪表及计算机监控管理系…

中电金信:金Gien乐道 | 6月热门新闻盘点 回顾这一月的焦点事件

“以检之力 e企守护”——上海市检一分院与中电金信开展联学联建 6月24日&#xff0c;上海市人民检察院第一分院与中电金信数字科技集团股份有限公司联合开展“以检之力 e企守护”联学联建活动。双方共同参观了全国检察机关证券期货犯罪办案基地和重大职务犯罪案件办理&#xf…

HTML5与3D打印:探索网页内容的物理化可能

随着科技的飞速发展&#xff0c;互联网与物理世界的交汇点日益增多。HTML5作为当前网页开发的主流标准&#xff0c;不仅推动了网页内容的丰富性和互动性&#xff0c;还在与3D打印技术的结合中&#xff0c;展现出了将网页内容物理化的巨大潜力。本文将探讨HTML5与3D打印的结合点…

C++ 中的数据类型

C规定在创建一个变量或者常量时&#xff0c;必须要指定出相应的数据类型&#xff0c;否则无法给变量分配内存. 1 整型 作用&#xff1a;整型变量表示的是整数类型的数据 C中能够表示整型的类型有以下几种方式&#xff0c;区别在于所占内存空间不同&#xff1a; 数据类型占用…

python(6)numpy的使用详细讲解

在numpy中&#xff0c;最基本的数据结构是数组&#xff0c;因此我们首先需要了解如何创建一个数组。numpy提供了多种数组创建方法&#xff0c;包括从列表或元组创建、从文件中读取数据、使用特定函数创建等。下面是一些常用的创建方法&#xff1a; 一、创建数组 1. 从列表或元…

【MySQL备份】Percona XtraBackup基础篇

目录 1.关于Percona XtraBackup 2. Percona XtraBackup有哪些特点&#xff1f; 3.安装Percona XtraBackup 3.1.环境信息 3.2.安装步骤 4. xtrabackup内部流程图 5.Percona XtraBackup基础语法 5.1.全量备份 5.2.增量备份 5.2.1.基于全量备份的增量备份 5.2.2.基于前…

[leetcode]max-consecutive-ones 最大连续1的个数

. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:int findMaxConsecutiveOnes(vector<int>& nums) {int maxCount 0, count 0;int n nums.size();for (int i 0; i < n; i) {if (nums[i] 1) {count;maxCount max(maxCount, count);} else…

安装和微调大模型(基于LLaMA-Factory)

打开终端&#xff08;在Unix或macOS上&#xff09;或命令提示符/Anaconda Prompt&#xff08;在Windows上&#xff09;。 创建一个名为lora的虚拟环境并指定Python版本为3.9。 conda create --name lora python3.9激活新创建的虚拟环境。 conda activate lora克隆项目。 git …

详解COB显示屏的技术特点

COB&#xff08;Chip on Board&#xff09;显示屏作为一种采用倒装COB封装技术的LED显示屏&#xff0c;在显示效果以及使用稳定性跟防护性方面&#xff0c;拥有更大优势&#xff0c;今天跟随COB显示屏厂家中品瑞科技一起来看看&#xff0c;COB显示屏的技术特点&#xff1a; 1、…

如何在OpenEuler 上快速部署一套Zabbix7.0监控系统

如何在OpenEuler 上快速部署一套Zabbix监控系统 一、环境信息 用途机器IP操作系统备注zabbix-server172.22.33.180openeuler 22.03 LTS SP37.0 LTS 版本&#xff0c;容器部署zabbix-agent172.16.10.182openeuler 22.03 LTS SP37.0 源码编译部署 二、Docker 部署 2.1 二进制…

【小白入门】关于视频剪辑该自学还是报课?

★解密&#xff1a;【赋能计划—剪辑小白入门】 ★ 在这个视频流量为王的时代&#xff0c;人人都想打造属于自己的IP&#xff0c;今年更是有许多企业家也纷纷下场干起来了&#xff0c;网上曾流行这样的一句话&#xff1a;“现在人们的生活方式改变了&#xff0c;所有事情都值得…

Anti-Canine Heartworm Antibody (Chicken) - HRP Conjugated

犬心丝虫&#xff08;学名Dirofilaria immitis&#xff09;是一种寄生丝虫&#xff0c;通过蚊子叮咬而传播。感染犬在早期阶段&#xff0c;大多不会出现症状。随着病情发展&#xff0c;将出现咳嗽、呼吸困难等症状&#xff0c;并伴有右心功能衰竭&#xff0c;最终全身衰弱或虚脱…

检索增强生成RAG系列3--RAG优化之文档处理

在上一章中罗列了对RAG准确度的几个重要关键点&#xff0c;主要包括2方面&#xff0c;这一章就针对其中一方面&#xff0c;来做详细的讲解以及其解决方案。 目录 1 文档解析1.1 文档解析工具1.2 实战经验1.3 代码演示 2 文档分块2.1 分块算法2.2 实战经验2.3 代码演示 3 文档e…

VLAN基础

一、什么是Vlan VLAN&#xff08;Virtual Local Area Network&#xff09;是虚拟局域网的简称&#xff0c;是一种将单一物理局域网&#xff08;LAN&#xff09;在逻辑层面上划分为多个独立的广播域的技术。每个VLAN都是一个独立的广播域&#xff0c;其内部主机可以直接通信&am…

python自动化办公之shutil

目录 1复制文件&#xff0c;此时存在2份相同文件 2移动文件&#xff0c;此时仅有1份文件 3删除文件&#xff0c;此时0份文件 用到的库&#xff1a;shutil&#xff0c;os 实现的效果&#xff1a;复制文件&#xff0c;移动文件&#xff0c;删除文件 代码&#xff1a; 1复制…

并发请求数量限制

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>并发请求数量限制</title> </head> <…

使用Colly库进行高效的网络爬虫开发

引言 随着互联网技术的飞速发展&#xff0c;网络数据已成为信息获取的重要来源。网络爬虫作为自动获取网页内容的工具&#xff0c;在数据分析、市场研究、信息聚合等领域发挥着重要作用。本文将介绍如何使用Go语言中的Colly库来开发高效的网络爬虫。 什么是Colly库&#xff1…

力扣974.和可被K整除的子数组

力扣974.和可被K整除的子数组 将余数相同的做差 若为负数要翻正再存入哈希表若为正数要存入哈希表统一操作 (sj % k k ) % k class Solution {public:int subarraysDivByK(vector<int>& nums, int k) {int n nums.size();vector<long> s(n1);for(int i0;i…