当前位置:   article > 正文

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

vscode 仓颉

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

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

环境配置
系统: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 = 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
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

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

import std.socket.*
import std.time.* 
import std.sync.*
  • 1
  • 2
  • 3

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

from std import socket.*
from std import time.*
from std import sync.*
  • 1
  • 2
  • 3

至少,在我测试的时候,改成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)
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/1009782
推荐阅读
相关标签
  

闽ICP备14008679号