XU XUv0.8.8
EN

文档 / 教程

14 · TCP echo

listen_on / accept / 每连接 xu handle。

ln := net.listen_on("tcp", "127.0.0.1:19000") or (err) { << 1 }
c := ln.accept() or (err) { -> }
xu handle(c)

另一终端:printf ping | nc 127.0.0.1 19000。

Windows 上 TCP dial/listen 返回错误占位,不是静默成功。

源码

@main

#net

// TCP echo。
//   printf ping | nc 127.0.0.1 19000
// UDP 见 15udp_echo。

fn handle(c net.Conn) {
    mut conn := c
    buf := conn.read(4096) or (err) {
        conn.close() or (e2) { << }
        <<
    }
    if buf.len == 0 {
        conn.close() or (err) { << }
        <<
    }
    conn.write(&buf) or (err) { << }
    conn.close() or (err) { << }
}

fn main() int {
    ln := net.listen_on("tcp", "127.0.0.1:19000") or (err) {
        println(err.msg())
        << 1
    }
    println("tcp://127.0.0.1:19000  echo")
    mut running := true
    while running {
        c := ln.accept() or (err) {
            ->
        }
        xu handle(c)
    }
    << 0
}

在独立的 examples 仓库根执行;源码位于 examples/。