本文简要介绍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 客户端套接字
- TCP 服务器套接字
- UNIX 客户端套接字
- UNIX 服务器套接字
文件由
-
扎克丹尼斯
-
山姆·罗伯茨
-
Programming Ruby
来自实用书架。
本文档中的许多材料均经 The Pragmatic Bookshelf 的 Programming Ruby
许可使用。
相关用法
- Ruby Socket.pair用法及代码示例
- Ruby Socket.udp_server_sockets用法及代码示例
- Ruby Socket.unpack_sockaddr_in用法及代码示例
- Ruby Socket.udp_server_recv用法及代码示例
- Ruby Socket.new用法及代码示例
- Ruby Socket.tcp用法及代码示例
- Ruby Socket.getservbyport用法及代码示例
- Ruby Socket.listen用法及代码示例
- Ruby Socket.gethostname用法及代码示例
- Ruby Socket.unix_server_loop用法及代码示例
- Ruby Socket.sockaddr_un用法及代码示例
- Ruby Socket.accept用法及代码示例
- Ruby Socket.recvfrom_nonblock用法及代码示例
- Ruby Socket.tcp_server_sockets用法及代码示例
- Ruby Socket.bind用法及代码示例
- Ruby Socket.getaddrinfo用法及代码示例
- Ruby Socket.getnameinfo用法及代码示例
- Ruby Socket.unix_server_socket用法及代码示例
- Ruby Socket.accept_nonblock用法及代码示例
- Ruby Socket.recvfrom用法及代码示例
- Ruby Socket.unix用法及代码示例
- Ruby Socket.gethostbyaddr用法及代码示例
- Ruby Socket.ip_address_list用法及代码示例
- Ruby Socket.sysaccept用法及代码示例
- Ruby Socket.getservbyname用法及代码示例
注:本文由纯净天空筛选整理自ruby-lang.org大神的英文原创作品 Socket类。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。