📅  最后修改于: 2023-12-03 15:04:57.321000             🧑  作者: Mango
套接字是指在不同计算机间或同一计算机内不同进程间传输数据的一种机制。它是应用层与传输层之间的接口。通俗点讲,套接字就是两个进程之间通信的端点。
Ruby 提供了 Socket 库来支持套接字编程。通过 Socket 库可以创建不同类型的套接字,如 TCP、UDP、UNIX 等类型的套接字。
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 套接字用于不可靠的、无连接的数据传输。下面是一个简单的例子:
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
方法接收服务器返回的消息。