赞
踩
前言
由于仓颉目前是内测状态, 不能展示仓颉的详细信息,但是华为仓颉官网的公共文档的内容是可以公开的。
我相信有不少喜欢编程的朋友都申请了内测,但是一些编程初学者应该和我一样,处于摸索阶段。所以,我这里把我测试的一个示例程序分享一下,以便大家参考。
环境配置
系统:windows 10
平台:visual studio code
语言:仓颉
库:–
这个需要关注仓颉编程的公众号,要去填内测申请,等官方审核通过,就可以在gitcode上下载,需要注册一个gitcode账号。
根据我的经验,这个审核挺快的,基本上一天就可以。至于gitcode的界面,根据官方要求,暂时无法展示。
下载安装好sdk和插件后,在visual studio code上新建一个仓颉项目,这里暂时也无法展示仓颉项目的具体内容,但是如果你已经申请内测成功,应该就了解了。
我这里主要说一下代码,官方文档有一个socket的示例,这是公开文档,如下:
代码:
import std.socket.* import std.time.* 导入 std.time.* import std.sync.* let SERVER_PORT: UInt16 = 8080 func 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=2000 let server1=TcpServerSocket(bindAt:port) server1.bind() try(clt1=server1.accept()){ println("client is ${clt1}") var i:UInt16=0 while (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 +=1 sleep(Duration.millisecond * 1000) } }
可以看到,我们使用了while来循环,在上面的示例中,我为while循环添加了条件,即循环20次就退出,我本来是想用loop的,但我在仓颉的官方文档中没找到loop关键字。
我们运行以上代码后,程序就会生一个本地端口为2000的server,这时候,你可以使用其他调试助手,打开一个socket客户端,连接到“127.0.0.1:2000”,然后给服务器发送数据,可以在vscode的终端上看到接收数据:
以上是我初学仓颉的一个体验,根据仓颉的官方文档,可以发现仓颉语言缝合不少其他语言的特性,对于有经验的程序员来说,应该是感到很熟悉的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。