内容

名称

Net::Cmd - 网络命令类(用于 FTP、SMTP 等)

概要

use Net::Cmd;

@ISA = qw(Net::Cmd);

描述

Net::Cmd 是一个方法集合,可以被 IO::Socket::INET 的子类继承。这些方法实现了基于命令的协议所需的功能,例如 FTP 和 SMTP。

如果您的子类没有也从 IO::Socket::INET 或类似的类(例如 IO::Socket::IPIO::Socket::INET6IO::Socket::SSL)继承,那么您必须通过其他方式自己提供以下方法:close()timeout()

公共方法

这些方法为 Net::Cmd 对象提供用户界面。

debug($level)

设置此对象的调试信息级别。如果未提供$level,则返回当前状态。否则,状态将更改为$level,并返回先前状态。

不同的包可能实现不同的调试级别,但非零值会导致所有命令和响应的副本也发送到 STDERR。

如果$levelundef,则调试级别将设置为该类的默认调试级别。

此方法也可以作为静态方法调用,以设置/获取给定类的默认调试级别。

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 文件。