🐷

ZigでTCP通信を行うサンプルプログラム

2022/12/19に公開

本記事はZigアドベントカレンダー19日目の記事です。

Zigの標準ライブラリのstd.net のリファレンスを見ながら作ってみました。
https://ziglang.org/documentation/master/std/#root;net

サーバー側のサンプル

クライアント側のサンプル

Zigのエラーハンドリングのtryが便利すぎる

今回のサンプルのようにとりあえず正常系だけ書いて動作をみたいときには、エラーを返す関数には全部tryをつけてよべばいい。
実際にエラーが発生したときにはスタックトレースが出力されるので、どこで発生したのかわかる。そこからcatchでエラーを適切に処理するコードを追加すればいい。

Zigライブラリのリファレンスをみるときのコツ

  • 関数の中で第一引数がselfとなっているものは他の言語で言うところのインスタンスメソッド。
  • それ以外の関数の中からインスタンスを返すものが最初に呼ぶ関数の候補になる。
  • formatという関数は一見意味不明であるが心配しなくてもよい。これは直接呼ぶものではなく、std.fmtの中から間接的に呼ばれるもの。(雑に言うとJavaでのtoString()メソッドのようなもの)

例:以下のようにstd.net.Addressのインスタンスの内容をログに出すことができる。

    const adr = try net.Address.resolveIp("0.0.0.0", port);
    ...
  log.info("{d}:Listening on {}", .{time.milliTimestamp(), adr});

実際に出力されるログはこのようになる。簡単で便利。

info: 1671449107297:Listening on 0.0.0.0:8201

Discussion