Download as doc, pdf, or txt
Download as doc, pdf, or txt
You are on page 1of 6

Problem Description

How to create a multithreaded server ?

Solution
Following example demonstrates how to create a multithreaded server by
using ssock.accept() method of Socket class and
MultiThreadServer(socketname) method of ServerSocket class.

import java.io.IOException;

import java.io.PrintStream;

import java.net.ServerSocket;

import java.net.Socket;

public class MultiThreadServer implements Runnable {

Socket csocket;

MultiThreadServer(Socket csocket) {

this.csocket = csocket;

public static void main(String args[]) throws Exception {

ServerSocket ssock = new ServerSocket(1234);

System.out.println("Listening");

while (true) {

Socket sock = ssock.accept();

System.out.println("Connected");

new Thread(new MultiThreadServer(sock)).start();

public void run() {

try {

PrintStream pstream = new PrintStream(csocket.getOutputStream());


for (int i = 100; i >= 0; i--) {

pstream.println(i + " bottles of beer on the wall");

pstream.close();

csocket.close();

} catch (IOException e) {

System.out.println(e);

Result
The above code sample will produce the following result.
Listening
Connected

Following is an another example of how to create a multithreaded server.

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 NewClass {

ServerSocket myServerSocket;

boolean ServerOn = true;

public NewClass() {
try {

myServerSocket = new ServerSocket(8888);

} catch(IOException ioe) {

System.out.println("Could not create server socket on port 8888.


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()));

while(ServerOn) {

try {

Socket clientSocket = myServerSocket.accept();

ClientServiceThread cliThread = new ClientServiceThread(clientSocket);

cliThread.start();

} catch(IOException ioe) {

System.out.println("Exception found on accept. Ignoring. Stack


Trace :");

ioe.printStackTrace();

try {

myServerSocket.close();

System.out.println("Server Stopped");

} catch(Exception ioe) {

System.out.println("Error Found stopping server socket");

System.exit(-1);

}
}

public static void main (String[] args) {

new NewClass();

class ClientServiceThread extends Thread {

Socket myClientSocket;

boolean m_bRunThread = true;

public ClientServiceThread() {

super();

ClientServiceThread(Socket s) {

myClientSocket = s;

public void run() {

BufferedReader in = null;

PrintWriter out = null;

System.out.println(

"Accepted Client Address - " +


myClientSocket.getInetAddress().getHostName());

try {

in = new BufferedReader(

new InputStreamReader(myClientSocket.getInputStream()));

out = new PrintWriter(

new OutputStreamWriter(myClientSocket.getOutputStream()));

while(m_bRunThread) {
String clientCommand = in.readLine();

System.out.println("Client Says :" + clientCommand);

if(!ServerOn) {

System.out.print("Server has already stopped");

out.println("Server has already stopped");

out.flush();

m_bRunThread = false;

if(clientCommand.equalsIgnoreCase("quit")) {

m_bRunThread = false;

System.out.print("Stopping client thread for client : ");

} else if(clientCommand.equalsIgnoreCase("end")) {

m_bRunThread = false;

System.out.print("Stopping client thread for client : ");

ServerOn = false;

} else {

out.println("Server Says : " + clientCommand);

out.flush();

} catch(Exception e) {

e.printStackTrace();

finally {

try {

in.close();

out.close();

myClientSocket.close();

System.out.println("...Stopped");
} catch(IOException ioe) {

ioe.printStackTrace();

You might also like