Apache公共网络程序库可行性替换研究

举报
Jet Ding 发表于 2020/09/30 11:48:09 2020/09/30
【摘要】 最近收到一个调研需求,就是关于Apache Commons Net的替换研究。由于其最新的发布版本时间为2017年2月14日,已经有超过三年没有更新了。所以有必要对其进行可行性的替换研究。本文我们就来探索一下这个问题。

【引言】

最近收到一个调研需求,就是关于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文章归类索引表


【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。