【Ruby】ソケットプログラミング リクエストを複数回渡すクライアントの実装
ソケットプログラミング第二弾。
今回はクライアント・サーバーが複数回やり取りをするコード。
ポイント
サーバー側でクライアントを切断すると、
以降はそのクライアントインスタンスのputsメソッドは使用できなくなる。
うーん。
ソケットプログラミングは手探り状態やー・・
■クライアント
require 'socket' host, port = ARGV socket = TCPSocket.open(host, port) local, peer = socket.addr, socket.peeraddr STDOUT.print peer,"\n" STDOUT.puts "using localport #{local}" begin sleep(0.5) msg = socket.read_nonblock(4096) STDOUT.puts msg rescue SystemCallError end loop do STDOUT.print '>' STDOUT.flush local = STDIN.gets break if local.chomp == "exit" #こうやってsocketを都度生成していれば2回目以降も実施できる #ここをコメントアウトするとエラー socket = TCPSocket.open(host, port) socket.puts(local) socket.flush response = socket.readpartial(4096) puts response p socket end
■サーバー
require 'socket' server = TCPServer.open("localhost", 80) loop { client = server.accept client.puts("hello") client.close }
■実行結果
["AF_INET", 80, "127.0.0.1", "127.0.0.1"] using localport ["AF_INET", 63073, "127.0.0.1", "127.0.0.1"] hello >cc hello #<TCPSocket:fd 4> >ee hello #<TCPSocket:fd 5> >
次は、サーバーの多重化を考えるよ。
⇒こちら