package com.e2u.net;
//: c15:MultiJabberServer.java
// A server that uses multithreading
// to handle any number of clients.
import java.io.*;
import java.net.*;
class ServeOneJabber extends Thread
{
private Socket socket;
private BufferedReader in;
private PrintWriter out;
public ServeOneJabber(Socket s) throws IOException
{
socket = s;
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
// Enable auto-flush:
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket
.getOutputStream())), true);
// If any of the above calls throw an
// exception, the caller is responsible for
// closing the socket. Otherwise the thread
// will close it.
start(); // Calls run()
}
public void run()
{
try
{
while(true)
{
String str = in.readLine();
if(str.equals("END"))
break;
System.out.println("Echoing: " + str);
out.println(str);
}
System.out.println("closing...");
}
catch(IOException e)
{
System.err.println("IO Exception");
}
finally
{
try
{
socket.close();
}
catch(IOException e)
{
System.err.println("Socket not closed");
}
}
}
}
public class MultiJabberServer
{
static final int PORT = 40023;
public static void main(String[] args) throws IOException
{
ServerSocket s = new ServerSocket(PORT);
System.out.println("Server Started");
try
{
while(true)
{
// Blocks until a connection occurs:
Socket socket = s.accept();
try
{
new ServeOneJabber(socket);
}
catch(IOException e)
{
// If it fails, close the socket,
// otherwise the thread will close it:
socket.close();
}
}
}
finally
{
s.close();
}
}
} // /:~