套接字的主要目的是允许客户端和服务器相互通信,而套接字编程是一种在两个节点(套接字)之间创建通信的机制。
Ruby中允许两个级别来访问网络服务。一级允许基本套接字支持,该级别允许您在无连接和面向连接的协议(操作系统支持)下使用客户端和服务器,而二级则提供对预定义库的访问,这有助于您访问应用程序-级别的网络协议,即HTTP,FTP等。
让我们借助下面给出的示例来了解如何在Ruby中完成套接字编程:
require 'socket' server = TCPServer.open(2000) loop { client = server.accept client.puts "Hello. Greetings from Nhooo.com" client.puts "Hope, you all are enjoying the day" client.puts "This is an example of socket programming." client.close }
上面的程序是一个简单的客户端程序,它将使用提供的端口地址打开一个连接。我们正在利用一个循环,在该循环下我们将使用一个实例客户端。客户端接受到端口2000的所有连接,并使用套接字网络将数据发送到客户端。此处发送的数据是字符串。最后,我们要关闭套接字。
我们看到了如何通过套接字发送数据?现在,让我们看看如何通过套接字从服务器获取数据。请参考下面给出的代码:
require 'socket' hostname = 'localhost' port = 2000 skt = TCPSocket.open(hostname, port) while ln = skt.gets puts ln.chomp end skt.close
在上面的代码中,我们包括一个名为Socket的预安装模块。然后,我们将值分配给localhost和port。之后,我们使用'skt'打开TCPSocket以及主机名和端口。使用while循环可获取通过网络发送的所有数据。最后,关闭插座。
我们上面阅读的代码一次允许一个客户端和一台服务器。但是我们可能需要一个允许多个客户端同时与一台服务器连接的代码。在这种情况下,以下代码可能会提供一些帮助:
require 'socket' server = TCPServer.open(2009) loop { Thread.start(server.accept) do |client| client.puts "Hey Client! you are connected with the server." client.puts "Sending...........................!" client.puts "Its time to close the connection. See you super soon!" client.close end }
Ruby库中定义的线程类有助于创建多线程网络。线程类是一个新的执行线程,可以立即处理连接,同时允许主类预期更多连接。在上面的程序中,我们利用Thread类连接多个客户端。