www.pudn.com > 33_online_store.rar > LogServer.java


import java.net.*;
import java.io.*;

public class LogServer extends Object
{
	public static final int DEFAULT_PORT=7114;
	public static final String DISCONNECT_MSG="closeConnection";
	public static final int MAX_SILENCE=(1000*60*10);//10 minutes
	public static final String OK_MSG="ok";
	
	private PrintWriter log;
	
	static public void main(String[] argv)
	{
	    LogServer serv;
	    String logFile=null;
	    
	    if(argv.length > 0)
	    {
	        logFile = argv[0];
	    }
	    
	    serv = new LogServer(logFile);
	    serv.start();
	}
	
	public LogServer(String logFile)
	{
	    OutputStream out;
	    
	    try
	    {
	        if(logFile != null)
	        {
	            out = new FileOutputStream(logFile);
	        }
	        else
	        {
	            out = System.out;
	        }
	        
	        log = new PrintWriter(out,true);
	    }
	    catch(Exception exp)
	    {
	        log = null;
	        System.out.println("Error creating log. "+exp);
	    }
	}
	
	public void start()
	{
		ServerSocket servSock;
		Socket clientSock;
		LogServerThread thread;
		
		try
		{
		    if(log == null) throw new Exception();
		    
		    log("Starting server.");
		    
			servSock = new ServerSocket(DEFAULT_PORT);
		
			while(servSock != null)
			{
			    clientSock = servSock.accept();
				thread = new LogServerThread(clientSock,this);
				thread.start();
			}
		}
		catch(Exception ex)
		{
		    System.out.println("Server going down...");
		}
	}
	
	public void log(String str)
	{
	    synchronized(log)
	    {
	        log.println(str);
	    }
	}
}

class LogServerThread extends Thread
{
    Socket clientSock;
    LogServer server;
    InetAddress clientAddr;
    
    public LogServerThread(Socket client,LogServer serv)
    {
        clientSock = client;
        try
        {
            clientSock.setSoTimeout(LogServer.MAX_SILENCE);
        }
        catch(Exception exp)
        {
        }
        
        clientAddr = client.getInetAddress();
        server = serv;
        
        server.log("Accepted connection: "+clientAddr.getHostAddress());
    }
    
    public void run()
    {
		BufferedReader reader=null;
		PrintWriter writer=null;
		Reader readIn;
		String message;
		
		try
		{
		    readIn = new InputStreamReader(clientSock.getInputStream());
		    reader = new BufferedReader(readIn);
		    writer = new PrintWriter(clientSock.getOutputStream(),true);
		    
		    while(true)
		    {
		        message = reader.readLine();
		        
		        if(LogServer.DISCONNECT_MSG.equals(message))
		        {
				    break;
		        }
		        else
		        {
    		        writer.println(LogServer.OK_MSG);
		        }
		        
		        server.log(clientAddr.getHostAddress()+" "+message);
		    }
		}
		catch(Exception exp)
		{
		    //Timeout will throw an exception, as will
		    //the client socket closing, catch the exception
		    //and clean up in finally
		}
		finally
		{
		    try
		    {
    		    server.log("Closing connection: "+clientAddr.getHostAddress());
	    	    if(reader != null) reader.close();
	    	    if(writer != null) writer.close();
		        clientSock.close();
		    }
		    catch(Exception ex)
		    {
		    }
		}
    }
}