원클릭으로
cangjie-socket
仓颉语言 Socket 编程。当需要了解仓颉语言的TCP/UDP Socket编程、Socket选项与超时、Unix Domain Socket、IP地址工具、TLS/SSL加密通信等特性时,应使用此 Skill。
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
仓颉语言 Socket 编程。当需要了解仓颉语言的TCP/UDP Socket编程、Socket选项与超时、Unix Domain Socket、IP地址工具、TLS/SSL加密通信等特性时,应使用此 Skill。
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
当需要构建鸿蒙应用项目时,使用此 Skill 执行构建流程。此 Skill 包含完整的构建命令、构建流程说明、构建失败处理流程。构建脚本会自动执行依赖安装、仓颉预编译、资源生成、编译、打包等步骤。
在鸿蒙应用(Cangjie)开发中,当需要使用 stdx 拓展库(如 crypto、encoding、net、log、actors 等),或在构建/链接阶段出现 stdx 相关错误时,使用此 Skill 获取/解压 stdx 包,并指导在 entry/cjpm.toml 中正确配置 bin-dependencies.path-option。
在进行仓颉工程或鸿蒙应用开发时的第一步,应该优先读取该SKILL,用来确定后续的开发步骤。
仓颉语言内置注解。当需要了解仓颉 SDK 提供的内置注解(@sourcePackage/@sourceFile/@sourceLine/@When/@FastNative/@Frozen/@Attribute/@Deprecated)的用途、语法和最优实践时,应使用此 Skill。
仓颉语言附录参考。当需要查阅仓颉语言的关键字列表、运算符优先级与结合性、运算符重载函数签名、运行时环境变量配置、包兼容性规则、TokenKind枚举类型时,应使用此 Skill。
仓颉标准库 Array 类型详细指南。当需要了解 Array 的构造、元素访问、切片、拼接、查找、排序、拷贝、反转、映射、扁平化等操作的完整 API 和用法时,应使用此 Skill。
| name | cangjie-socket |
| description | 仓颉语言 Socket 编程。当需要了解仓颉语言的TCP/UDP Socket编程、Socket选项与超时、Unix Domain Socket、IP地址工具、TLS/SSL加密通信等特性时,应使用此 Skill。 |
std.net 包):TCP(TcpSocket)、UDP(UdpSocket)、Unix Domain Socketstdx.net.tls 包):TLS 1.2/1.3 加密传输Resource,使用 try-with-resource 自动清理SocketAddress(抽象基类)→ IPSocketAddress(IP+端口)、UnixSocketAddress(文件路径)IPAddress(抽象)→ IPv4Address、IPv6Address
IPAddress.parse(str) / IPAddress.tryParse(str) — 解析地址IPAddress.resolve(hostname) — DNS 解析isLoopback()、isPrivate()、isMulticast()TcpServerSocket(bindAt: port) → bind() → accept()(阻塞等待连接)accept(timeout) — 带超时的接受连接backlogSize、reuseAddress、reusePort、receiveBufferSize、sendBufferSizeTcpSocket(host, port) → connect() → read()/write()connect(timeout) — 带超时连接readTimeout、writeTimeout(Duration 类型)noDelay(TCP_NODELAY)、keepAlive(SocketKeepAliveConfig)、lingerimport std.net.*
import std.sync.*
let SERVER_PORT: UInt16 = 33333
let ready = SyncCounter(1)
func runServer() {
try (server = TcpServerSocket(bindAt: SERVER_PORT)) {
server.bind()
ready.dec()
try (client = server.accept()) {
let buf = Array<Byte>(10, repeat: 0)
let n = client.read(buf)
println("Server read ${n} bytes: ${buf}")
}
}
}
main(): Int64 {
let fut = spawn { runServer() }
ready.waitUntilZero()
try (socket = TcpSocket("127.0.0.1", SERVER_PORT)) {
socket.connect()
socket.write([1, 2, 3])
}
fut.get()
return 0
}
UdpSocket(bindAt: port) → bind()sendTo(IPSocketAddress, data) 或连接后 send(data)receiveFrom(buffer) → (SocketAddress, count),或连接后 receive(buffer)connect(addr) 锁定远端地址(之后可用 send/receive)disconnect() — 解除连接receiveTimeout、sendTimeoutimport std.net.*
import std.sync.*
import std.time.*
let SERVER_PORT: UInt16 = 33333
let barrier = Barrier(2)
func runUdpServer() {
try (server = UdpSocket(bindAt: SERVER_PORT)) {
server.bind()
barrier.wait()
let buf = Array<Byte>(3, repeat: 0)
let (addr, n) = server.receiveFrom(buf)
println("Received ${n} bytes: ${buf}")
}
}
main(): Int64 {
let fut = spawn { runUdpServer() }
barrier.wait()
try (sock = UdpSocket(bindAt: 0)) {
sock.sendTimeout = Duration.second * 2
sock.bind()
sock.sendTo(IPSocketAddress("127.0.0.1", SERVER_PORT), [1, 2, 3])
}
fut.get()
return 0
}
| 属性 | 说明 |
|---|---|
readTimeout / writeTimeout | 读写超时(Duration 类型),超时抛 SocketTimeoutException |
reuseAddress / reusePort | 地址/端口复用 |
receiveBufferSize / sendBufferSize | 收发缓冲区大小 |
| 属性 | 说明 |
|---|---|
noDelay | 禁用 Nagle 算法(降低延迟) |
keepAlive | SocketKeepAliveConfig(interval, count) — TCP 保活配置 |
linger | SO_LINGER — 关闭时等待数据发送完毕 |
getSocketOptionIntNative(level, name) / setSocketOptionIntNative(level, name, value)OptionLevel:TCP、SOCKET 等SocketOptions:TCP_NODELAY、SO_KEEPALIVE、SO_REUSEADDR 等常量import std.net.*
import std.time.*
main() {
try (sock = TcpSocket("127.0.0.1", 80)) {
sock.readTimeout = Duration.second
sock.noDelay = true
sock.linger = Duration.minute
sock.keepAlive = SocketKeepAliveConfig(
interval: Duration.second * 7,
count: 15
)
}
}
UnixServerSocket(bindAt: path) + UnixSocket(path)UnixDatagramSocket(bindAt: path)remove(path) 清理 socket 文件import std.net.*
import std.sync.*
import std.fs.*
let SOCK_PATH = "/tmp/cj_demo.sock"
let barrier = Barrier(2)
func runServer() {
try (server = UnixServerSocket(bindAt: SOCK_PATH)) {
server.bind()
barrier.wait()
try (client = server.accept()) {
client.write("hello".toArray())
}
}
}
main(): Int64 {
let fut = spawn { runServer() }
barrier.wait()
try (sock = UnixSocket(SOCK_PATH)) {
sock.connect()
let buf = Array<Byte>(5, repeat: 0)
sock.read(buf)
println(String.fromUtf8(buf)) // "hello"
}
fut.get()
remove(SOCK_PATH)
return 0
}
| 异常 | 说明 |
|---|---|
SocketException | 通用 Socket 错误 |
SocketTimeoutException | Socket 操作超时 |
try-with-resource 自动清理TcpServerSocket → bind() → 循环 accept()TlsSocket 并 handshake()