论坛首页 Java企业应用论坛

使用telnetd java类库制作守护线程

浏览 2635 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (6) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-04-12  

telnetdV2.0是一个纯java的telnet类库,可以作为一个telnet守护线程嵌入到自己的程序里面,可是我从http://telnetd.sourceforge.net

下载了一个包以后发现里面没有任何的文档,没办法,只能啃代码了,好在它还有一个例子程序(在/telnetd/src/net/wimpi/telnetd/TelnetD.java里面) ,main函数也超简单,其作用的是以下这个部分:

 } else {
myTD = TelnetD.createTelnetD(args[0]);
}
//2.start serving/accepting connections
myTD.start();

 args[0]里面存的是一个叫telnetd.properties的配置文件的url,如果你用的是本地文件,可以这样写:

file:///F:/telnetd/telnetd.properties  (这个配置文件,包里面也有现成的)

可能你会问我怎么获得telnet客户端输入的数据和命令呢? 别急,接下来我就告诉你怎么一回事,打开telnetd.properties 前面的东西都不用管,你要设置的是

##################
# Shells Section #
##################

# List of shells available and defined below
shells=dummy,deamon

# shell implementations
shell.dummy.class=net.wimpi.telnetd.shell.DummyShell

shell.deamon.class=mypackage.DeamonShell

#####################
# Listeners Section #
#####################

 

两部分,实际上telnetd使用了反射工厂模式当有客户端连上一个listener的时候,实例化一个对应的shell实例 ,这个实例继承了net.wimpi.telnetd.shell.Shell(具体看net.wimpi.telnetd.shell.DummyShell) ,你所要做的就是模仿DummyShell继承net.wimpi.telnetd.shell.Shell创建自己的shell类来处理客户端的请求。

而listener section就是设置服务器端serversocket监听器的配置了,比如端口,telnetd支持多个端口的telnet监听,而实现这个的配置就是:

listeners=std



# std listener specific properties

#Basic listener and connection management settings

std.port=6666
std.floodprotection=5
std.maxcon=25



# Timeout Settings for connections (ms)
std.time_to_warning=3600000
std.time_to_timedout=60000


# Housekeeping thread active every 1 secs
std.housekeepinginterval=1000

std.inputmode=character


# Login shell
std.loginshell=dummy

# Connection filter class
std.connectionfilter=none

如果你要同时监听两个端口,6666和7777那么你只需要这么写:

listeners= std,myListener

std配置如上...

myListener.port=7777

以下与std类似...

# Login shell
myListener.loginshell=deamon

...

现在明白了吗,要注意# Login shell这个配置,std.loginshell=dummymyListener.loginshell=deamon 的意思就是说:

如果你使用telnet客户端,连接6666端口的话,net.wimpi.telnetd.shell.DummyShell会为你服务,而如果你使用7777端口的话,mypackage.DeamonShell会来招呼你。

好了,我就研究到这里,反正用它足够开关我的多线程程序了,如果你还有什么不明白的,或者想要了解更多,建议可以看它的原代码。

论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics