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

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

【引言】

最近收到一个调研需求,就是关于Apache Commons Net的替换研究。由于其最新的发布版本时间为2017214日,已经有超过三年没有更新了。所以有必要对其进行可行性的替换研究。本文我们就来探索一下这个问题。

 

Apache Commons Net


 

Apache Commons Net 库包含了许多基础的互联网协议客户端。

该库的目的是提供基本的互联网协议访问。

 

【设计理念】

其设计理念是,可访问协议的全局功能, TFTP发送文件和接收文件),也可访问协议的基本功能。

通过这个程序库,程序员可以构造自定义实现,如TFTP数据包类。

【官方网站】

https://commons.apache.org/proper/commons-net/

License

Apache License 2.0

【最新发布】

10.15.1.3  2019311

【功能列表】

支持的协议包括:

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  Timerdate)和Daytime

l  Echo

l  Discard

l  NTP/SNTP

【背景资料】

Apache Jakarta Commons Net最初是作为一个名为NetComponents的商业化Java库开始的。

是由ROO公司基于Java的早期版本开发的。

19981.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的文件下载和上传、LISTMLST等。

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 演示如何使用TimeTCPClientTimeUDPClient会连接到指定服务器的默认时间服务端口,检索时间,并将其打印到标准输出。

 

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程序库,用于通过SMTPPOP3IMAP发送和接收电子邮件。

License

EPL 2.0

GPL 2.0

【最新发布】

1.6.5  2020310

【功能列表】

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包定义了基于互联网标准的邮件系统的类,如MIMESMTPPOP3IMAPJakarta Mail API包括javax.mail包和子包。

例子

下面是一个例子:

发送纯文本邮件:

        Properties props = new Properties();

        props.put("mail.smtp.host""my-mail-server");

        Session session = Session.getInstance(propsnull);

    

        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个月内不可修改。