The echo server and client is the Hello, World! of network programming. Below is an example implementation in Ruby, where echod.rb is the server and echo.rb is the client. By default, the server listens on 127.0.0.1, port 8756, and the client connects to that address. Both programs accept two optional positional arguments, where the first is the host and the second is the port.
echod.rb
#!/usr/bin/env ruby require 'socket' class EchoServer def initialize(host='127.0.0.1', port=8765) @host = host @port = port @server = TCPServer.open(host, port) end def start_message STDOUT.puts "The server is running on #{@host}:#{@port}" STDOUT.puts "Press CTL-C to terminate" end def serve_forever start_message while client = @server.accept line = client.gets client.puts line client.close end end end host = '127.0.0.1' port = 8765 if not ARGV.length.between?(0,2) puts 'usage: echod [HOST [PORT]]' Process.exit(1) end case ARGV.length when 1 host = ARGV[0] when 2 host = ARGV[0] port = ARGV[1].to_i end echod = EchoServer.new(host, port) echod.serve_forever
echo.rb
#!/usr/bin/env ruby require 'socket' class EchoClient def initialize(host, port) @host = host @port = port end def request(msg) s = TCPSocket.open(@host, @port) s.puts msg response = s.gets.chomp s.close response end end host = '127.0.0.1' port = 8765 if not ARGV.length.between?(0,2) puts 'usage: echo [host [port]]' Process.exit(1) end case ARGV.length when 1 host = ARGV[0] when 2 host = ARGV[0] port = ARGV[1].to_i end echo = EchoClient.new(host, port) puts 'Enter an empty line to quit' while true line = STDIN.gets.chomp if line == '' break end response = echo.request(line) STDOUT.puts response end
Below is an example use of the two programs.
example
$ ./echod.rb & $ ./echo.rb Enter an empty line to quit hello hello bye bye $
Thanks for the brief examples. Serves good for a starting point. But you may include comment corresponding to each step too for this to be more useful.
ReplyDelete