Ruby: TCPsocket で個々のバイト (CR/LF なし) をリッスンし、ファイルに書き込みます

概要

特定の TCP ポートをリッスンし、受信データをキャプチャして一度に 1 バイトずつ処理するサーバーを作成したいと考えています (受信データの量は最小限で、1 時間あたり数キロバイトです)。

簡単にするために、受信した文字の ASCII コードをコンソールにエコーしたいと思います。動作する文字列ベースの実装はありますが、CR/LF を待たずにサーバーにバイトを即座に処理させる方法がわかりません。

助けていただければ幸いです。 Ruby3.3.1を使用しています

data =socket.recvfrom(1000) を使用しようとしましたが、私の知る限り、これはまだ CR/LF を待機しています

解決策

ソケット.getbyteを使用してみてください。これは、次に受信したバイトの ASCII コードを返します。その後、Integer#chr を使用してバイトを出力できます。

socket.getbyte # => 104
socket.getbyte.chr # => "h"

これをループに入れて、受信データをコンソールに出力できます。

loop do
  puts socket.getbyte.chr
end