📜  Ruby-套接字编程(1)

📅  最后修改于: 2023-12-03 15:04:57.321000             🧑  作者: Mango

Ruby 套接字编程

什么是套接字

套接字是指在不同计算机间或同一计算机内不同进程间传输数据的一种机制。它是应用层与传输层之间的接口。通俗点讲,套接字就是两个进程之间通信的端点。

Ruby 中的套接字编程

Ruby 提供了 Socket 库来支持套接字编程。通过 Socket 库可以创建不同类型的套接字,如 TCP、UDP、UNIX 等类型的套接字。

TCP 套接字

TCP 套接字用于可靠的、面向连接的数据传输。下面是一个简单的例子:

require 'socket'

server = TCPServer.new(2000)

loop do
  client = server.accept
  client.puts "Hello, world!"
  client.close
end

上面的代码创建了一个 TCP 服务器,并在 2000 端口上监听来自客户端的连接。当客户端连接成功后,服务器向客户端发送一条消息,并关闭连接。这里的 TCPServer.new 创建了一个服务器实例,它可以通过 accept 方法接受客户端的连接。客户端连接成功后,accept 方法返回一个新的 TCPClient 实例,它可以用来向客户端发送数据。

客户端可以通过以下方式连接到服务器:

require 'socket'

client = TCPSocket.new('localhost', 2000)

while line = client.gets
  puts line
end

client.close

上面的代码创建了一个新的 TCP 客户端,并连接到 localhost 的 2000 端口。客户端可以通过 gets 方法读取服务器发送过来的消息。

UDP 套接字

UDP 套接字用于不可靠的、无连接的数据传输。下面是一个简单的例子:

require 'socket'

socket = UDPSocket.new
socket.bind('localhost', 2000)

loop do
  message, sender = socket.recvfrom(255)
  puts "Received message: #{message}"
  socket.send("Echo: #{message}", 0, sender[3], sender[1])
end

上面的代码创建了一个 UDP 服务器,并在 2000 端口上监听来自客户端的连接。当客户端发送消息到服务器时,服务器将收到此消息,并向发送者发送一个回复。这里的 UDPSocket.new 创建了一个 UDP 套接字实例,它可以通过 bind 方法绑定到指定的 IP 地址和端口上。当有数据发送到该地址和端口时,recvfrom 方法将读取这些数据。

客户端可以通过以下方式向服务器发送消息:

require 'socket'

socket = UDPSocket.new
message = "Hello, world!"
socket.send(message, 0, 'localhost', 2000)

response, sender = socket.recvfrom(255)
puts "Received response: #{response}"

上面的代码创建了一个新的 UDP 客户端,并向 localhost 的 2000 端口发送一条消息。客户端可以通过 send 方法向服务器发送消息,0 参数表示不使用特殊选项,'localhost' 表示服务器地址,2000 表示服务器端口。当服务器收到消息后,它将回复一个消息。客户端可以通过 recvfrom 方法接收服务器返回的消息。