+
+
+ + +
+
+
+

Java Examples - Multithreaded Server

+
+
+
Advertisements
+ + +
+
+ + +
+
+

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(); 
+            } 
+         } 
+      } 
+   } 
+}
+
+
+ + + +
java_networking.htm
+
+ +
+
Advertisements
+ + +
+
+
+
+
+ +
+ + +
+
+ + +
+
+ + +
+
+
+
+
+
+ + +