本文簡要介紹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類。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。