当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Ruby Socket类用法及代码示例


本文简要介绍ruby语言中 Socket类 的用法。

Class Socket 提供对底层操作系统套接字实现的访问。与特定于协议的套接字类相比,它可用于提供更多特定于操作系统的函数。

Socket::Constants 下定义的常量也在 Socket 下定义。例如, Socket::AF_INET 和 Socket::Constants::AF_INET 一样可用。有关常量列表,请参见 Socket::Constants

什么是插座?

套接字是双向通信通道的端点。套接字可以在进程内、同一台机器上的进程之间或不同机器之间进行通信。有多种类型的套接字:例如 TCPSocket UDPSocket UNIXSocket

套接字有自己的词汇表:

域:协议族:

type:两个端点之间的通信类型,通常

协议:通常是 zero 。这可用于识别协议的变体。

主机名:网络接口的标识符:

  • 一个字符串(主机名、IPv4 或 IPv6 地址或指定广播地址的broadcast)

  • 指定 INADDR_ANY 的零长度字符串

  • 一个整数(按主机字节顺序解释为二进制地址)。

快速开始

许多类,例如 TCPSocket UDPSocket UNIXSocket ,与等效的 C 编程接口相比,更容易使用套接字。

让我们以 C-like 的方式使用 IPv4 协议创建一个 Internet 套接字:

require 'socket'

s = Socket.new Socket::AF_INET, Socket::SOCK_STREAM
s.connect Socket.pack_sockaddr_in(80, 'example.com')

您还可以使用 TCPSocket 类:

s = TCPSocket.new 'example.com', 80

一个简单的服务器可能如下所示:

require 'socket'

server = TCPServer.new 2000 # Server bound to port 2000

loop do
  client = server.accept    # Wait for a client to connect
  client.puts "Hello !"
  client.puts "Time is #{Time.now}"
  client.close
end

一个简单的客户端可能如下所示:

require 'socket'

s = TCPSocket.new 'localhost', 2000

while line = s.gets # Read lines from socket
  puts line         # and print them
end

s.close             # close socket when done

Exception 处理

Ruby 的 Socket 实现会根据系统相关实现产生的错误引发异常。这就是为什么这些方法以将基于 Unix 的系统异常与基于 Windows 的异常隔离的方式记录的原因。如果需要有关特定异常的更多信息,请参阅 Unix 手册页或 Windows WinSock 参考。

方便的方法

虽然创建套接字的一般方法是 Socket.new ,但在大多数情况下有几种创建套接字的方法。

TCP 客户端套接字

Socket.tcp , TCPSocket.open

TCP 服务器套接字

Socket.tcp_server_loop , TCPServer.open

UNIX 客户端套接字

Socket.unix , UNIXSocket.open

UNIX 服务器套接字

Socket.unix_server_loop , UNIXServer.open

文件由

  • 扎克丹尼斯

  • 山姆·罗伯茨

  • Programming Ruby 来自实用书架。

本文档中的许多材料均经 The Pragmatic Bookshelf 的 Programming Ruby 许可使用。

相关用法


注:本文由纯净天空筛选整理自ruby-lang.org大神的英文原创作品 Socket类。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。