简单的Ruby中的Socket编程教程

Ruby提供了两个级别访问网络的服务,在底层你可以访问操作系统,它可以让你实现客户端和服务器为面向连接和无连接协议的基本套接字支持。

Ruby 统一支持应用程的网络协议,如FTP、HTTP等。

不管是高层的还是底层的。ruby提供了一些基本类,让你可以使用TCP,UDP,SOCKS等很多协议交互,而不必拘泥在网络层。这些类也提供了辅助类,让你可以轻松的对服务器进行读写。

接下来就让我们来学习如何进行 Ruby Socket 编程
什么是 Sockets

应用层通过传输层进行数据通信时,TCP和UDP会遇到同时为多个应用程序进程提供并发服务的问题。多个TCP连接或多个应用程序进程可能需要 通过同一个TCP协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了称为套接字 (Socket)的接口,区分不同应用程序进程间的网络通信和连接。

生成套接字,主要有3个参数:通信的目的IP地址、使用的传输 层协议(TCP或UDP)和使用的端口号。Socket原意是"插座"。通过将这3个参数结合起来,与一个"插座"Socket绑定,应用层就可以和传输 层通过套接字接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。

Sockets 词汇解析:

简单的客户端

以下我们通过给定的主机和端口编写了一个简单的客户端实例,Ruby TCPSocket 类提供了 open 方法来打开一个 socke。

TCPSocket.open(hosname, port ) 打开一个 TCP 连接。

一旦你打开一个 Socket 连接,你可以像 IO 对象一样读取它,完成后,你需要像关闭文件一样关闭该连接。

以下实例演示了如何连接到一个指定的主机,并从 socket 中读取数据,最后关闭socket:

require 'socket'   # Sockets 是标准库

hostname = 'localhost'
port = 2000

s = TCPSocket.open(hostname, port)

while line = s.gets  # 从 socket 中读取每行数据
 puts line.chop   # 打印到终端
end
s.close        # 关闭 socket

简单的服务

Ruby 中可以使用 TCPServer 类来写个简单的服务。TCPServer 对象是 TCPSocket 的工厂对象。

现在我们使用 TCPServer.open(hostname, port) 来创建一个 TCPServer 对象。

接下来调用 TCPServer 的 accept 方法,该方法会等到一个客户端连接到指定的端口,然后返回一个的TCPSocket对象,表示连接到该客户端。

require 'socket'        # 获取socket标准库

server = TCPServer.open(2000) # Socket 监听端口为 2000
loop {             # 永久运行服务
 client = server.accept    # 等待客户端连接
 client.puts(Time.now.ctime) # 发送时间到客户端
 client.puts "Closing the connection. Bye!"
 client.close         # 关闭客户端连接
}

现在,在服务器上运行以上代码,查看效果。
多客户端TCP服务

互联网上,大多服务都有大量的客户端连接。

Ruby的Thread类可以很容易地创建多线程服务,一个线程执行客户端的连接,而主线程在等待更多的连接。

require 'socket'        # 获取socket标准库

server = TCPServer.open(2000)  # Socket 监听端口为 2000
loop {             # 永久运行服务
 Thread.start(server.accept) do |client|
  client.puts(Time.now.ctime) # 发送时间到客户端
  client.puts "Closing the connection. Bye!"
  client.close        # 关闭客户端连接
 end
}

在这个例子中,socket永久运行,而当server.accept接收到客户端的连接时,一个新的线程被创建并立即开始处理请求。而主程序立即循环回,并等待新的连接。
微小的Web浏览器

我们可以使用socket库来实现任何的 Internet 协议。以下代码展示了如何获取网页的内容:

require 'socket'

host = 'www.ziqiangxuetang.com'   # web服务器
port = 80              # 默认 HTTP 端口
path = "/index.htm"         # 想要获取的文件地址

# 这是个 HTTP 请求
request = "GET #{path} HTTP/1.0\r\n\r\n"

socket = TCPSocket.open(host,port) # 连接服务器
socket.print(request)        # 发送请求
response = socket.read       # 读取完整的响应
# Split response at first blank line into headers and body
headers,body = response.split("\r\n\r\n", 2)
print body             # 输出结果

要实现一个类似 web 的客户端,你可以使用为 HTTP 预先构建的库如Net::HTTP。

以下代码与先前代码是等效的:

require 'net/http'         # 我们需要的库
host = 'www.ziqiangxuetang.com'      # web 服务器
path = '/index.htm'         # 我们想要的文件

http = Net::HTTP.new(host)     # 创建连接
headers, body = http.get(path)   # 请求文件
if headers.code == "200"      # 检测状态码
 print body
else
 puts "#{headers.code} #{headers.message}"
end
(0)

相关推荐

  • ruby 数组使用教程

    你通过在方括号里列出元素并用逗号将它们相互隔开来创建一个数组. Ruby的数组可以适应不同的对象类型 ruby> ary = [1, 2, "3"]    [1, 2, "3"] 就像前面提到的字符串一样.数组也可以相乘或相加 ruby> ary + ["foo", "bar"]    [1, 2, "3", "foo", "bar"] ruby> 

  • ruby 流程控制 方法

    这章我们将讨论更多的Ruby流程控制. case 我们用case语句测试有次序的条件.正如我们所见的,这和C,Java的switch相当接近,但更强大. ruby> i=8 ruby> case i     | when 1, 2..5     |   print "1..5\n"     | when 6..10     |   print "6..10\n"     | end 6..10    nil 2..5表示2到5之间的一个范围.下面的表达式

  • ruby 一些简单的例子

    现在我们将前面的一些示例程序的代码坼开来分析一下. 下面的例子出现在简单的例子一节. def fact(n)       if n == 0            1       else            n * fact(n-1)       end end print fact(ARGV[0].to_i), "\n" 因为是第一次解释,我们将逐行分析. def fact(n) 第一行,def 用于定义一个函数(或者,更准确地说,一个方法(method);我们会在稍后的一节中详

  • 简单的Ruby中的Socket编程教程

    Ruby提供了两个级别访问网络的服务,在底层你可以访问操作系统,它可以让你实现客户端和服务器为面向连接和无连接协议的基本套接字支持. Ruby 统一支持应用程的网络协议,如FTP.HTTP等. 不管是高层的还是底层的.ruby提供了一些基本类,让你可以使用TCP,UDP,SOCKS等很多协议交互,而不必拘泥在网络层.这些类也提供了辅助类,让你可以轻松的对服务器进行读写. 接下来就让我们来学习如何进行 Ruby Socket 编程 什么是 Sockets 应用层通过传输层进行数据通信时,TCP和U

  • Ruby中的Socket编程简单入门

    Ruby提供了两个访问级别的网络服务.在一个较低的水平,可以访问底层的操作系统,它可以实现面向连接和无连接协议的客户端和服务器支持基本的socket. Ruby也具有程序库,提供更高级别的访问特定的应用程序级的网络协议,如FTP,HTTP等. 这篇教程介绍 Ruby Socket编程概念及讲解一个简单的实例. 什么是Sockets? 套接字是一个双向通信信道的端点.socket能在一个进程,进程在同一台机器之间,或在不同的机器上的进程之间的进行通信. 套接字可实施过许多不同类型的通道:Unix主

  • 简单介绍Ruby中的CGI编程

    Ruby 是一门通用的语言,不仅仅是一门应用于WEB开发的语言,但 Ruby 在WEB应用及WEB工具中的开发是最常见的. 使用Ruby您不仅可以编写自己的SMTP服务器,FTP程序,或Ruby Web服务器,而且还可以使用Ruby进行CGI编程. 接下来,让我们花点时间来学校Ruby的CGI编辑. 编写 CGI 脚本 最脚本的 Ruby CGI 代码如下所示: #!/usr/bin/ruby puts "HTTP/1.0 200 OK" puts "Content-type

  • C#中的Socket编程详解

    目录 一,网络基础 二,Socket 对象 SocketType ProtocolType AddressFamily 三,Bind() 绑定与 Connect() 连接 Bind() Connect() 四,Listen() 监听请求连接 和 Accept() 接收连接请求 Listen() Accept() 五,Receive() 与 Send() Receive() 参数 返回 Send() 六,释放资源 close() 七,IPAddress 和IPEndPoint IPAddress

  • Erlang中的socket编程简单例子

    Erlang 中gen_tcp 用于编写TCP程序,gen_udp用于编写UDP程序.一个简单的TCP服务器echo示例: 复制代码 代码如下: Start_echo_server()->          {ok,Listen}= gen_tcp:listen(1234,[binary,{packet,4},{reuseaddr,true},{active,true}]),          {ok,socket}=get_tcp:accept(Listen),          gen_tc

  • 关于Python Socket编程的要点详解

    目录 前言 什么是socket? 如何在 Python 中创建 socket 对象? Python 的套接字库中有多少种可用的套接字方法? 服务器套接字可用的方法有哪些? 客户端套接字可用的方法有哪些? Python中可用的通用套接字方法有哪些? Python Socket 编程工作流程 Python 客户端-服务器通信示例代码 Python-Server.py Python-Client.py 如何运行客户端-服务器程序? 检查程序兼容性 快速总结--Python Socket 编程 总结 前

  • Java Socket编程详解及示例代码

    Socket,又称为套接字,Socket是计算机网络通信的基本的技术之一.如今大多数基于网络的软件,如浏览器,即时通讯工具甚至是P2P下载都是基于Socket实现的.本文会介绍一下基于TCP/IP的Socket编程,并且如何写一个客户端/服务器程序. 餐前甜点 Unix的输入输出(IO)系统遵循Open-Read-Write-Close这样的操作范本.当一个用户进程进行IO操作之前,它需要调用Open来指定并获取待操作文件或设备读取或写入的权限.一旦IO操作对象被打开,那么这个用户进程可以对这个

  • Python Socket 编程知识点详细介绍

    目录 一.导入Socket模块 二.Socket基本用法 1.建立一个简单的Socket连接 2.协议对应端口 3.Socket函数 4.套接字函数 5.一个简单的客户端与服务端交互 三.总结 前言: Socket又称为套接字,它是所有网络通信的基础.网络通信其实就是进程间的通信,Socket主要是使用IP地址,协议,端口号来标识一个进程.端口号的范围为0~65535(用户端口号一般大于1024),协议有很多种,一般我们经常用到的就是TCP,IP,UDP.下面我们来详细了解下Socket吧. 一

  • 在Ruby中处理XML和XSLT以及XPath的简单教程

    什么是 XML ? XML 指可扩展标记语言(eXtensible Markup Language). 可扩展标记语言,标准通用标记语言的子集,一种用于标记电子文件使其具有结构性的标记语言. 它可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言. 它非常适合万维网传输,提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据. XML解析器结构和API XML的解析器主要有DOM和SAX两种. SAX解析器是基于事件处理的,需要从头到尾把XML文档扫描一遍,在扫描

  • Python Socket编程入门教程

    这是用来快速学习 Python Socket 套接字编程的指南和教程.Python 的 Socket 编程跟 C 语言很像. Python 官方关于 Socket 的函数请看 http://docs.python.org/library/socket.html 基本上,Socket 是任何一种计算机网络通讯中最基础的内容.例如当你在浏览器地址栏中输入 www.jb51.net 时,你会打开一个套接字,然后连接到 www.jb51.net 并读取响应的页面然后然后显示出来.而其他一些聊天客户端如

随机推荐