內容

名稱

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()

如果最後一個代碼值大於 0 且小於 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,然後將此字串傳送至命令伺服器。

失敗時傳回未定義。

unsupported()

將狀態碼設定為 580,並將回應文字設定為「不支援的命令」。傳回零。

response()

從伺服器取得回應。成功時,傳回狀態碼的最重要數字。失敗、逾時等時,傳回 CMD_ERROR

parse_response($text)

此方法由 response 作為具有單一引數的方法呼叫。它應傳回包含 2 個值的陣列,3 位數狀態碼和一個旗標,當這是多行回應的一部分且這不是最後一行時,此旗標為 true。

getline()

從遠端伺服器擷取一行,以 CRLF 分隔。失敗時傳回 未定義

注意:如果您因任何原因使用此方法,請記得在您的方法中新增一些 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] Timeout」(其中 $pkg 是繼承 Net::Cmd 的類別名稱)。可以覆寫 _set_status_timeout() 方法,以設定不同的訊息(透過呼叫 set_status())或以其他方式攔截此錯誤。

匯出

下列符號是由此模組匯出,或可以匯出

預設匯出

CMD_INFOCMD_OKCMD_MORECMD_REJECTCMD_ERRORCMD_PENDING

(這些對應到 response()status() 的可能結果。)

選用匯出

.

匯出標籤

.

已知錯誤

請參閱 https://rt.cpan.org/Dist/Display.html?Status=Active&Queue=libnet

作者

Graham Barr <gbarr@pobox.com>。

Steve Hay <shay@cpan.org> 從 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 檔案。