Net::Cmd - 网络命令类(用于 FTP、SMTP 等)
use Net::Cmd;
@ISA = qw(Net::Cmd);
Net::Cmd
是一个方法集合,可以被 IO::Socket::INET
的子类继承。这些方法实现了基于命令的协议所需的功能,例如 FTP 和 SMTP。
如果您的子类没有也从 IO::Socket::INET
或类似的类(例如 IO::Socket::IP
、IO::Socket::INET6
或 IO::Socket::SSL
)继承,那么您必须通过其他方式自己提供以下方法:close()
和 timeout()
。
这些方法为 Net::Cmd
对象提供用户界面。
debug($level)
设置此对象的调试信息级别。如果未提供$level
,则返回当前状态。否则,状态将更改为$level
,并返回先前状态。
不同的包可能实现不同的调试级别,但非零值会导致所有命令和响应的副本也发送到 STDERR。
如果$level
为undef
,则调试级别将设置为该类的默认调试级别。
此方法也可以作为静态方法调用,以设置/获取给定类的默认调试级别。
message()
返回从上次命令返回的文本消息。在标量上下文中,它返回单个字符串,在列表上下文中,它将返回每行作为单独的元素。(参见下面的"伪响应"。)
code()
返回上次命令的 3 位代码。如果命令正在挂起,则返回 0。(参见下面的"伪响应"。)
ok()
如果上次代码值大于零且小于 400,则返回非零值。这对大多数命令服务器都适用。不适用此规则的服务器可能会覆盖此方法。
status()
返回当前状态代码的最高位数字。如果命令正在挂起,则返回CMD_PENDING
。
datasend($data)
将数据发送到远程服务器,将 LF 转换为 CRLF。任何以 '.' 开头的行都将以另一个 '.' 为前缀。$data
可以是数组或对数组的引用。传入的$data
必须由调用者编码为所需编码的八位字节,例如,通过使用 Encode 模块的encode()
函数。
dataend()
结束向远程服务器发送数据。这是通过确保已发送的数据以 CRLF 结尾,然后发送 '.CRLF' 来结束传输来完成的。一旦此数据发送完毕,dataend
将调用response
,如果response
返回 CMD_OK,则返回 true。
这些方法不打算由用户调用,而是由Net::Cmd
的子类使用或覆盖
debug_print($dir, $text)
打印调试信息。$dir
表示方向,true 表示数据发送到服务器。在打印到 STDERR 之前调用 debug_text
。
debug_text($dir, $text)
此方法用于打印调试信息。$text
是要发送的文本。该方法应返回要打印的文本。
这主要用于 FTP 等模块,其中会发送密码,但我们不想在调试信息中显示它们。
command($cmd[, $args, ... ])
向命令服务器发送命令。所有参数首先用空格字符连接,然后追加 CRLF,然后将此字符串发送到命令服务器。
失败时返回 undef。
unsupported()
将状态码设置为 580,并将响应文本设置为“不支持的命令”。返回零。
response()
从服务器获取响应。成功时返回状态码的最高位数字。失败、超时等情况下,返回 CMD_ERROR。
parse_response($text)
此方法由 response
作为带有一个参数的方法调用。它应该返回一个包含两个值的数组,即 3 位状态码和一个标志,当这是多行响应的一部分并且此行不是最后一行时,该标志为真。
getline()
从远程服务器检索一行,以 CRLF 为分隔符。失败时返回 undef。
注意:如果您出于任何原因使用此方法,请记住在您的方法中添加一些 debug_print
调用。
ungetline($text)
从服务器取消获取一行文本。
rawdatasend($data)
将数据发送到远程服务器,不执行任何转换。$data
是一个标量。与 datasend()
一样,传入的 $data
必须由调用者编码为所需编码的八位字节,例如,使用 Encode 模块的 encode()
函数。
read_until_dot()
从远程服务器读取数据,直到遇到一行仅包含一个 '.' 的行。任何以 '..' 开头的行都会删除其中一个 '.'。
返回一个包含这些行的列表的引用,或者在失败时返回 undef。
tied_fh()
返回与 Net::Cmd 对象绑定的文件句柄。在发出命令后,您可以使用 read() 或 <> 从该文件句柄中读取。当遇到最后一个点时,文件句柄将返回 EOF。类似地,您可以在发出需要写入数据的命令后,写入文件句柄以将数据发送到服务器。
有关示例,请参阅 Net::POP3 和 Net::SMTP 模块。
通常,message()
和 code()
返回的值是从远程服务器获取的,但在下面详细介绍的几种情况下,Net::Cmd
将返回它设置的值。您可以通过覆盖 DEF_REPLY_CODE() 来指定不同的默认回复代码,或者覆盖下面列出的特定错误处理方法来更改此行为。
在任何命令执行之前或如果发生意外错误,code()
将返回 "421"(临时连接失败),而 message()
将返回 undef。
如果底层 IO::Handle
关闭,或者如果存在任何读写失败,文件句柄将被强制关闭,code()
将返回 "421"(临时连接失败),而 message()
将返回 "[$pkg] 连接关闭"(其中 $pkg 是继承 Net::Cmd
的类的名称)。可以覆盖 _set_status_closed() 方法来设置不同的消息(通过调用 set_status())或以其他方式捕获此错误。
如果存在读写超时,code()
将返回 "421"(临时连接失败),而 message()
将返回 "[$pkg] 超时"(其中 $pkg 是继承 Net::Cmd
的类的名称)。可以覆盖 _set_status_timeout() 方法来设置不同的消息(通过调用 set_status())或以其他方式捕获此错误。
以下符号是或可以由此模块导出
CMD_INFO
, CMD_OK
, CMD_MORE
, CMD_REJECT
, CMD_ERROR
, CMD_PENDING
.
(这些对应于response()
和status()
的可能结果。)
无.
无.
参见 https://rt.cpan.org/Dist/Display.html?Status=Active&Queue=libnet.
Graham Barr <[email protected]>.
Steve Hay <[email protected]> 从 1.22_02 版本开始维护 libnet。
版权所有 (C) 1995-2006 Graham Barr。保留所有权利。
版权所有 (C) 2013-2016, 2020, 2022 Steve Hay。保留所有权利。
此模块是自由软件;您可以根据与 Perl 本身相同的条款重新分发和/或修改它,即根据 GNU 通用公共许可证或 Artistic 许可证的条款,如 LICENCE 文件中所述。
版本 3.15
2023 年 3 月 20 日
参见 Changes 文件。