Ruby Socket 编程学习笔记

简介

Socket 是一种提供了网络通信能力的编程接口,它允许不同计算机之间通过网络进行通信。Ruby 中提供了 Socket 库,使得开发者可以使用 Ruby 进行 Socket 编程。

基础概念

在 Ruby 中,Socket 对象是用于处理客户端和服务器之间的连接的。一个 Socket 对象包含了一个 IP 地址和一个端口号,从而可以实现计算机之间的通信。

创建 Socket

创建 Socket 可以使用 Socket.new 方法,指定地址和端口号,如下所示:

Copy Code
require 'socket' server = TCPServer.new('localhost', 3000)

上述代码中,TCPServer.new 表示创建一个 TCP 服务器,并监听在本地地址 localhost 的 3000 端口。

建立连接

使用 Socket 建立连接需要先创建一个 Socket 对象,然后使用 connect 方法连接到服务器。如下所示:

Copy Code
require '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 Code
require '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 Code
require '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 Code
require '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

该聊天程序实现了客户端和服务器之间的实时通信,可以在不同计算机间进行聊天。