Created
February 28, 2014 19:59
-
-
Save mmmries/9278656 to your computer and use it in GitHub Desktop.
TCP Server Example
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$ 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! |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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