如何使用Java编写NT服务(二)

2014-11-23 21:25:28 · 作者: · 浏览: 34
服务的控制。大致的表达为:

public class MainSvcThread implements Runnable //实现线程控制

{

public static boolean STOP = false; //由系统来控制的内部变量,决定着服务进程(线程)的启动、暂停等

public static boolean PAUSE = false;

public void run()

{

while (!STOP)

{

while (!PAUSE && !STOP)

{

。。。//此处为服务控制逻辑,下面会充实此处
}

try

{Thread.sleep(5000);//休眠5秒后实现暂停或者停止}

catch (InterruptedException e)

{ }

}

try

{Thread.sleep(1000);}

catch (InterruptedException ie)

{}

}

} //Run结束

}

在服务逻辑控制当中,我们会具体实现Echo服务。我们的Echo服务监听2002端口,接收客户端任何一行输入,然后加上“Echo:”后返回。如果客户端输入一个quit词组那么服务认为这是客户关闭此套接字的命令,会自动关闭当前的套接字连接,停止对当前连接的服务。具体的实现(EchoThread.java的代码):

public void run()

{

String line;

DataInputStream in;

PrintWriter out;

boolean exitflag=false;


try

{

in=new DataInputStream(so.getInputStream()) ;//获取套接字的输入流

out=new PrintWriter(new DataOutputStream(so.getOutputStream())) ;

out.println("You have connected to EchoSvc!"); //发送问候

out.flush();

while((line=in.readLine())!=null) //读取

{

line=line.trim();

if (line.equalsIgnoreCase("quit") )

{

out.println("ECHO:" + line );

out.flush();

return;

}

else

{

out.println("ECHO:" + line );

out.flush();

}

}

in.close();

out.close();

}

catch(IOException ioe)

{}

}

Echo服务主要就是将客户发送的字符回显给客户,并加上Echo:的前缀,以表明是从服务器返回的内容。如果客户输入“quit”那么表示这是要求服务器停止服务的表现。

如何调试NT服务进程工程。如果直接将此函数调用来提供客户端的ECHO套接字服务,逻辑上是没有什么错误,但是就是无法支持多个用户同时访问。为了能够提供多服务,允许同时又多个用户连接此服务器(这种情况在很多网络服务都不可少),我们可以将此逻辑在由MainSvcTread创建的线程中