Skip to content

Instantly share code, notes, and snippets.

@mmmries
Created February 28, 2014 19:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mmmries/9278656 to your computer and use it in GitHub Desktop.
Save mmmries/9278656 to your computer and use it in GitHub Desktop.
TCP Server Example
$ ruby -v
ruby 2.1.0p0 (2013-12-25 revision 44422) [x86_64-darwin12.0]
$ ruby tmp/tcp_server.rb
Server :: client says: ping
Client :: server says: Hello! Time is 2014-02-28 12:55:54 -0700
Server :: client says: die!
Server :: farewell cruel world!
All Done!
require 'socket'
server = TCPServer.new 2000 # Server bind to port 2000
def read_socket_message(socket, chunk_size = 2)
buffer = ""
while ! buffer.end_with?("\n")
IO.select([socket])
buffer << socket.read_nonblock(chunk_size)
end
buffer
end
server_thread = Thread.new do
loop do
client = server.accept # Wait for a client to connect
message = read_socket_message(client)
puts "Server :: client says: #{message}"
if message == "die!\n"
puts "Server :: farewell cruel world!"
client.close
break
else
client.puts "Hello! Time is #{Time.now}"
client.close
end
end
end
client_thread = Thread.new do
socket = TCPSocket.new('127.0.0.1', 2000)
socket.puts("ping")
response = read_socket_message(socket)
puts "Client :: server says: #{response}"
socket = TCPSocket.new('127.0.0.1', 2000)
socket.puts("die!")
end
client_thread.join
server_thread.join
puts "All Done!"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment