當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


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