Java中TelnetClient使用实例

花了几天时间赶了个软件,功能是Telnet登录到一台Linux主机上,然后执行命令,将返回的信息解析后插入到Oracle数据库中(多线程登录,数据库连接池处理连接并发)。总的来说功能比较简单,但是对Oracle数据库使用完全是0,还是让人纠结,所以记录下来。
首先说Java下Telnet的实现。先提Apache基金会(http://projects.apache.org/index.html),下面的提供的开源软件非常多,进入Categories可以领略下。我这里用到了Commons Net(http://commons.apache.org/net/download_net.cgi),下载Jar包(我用的是commons-net-2.0.jar),这个应该不影响,网站里面提供了相关类或者例子可以查看。我贴出这个Commons Net 3.1包中的API看看,说不定以后需要呢:
org.apache.commons.net Common socket classes and protocol command utility classes
org.apache.commons.net.bsd Classes for rcommand, rexec, rlogin
org.apache.commons.net.chargen Chargen over TCP and UDP
org.apache.commons.net.daytime Daytime over TCP and UDP
org.apache.commons.net.discard Discard over TCP and UDP
org.apache.commons.net.echo Echo over TCP and UDP
org.apache.commons.net.finger Finger implementation
org.apache.commons.net.ftp FTP and FTPS support classes
org.apache.commons.net.ftp.parser FTP file listing parser classes
org.apache.commons.net.imap Basic IMAP and IMAPS support classes
org.apache.commons.net.io Utility classes for IO support.
org.apache.commons.net.nntp NNTP - network news transfer protocol
org.apache.commons.net.ntp NTP - network time protocol
org.apache.commons.net.pop3 POP3 and POP3S mail
org.apache.commons.net.smtp SMTP and SMTPS mail
org.apache.commons.net.telnet Telnet implementation
org.apache.commons.net.tftp TFTP cliemt implementation
org.apache.commons.net.time Time protocol (RFC 868) over TCP and UDP
org.apache.commons.net.util Utility classes
org.apache.commons.net.whois Whois client
当然,我这里用的是里面的telnet。非常幸运的找到了参考1(TelnetClient远程访问unix系统),写得很好,代码直接可以拿来用,因此使用的例子直接就可以使用。我提一下过程,首先也是主要的TelnetClient,继承自org.apache.commons.net.SocketClient,调用connect(ip,端口)建立TCP连接,然后通过 getInputStream() 和 getOutputStream() 获得输入输出流,就可以进行通信了,在具体的命令之前,需要login用户名和输入password,登录成功后得到系统的接收输入标志($或其它),在完成相关命令后执行disconnect关闭连接。实现非常简单,接下来看看数据库。
这里安装的是Oracle 10g,在Windows XP上,在Win 7上装的时候老是提示ORA-12546: TNS: 权限被拒绝的错误,没时间解决,可以换成11g。数据库的安装没有特别的,选个高级安装,默认来就差不多了。只是用的时候自己犯傻了,非要找个图形界面(MSSQL带来的弊病啊),其实下个PL/SQL或者Navicat(忘了说了可以直接通过Web访问的,确实非常方便。)。原来用Navicat MySQL,想想试试Navicat Oracle,配置也很简单参考2(如果是远端访问,就需要自己下载访问客户端),如果在数据库所在机子上使用直接在工具中查找OCI动态库(在安装目录下)就可以。但是它的使用让我彻底傻了,知道Oracle是不区分大小写的,但是件了test1,test2在Navicat上都能正常显示,可是使用其自动登录的sqlplus就是看不到,但是查询HELP等自带的表一个不少。。。,后来干脆都删除,直接在sqlplus建立,显示查询都正常,发现在Navicat中的表名都是大写。再用大写建表尝试,结果正常显示。。。这个。。。,好了,不多说了,那么通过JDBC连接Oracle示例非常多了,Class.forName ( "oracle.jdbc.driver.OracleDriver" );注册下,DriverManager.getConnection ( oracle,m_User,m_pwd );获得连接,后面通过这个连接connection.createStatement,配合Statement ResultSet 等执行相关的语句即可,至于连接池,简单说就是预先建立一部分连接,需要时将连接分配出去,用完后只是标记下其使用状态(相当于又放回池中),如此循环往复。顺便提一下的是数据库自带的timestamp类型,对应写sql语句时为sysdate,可以直接变为当前时间。最后还要提醒下,执行的sql语句不要有分号哦,否则老是会提示ORA-00911: 无效字符 (这个一出来,肯定是语句有问题了,不要怀疑别人啊!!!)
落下的总要补上的,原来看Java编程思想,想的正则表达式后面再看,结果这次就用到了,其中的解析就是,同时使用了LinkedHashMap,来保存键值对及插入的顺序。继续。。。


参考
1.TelnetClient远程访问unix系统 http://liyan4770.iteye.com/blog/739113
2.Navicat 9如何连接ORACLE10G数据库 http://www.cnblogs.com/vic_lu/archive/2010/08/28/1810704.html

你可能感兴趣的:(client)