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)
{
}
}
}
}