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;
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创建的线程中