📚
【Zig】TCP クライアントで HTTP/2 フレームを送信する
まず nghttpd で TLS なしの HTTP/2 サーバーを起動させる
/usr/sbin/nghttpd 8000 --no-tls -v -d ./web
次のようなクライアントを用意する。ループの停止条件は手抜きして応答の ACK フレームが来たときとしている。
const std = @import("std");
const net = std.net;
const print = std.debug.print;
const h2 = @import("h2frames.zig");
// https://gist.github.com/masakielastic/6b77b78079f7a980eb5ccdf533ca7b1f
pub fn main() !void {
const port = try std.fmt.parseInt(u16, "8000", 10);
const peer = try net.Address.parseIp4("127.0.0.1", port);
const stream = try net.tcpConnectToAddress(peer);
defer stream.close();
var writer = stream.writer();
var reader = stream.reader();
_ = try writer.write(h2.h2frames());
while (true) {
var buffer: [1024]u8 = undefined;
const size = try reader.read(&buffer);
print("{s}\n", .{std.fmt.fmtSliceHexLower(buffer[0..size])});
if (buffer[4] == 1) {
break;
}
}
}
Discussion