无法访问你试图使用的功能所在的网络位置。是什么原因?
933
2022-05-30
【引言】
最近收到一个调研需求,就是关于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小时内删除侵权内容。