🐷
ZigでTCP通信を行うサンプルプログラム
本記事はZigアドベントカレンダー19日目の記事です。
Zigの標準ライブラリのstd.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