package com.as400samplecode;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class MultiThreadedSocketServer {
ServerSocket myServerSocket;
boolean ServerOn = true;
public MultiThreadedSocketServer()
{
try
{
myServerSocket = new ServerSocket(11111);
}
catch(IOException ioe)
{
System.out.println("Could not create server socket on port 11111. Quitting.");
System.exit(-1);
}
Calendar now = Calendar.getInstance();
SimpleDateFormat formatter = new SimpleDateFormat("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
System.out.println("It is now : " + formatter.format(now.getTime()));
// Successfully created Server Socket. Now wait for connections.
while(ServerOn)
{
try
{
// Accept incoming connections.
Socket clientSocket = myServerSocket.accept();
// accept() will block until a client connects to the server.
// If execution reaches this point, then it means that a client
// socket has been accepted.
// For each client, we will start a service thread to
// service the client requests. This is to demonstrate a
// Multi-Threaded server. Starting a thread also lets our
// MultiThreadedSocketServer accept multiple connections simultaneously.
// Start a Service thread
ClientServiceThread cliThread = new ClientServiceThread(clientSocket);
cliThread.start();
}
catch(IOException ioe)
{
System.out.println("Exception encountered on accept. Ignoring. Stack Trace :");
ioe.printStackTrace();
}
}
try
{
myServerSocket.close();
System.out.println("Server Stopped");
}
catch(Exception ioe)
{
System.out.println("Problem stopping server socket");
System.exit(-1);
}
}
public static void main (String[] args)
{
new MultiThreadedSocketServer();
}
class ClientServiceThread extends Thread
{
Socket myClientSocket;
boolean m_bRunThread = true;
public ClientServiceThread()
{
super();
}
ClientServiceThread(Socket s)
{
myClientSocket = s;
}
public void run()
{
// Obtain the input stream and the output stream for the socket
// A good practice is to encapsulate them with a BufferedReader
// and a PrintWriter as shown below.
BufferedReader in = null;
PrintWriter out = null;
// Print out details of this connection
System.out.println("Accepted Client Address - " + myClientSocket.getInetAddress().getHostName());
try
{
in = new BufferedReader(new InputStreamReader(myClientSocket.getInputStream()));
out = new PrintWriter(new OutputStreamWriter(myClientSocket.getOutputStream()));
// At this point, we can read for input and reply with appropriate output.
// Run in a loop until m_bRunThread is set to false
while(m_bRunThread)
{
// read incoming stream
String clientCommand = in.readLine();
System.out.println("Client Says :" + clientCommand);
if(!ServerOn)
{
// Special command. Quit this thread
System.out.print("Server has already stopped");
out.println("Server has already stopped");
out.flush();
m_bRunThread = false;
}
if(clientCommand.equalsIgnoreCase("quit")) {
// Special command. Quit this thread
m_bRunThread = false;
System.out.print("Stopping client thread for client : ");
} else if(clientCommand.equalsIgnoreCase("end")) {
// Special command. Quit this thread and Stop the Server
m_bRunThread = false;
System.out.print("Stopping client thread for client : ");
ServerOn = false;
} else {
// Process it
out.println("Server Says : " + clientCommand);
out.flush();
}
}
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
// Clean up
try
{
in.close();
out.close();
myClientSocket.close();
System.out.println("...Stopped");
}
catch(IOException ioe)
{
ioe.printStackTrace();
}
}
}
}
}
All one can think and do in a short time is to think what one already knows and to do as one has always done!
Java Multithreaded Socket server example code
In this example we have created a server that listens on port 11111 and accepts any number of incoming request from a client. For each client connection it starts a child thread to process the request independent of any other incoming requests.
No comments:
Post a Comment
NO JUNK, Please try to keep this clean and related to the topic at hand.
Comments are for users to ask questions, collaborate or improve on existing.