Ruby Socket 编程学习笔记
简介
Socket 是一种提供了网络通信能力的编程接口,它允许不同计算机之间通过网络进行通信。Ruby 中提供了 Socket 库,使得开发者可以使用 Ruby 进行 Socket 编程。
基础概念
在 Ruby 中,Socket 对象是用于处理客户端和服务器之间的连接的。一个 Socket 对象包含了一个 IP 地址和一个端口号,从而可以实现计算机之间的通信。
创建 Socket
创建 Socket 可以使用 Socket.new
方法,指定地址和端口号,如下所示:
Copy Coderequire 'socket'
server = TCPServer.new('localhost', 3000)
上述代码中,TCPServer.new
表示创建一个 TCP 服务器,并监听在本地地址 localhost
的 3000 端口。
建立连接
使用 Socket 建立连接需要先创建一个 Socket
对象,然后使用 connect
方法连接到服务器。如下所示:
Copy Coderequire 'socket'
client = TCPSocket.new('localhost', 3000)
# 发送数据
client.write('Hello, server!')
# 接受数据
response = client.read
puts "Server responded with: #{response}"
# 断开连接
client.close
上述代码中,TCPSocket.new
表示连接到本地地址 localhost
的 3000 端口。
服务器
下面是一个简单的服务器代码示例:
Copy Coderequire 'socket'
server = TCPServer.new('localhost', 3000)
loop do
client = server.accept
# 接收客户端发送的消息
data = client.read
# 处理消息
response = "Response to: #{data}"
# 发送消息到客户端
client.write(response)
# 关闭连接
client.close
end
上述代码中,server.accept
表示等待客户端连接,并返回一个 Socket
对象。
实例
实现简单的聊天程序
下面是一个简单的聊天程序,使用 Ruby Socket 编程实现:
服务端代码:
rubyCopy Coderequire 'socket'
server = TCPServer.new('localhost', 3000)
puts 'Server started...'
loop do
client = server.accept
puts 'Client connected...'
# 接收客户端发送的消息
username = client.read.chomp
puts "New user joined the chat: #{username}"
loop do
message = client.read.chomp
puts "#{username}: #{message}"
# 向其他客户端广播消息
server.clients.each do |recipient|
unless recipient == client
recipient.puts "#{username}: #{message}"
end
end
end
end
客户端代码:
rubyCopy Coderequire 'socket'
puts 'What is your username?'
username = gets.chomp
client = TCPSocket.new('localhost', 3000)
client.puts username
puts 'Connected to server...'
Thread.new do
loop do
message = client.read.chomp
puts message
end
end
loop do
message = gets.chomp
client.puts message
end
该聊天程序实现了客户端和服务器之间的实时通信,可以在不同计算机间进行聊天。