Apache公共網絡程序庫可行性替換研究
【引言】
最近收到一個調研需求,就是關于Apache Commons Net的替換研究。由于其最新的發布版本時間為2017年2月14日,已經有超過三年沒有更新了。所以有必要對其進行可行性的替換研究。本文我們就來探索一下這個問題。
【Apache Commons Net】
Apache Commons Net??庫包含了許多基礎的互聯網協議客戶端。
該庫的目的是提供基本的互聯網協議訪問。
【設計理念】
其設計理念是,可訪問協議的全局功能,?如TFTP發送文件和接收文件),也可訪問協議的基本功能。
通過這個程序庫,程序員可以構造自定義實現,如TFTP數據包類。
【官方網站】
https://commons.apache.org/proper/commons-net/
【License】
Apache License 2.0
【最新發布】
10.15.1.3?于?2019年3月11日
【功能列表】
支持的協議包括:
l??FTP/FTPS
l??HTTP上的FTP(實驗性的)
l??NNNTP
l??SMTP(S)
l??POP3(S)
l??IMAP(S)
l??Telnet
l??TFTP
l??Finger
l??Whois
l??rexec/rcmd/rlogin
l??Time(rdate)和Daytime
l??Echo
l??Discard
l??NTP/SNTP
【背景資料】
Apache Jakarta Commons Net最初是作為一個名為NetComponents的商業化Java庫開始的。
是由ROO公司基于Java的早期版本開發的。
在1998年1.3.8發布后,源代碼被捐贈給了Apache軟件基金會,并在Apache許可證下提供。
從那時起,許多程序員為Jakarta Commons Net的持續發展做出了貢獻。
目前的版本編號方案與舊版本沒有任何關系。
換句話說,?Jakarta Commons Net 1.0繼承并取代了NetComponents 1.3.8。
Apache Jakarta Commons現在是一個獨立的項目,被稱為Apache Commons。
【示例】
Commons NET包含了幾個工作示例應用程序。?源文件和編譯后的jar都包含其中。
要使用其中一個示例應用程序,要確保其和主jar都在同一個目錄下。
然后按照下面的命令行例子運行:
java -jar [path/]commons-net-examples-3.5.jar FTPClientExample [parameters]
FTP (包:?examples/ftp)
l??FTPClientExample演示了通過FTP(S)和FTP over HTTP的文件下載和上傳、LIST、MLST等。
l??ServerToServerFTP?演示了服務器到服務器的文件傳輸,?可將文件從host1傳輸到host2。
l??TFTPExample?是一個簡單的Java tftp客戶端的例子。
MAIL (package: examples/mail)
l??IMAPMail?演示如何使用IMAP[S]Client類。
l??POP3Mail?演示如何使用POP3[S]Client類。
l??SMTPMail?演示如何使用SMTP[S]Client類。
NNTP (包:?examples/nntp)
l??ArticleReader?演示一種讀取文章頭和正文的方法。
l??ExtendedNTPOps?演示示一些擴展命令(AUTH, XOVER, LIST ACTIVE)。
l??ListNewsgroups?演示使用NNNTP包近似于Unix的新聞組命令。它可以連接到指定的新聞服務器,并獲取服務器上的新聞組列表。在存儲了大量新聞組的服務器上,這個命令可能需要很長時間(比如列出多達30,000個組)。
l??MessageThreading?演示使用文章迭代和線程。
l??PostMessage?演示使用NNNTP包發布文章到指定的新聞組的示例程序。它會在發布后提示你發布文章的頭信息和文件名。
NTP (包:?examples/ntp)
l??NTPClient?演示如何使用NTPUDPClient類的,?會發送一個數據報請求包到指定服務器上的網絡時間協議(NTP)服務端口,檢索時間,并將其與NTP報文頭的字段(如:層級、參考ID、輪詢間隔、根延遲、模式.........)一起打印到標準輸出。
l??TimeClient?演示如何使用TimeTCPClient和TimeUDPClient類,?會連接到指定服務器的默認時間服務端口,檢索時間,并將其打印到標準輸出。
Telnet(包:examples/telnet)
l??TelnetClientExample?是一個簡單的TelnetClient使用實例。
l??WeatherTelnet ?是一個使用TelnetClient類的簡單例子。它會連接到密歇根大學的氣象服務器um-weather.sprl.umich.edu端口3000,并允許用戶通過標準輸入與服務器進行交互。
Unix實用工具(包:?examples/unix)。
l??chargeren chargeren使用例子。
l??daytime使用daytime的簡單例子。
l??echo簡單的echo的使用例子。
l??finger finger的簡單例子。
l??fwhois fwhois的簡單例子。
l??rdate?簡單的rdate例子。
l??rexec rexec的簡單例子。
l??rlogin?使用rlogin的簡單例子。
l??rshell rshell的簡單例子。
【FTP,NNTP,NTP,Telnet,Unix實用工具自研替換】
目前支持Java語言的上述功能程序庫比較新的且流行的是上文提到的Apache Commons Net?中的程序包,既然版本有些老舊,團隊可以在其基礎上自研替換。
【Mail客戶端功能替換:Jakata Mail】
Jakarta Mail是一個Java API程序庫,用于通過SMTP、POP3和IMAP發送和接收電子郵件。
【License】
EPL 2.0
GPL 2.0
【最新發布】
1.6.5?于?2020年3月10日
【功能列表】
API包
包
描述
javax.mail
雅加達郵件API提供的類提供了一個郵件系統的模型。
javax.mail.event
聆聽者和事件包。
javax.mail.internet
互聯網郵件系統特有的類。
javax.mail.search
消息搜索詞。
javax.mail.util
實用工具類。
具體實施包
包
描述
com.sun.mail.dsn
創建和解析交付狀態通知。
com.sun.mail.gimap
一個EXPERIMENTAL IMAP協議提供,支持Gmail特定的IMAP協議擴展。
com.sun.mail.imap
IMAP消息存儲的訪問。
com.sun.mail.pop3
POP3消息存儲的訪問
com.sun.mail.smtp
SMTP服務器的訪問
com.sun.mail.util
實用工具類。
com.sun.mail.util.logging
包含Java?平臺的核心日志Jakarta Mail擴展。
Jakarta Mail API提供了一個郵件系統的模型類,?javax.mail包定義了所有郵件系統通用的類。javax.mail.internet包定義了基于互聯網標準的郵件系統的類,如MIME、SMTP、POP3和IMAP。Jakarta Mail API包括javax.mail包和子包。
例子
下面是一個例子:
發送純文本郵件:
Properties?props?=?new?Properties();
props.put("mail.smtp.host",?"my-mail-server");
Session?session?=?Session.getInstance(props,?null);
try?{
MimeMessage?msg?=?new?MimeMessage(session);
msg.setFrom("me@example.com");
msg.setRecipients(Message.RecipientType.TO,
"you@example.com");
msg.setSubject("Jakarta?Mail?hello?world?example");
msg.setSentDate(new?Date());
msg.setText("Hello,?world!\n");
Transport.send(msg,?"me@example.com",?"my-password");
}?catch?(MessagingException?mex)?{
System.out.println("send?failed,?exception:?"?+?mex);
}
更多屬性配置和文檔可參看官方網站。
【官方網站】
https://eclipse-ee4j.github.io/mail/
【小結】
本文對Apache Commons Net這個程序庫的技術特點和內容做了分析,到目前為止,發現除了Mail功能可能有替代者:Jakata Mail意外,其他的功能程序建議參考現有程序庫進行自研。
希望本文對業務開發有指導作用,?并對大家有所裨益。
歡迎討論。
【更多文章】
Jet Ding文章歸類索引表
FTP Apache 網絡
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。