ruby网络编程(1)

发布时间 2023-07-01 19:25:55作者: 水宝石

socket

概述

  • 类套接字socket提供对底层操作系统套接字实现的访问。它可以用来提供比协议特定套接字类更多的操作系统特定功能。

  • 在Socket::Constants 下定义的常量也在Socket下定义。例如,Socket::AF_INET和Socket:∶Constants::AF_NET都可用。

  1. SOCK_STREAM:流套接字为字节流提供有序、可靠的双向连接
  2. SOCK_DGRAM:数据报套接字提供无连接、不可靠的消息传递
  3. SOCK_RAW:原始套接字为直接访问或实现网络协议提供低级访问
  4. SOCK_RDM:可靠的数据报套接字提供可靠的消息传递
  5. SOCK_SEQPACKET:顺序数据包套接字为数据报提供顺序、可靠的双向连接
  6. SOCK_PACKET:设备级数据包访问
  7. SOCK_NONBLOCK:在新文件描述符引用的打开文件描述(请参见打开(2))上设置O_NONBLOCK文件状态标志。
  8. SOCK_CLOEXEC: 在新文件描述符上设置执行时关闭(FD_CLOEXEC)标志。
  • 套接字是双向通信通道的端点。套接字可以在进程内、同一机器上的进程之间或不同机器之间进行通信。

  • domain: 协议系列:

    Socket::PF_INET

    Socket::PF_INET6

    Socket::PF_UNIX

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

    Socket::SOCK_STREAM

    Socket::SOCK_DGRAM.

  • protocol: 通常为零。这可以用于识别协议的变体。

  • hostname: 网络接口的标识符:

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

指定INADDR_ANY的零长度字符串

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

ftp client

#!/usr/bin/ruby 
#encoding:UTF-8
require 'socket'

s = Socket.new(Socket::AF_INET, Socket::SOCK_STREAM)
s.connect(Socket.pack_sockaddr_in(21, 'ftp.sunet.se'))
line=s.gets()
puts line
s.puts("USER anonymous")
line=s.gets()
puts line
s.puts("PASS anonymous")
line=s.gets()
puts line
s.puts("quit")
while answer=s.gets() do
   puts answer
end

[maisipu@fedora learn]$ /bin/sh /tmp/geany_run_script_JZFL71.sh
220 Please use https://mirror.accum.se/ whenever possible.
331 Please specify the password.
230 Login successful.
221 Goodbye.


[maisipu@fedora learn]$ /bin/sh /tmp/geany_run_script_JZFL71.sh
220 Please use https://mirror.accum.se/ whenever possible.
331 Please specify the password.
230 Login successful.
221 Goodbye.