【Ruby】TCPクライアント/サーバプログラム
本日の自己啓発。
rubyで簡単なTCPクライアント/サーバプログラムを書いてみた。
●tcp_client.rb
*******************************************
#!/usr/bin/ruby
require "socket"
# localhostの20000番へ接続
sock = TCPSocket.open("localhost", 20000)
if sock.closed?
print("can not open TCPSocket")
exit(1)
end
begin
# サーバに文字列を送付
# サーバ側の作りの問題だが、改行を含む文字列でないと処理が継続されない。
sock.write("hello\n")
# 相手からの文字列を出力
print(sock.gets)
ensure # 例外が発生しても実行
# ソケットを閉じる。
sock.close
end
exit(0)
*******************************************
●tcp_server.rb
*******************************************
#!/usr/bin/ruby
require "socket"
# ポート番号20000番で開く。
server = TCPServer.open(20000)
# 処理中に例外が発生しても待ちうけソケットは必ず閉じる。
begin
# 複数のクライアントからの接続を受け付けるため無限ループ
loop {
# クライアントからの接続を許可する。
# クライアントからの同時接続にも対応できるようにスレッド化しておく。
Thread.start(server.accept) { |sock|
begin
# クライアントからデータ表示する。
puts(sock.gets)
# クライアントに応答を返す。
sock.puts("OK")
ensure
# 接続ソケットを閉じる。
sock.close
end
}
}
ensure
# 待ちうけソケットを閉じる。
server.close
end
*******************************************
実行結果
クライアント側ターミナル
$ ruby tcp_client.rb
OK
$ ruby tcp_client.rb
OK
$
サーバ側ターミナル
$ ruby tcp_server.rb
hello
hello
*******************************************
例外処理のキャッチがかなり甘い気がするが、まぁ動いたか良いか。