Java Tutorial

Java Tutorial Java Features C++ vs Java Java History Java Hello World Java Development Kit Java Runtime Environment Java Virtual Machine Difference between JDK, JRE, and JVM Memory Areas in Java Java Operators Java Keywords Primitive Data Types Variables

Java Loops

Java Do While Loop Java While Loop Java For Loop Java Enhanced For Loop

Java Programs

Java Basic Programs Factorial Program in Java Fibonacci Series Program in Java Prime Number Program in Java Palindrome Number Program in Java Armstrong Number Program in Java Anagram Program in Java Pattern Programs in Java Calculator Program in Java Leap Year Program in Java Addition Program in Java Number Pattern Programs in Java Star Pattern Programs in Java Package Program in Java Pyramid Program in Java Sorting Program in Java String Palindrome Program in Java Even Odd Program in Java For Loop Program in Java If Else Program in Java Switch Case Program in Java GCD Program in Java LCM Program in Java Hello Program in Java Matrix Program in Java Menu Driven Program in Java Series Program in Java Client Server Program in Java Swapping Program in Java Pig Latin Program in Java Tower of Hanoi Program in Java Recursion Program in Java Matrix Multiplication Program in Java Perfect Number Program in Java Classes and Objects in Java Example Programs String Programs in Java Array Programs in Java Constructor Program in Java Inheritance Program in Java Abstract class Program in Java Interface Program in Java Encapsulation Program in Java Polymorphism Program in Java Exception Handling Program in Java Multithreading Program in Java Thread Program in Java Collection Programs in Java ArrayList Program in Java Stack Program in Java Applet Program in Java Swing Program in Java JDBC Program in Java How to run Java program in command prompt How to run Java program in Eclipse

Java Sorting

Sorting Algorithms in Java Merge Sort in Java Quick Sort in Java Bubble Sort in Java Insertion Sort in Java Selection Sort in Java Heap Sort in Java Radix Sort in Java Topological Sort in Java Bucket Sort in Java Counting Sort in Java

Java OOPs Concepts

OOPs - Object Oriented Programming Objects and Classes in Java Java Naming Conventions Constructors in Java Java this keyword Java static keyword Inheritance in Java Aggregation in Java Java super keyword Constructor Chaining and Constructor Overloading Java Polymorphism Static and Dynamic Binding in Java Java Abstraction Abstract class in Java Interface in Java Difference between Abstract class and Interface Java final keyword Packages in Java Access Modifiers in Java Java Wrapper classes Java Numbers Java Characters Java Integer Java Boolean Java Arrays Java Command Line Arguments Java strictfp Keyword Java Math

Java Strings

Java Strings Java String Methods StringBuilder in Java StringBuffer in Java Java Regular Expressions StringBuffer vs StringBuilder String vs StringBuffer String vs StringBuilder String Manipulation in Java Java String Concatenation How to Reverse a String in Java String Array in Java How to Compare Two Strings in Java How to Concatenate Two Strings in Java Why String in Immutable in Java java.lang.NumberFormatException for Input String String Pool in Java Java Generate Random String How to take String Input in Java Java String Interview Questions

Java Exceptions

Exception Handling in Java Java try catch Java throw Java throws Difference between throw and throws Java finally Java Custom Exception Java Exception Propagation

Garbage Collection

Automatic Resource Management in Java Java Garbage Collection Java finalize() Java gc() Difference between final, finally and finalize

Multithreading

Multithreading in Java Process and Thread in Java Basic Terms in Multithreading Java Thread creation Thread Scheduler in Java Java Thread class DeadLock in Java

Java IO

Java IO Java Read File Java BufferedWriter Java InputStreamReader Java File Java Read File Line By Line Java FileOutputStream Jar File in Java

Serialization

Java Serialization Java transient

Networking

Java Network Programming Java Socket Programming Java URL Java URLConnection HttpURLConnection in Java Java InetAddress Java DatagramSocket and Java DatagramPacket

AWT

Java AWT

Swing

Swing in Java

Java Collections

Collections in Java Java List Interface ArrayList in Java LinkedList in Java Vector in Java Stack in Java ArrayList vs LinkedList in Java ArrayList vs Vector in Java Java Set Interface HashSet in Java LinkedHashSet in Java TreeSet in Java Java Queue Interface PriorityQueue in Java ArrayDeque in Java Java Map Interface HashMap in Java LinkedHashMap in Java TreeMap in Java Dictionary in Java Hashtable in Java Properties in Java Collections class in Java Java Comparable Java Comparator Comparable vs Comparator in Java

Java Generics

Generics in Java

Java Annotations

Annotations in Java

Java JDBC

Java JDBC Tutorial

Java Differences

Java vs JavaScript Python vs Java Kotlin vs Java Java vs C++ C# vs Java Static vs Non-static in Java C vs Java int vs Integer in Java Stack vs Heap in Java Java Array vs ArrayList

How to

How to run Java program How to set path in Java How to check the Java version in cmd How to install Java in Windows 10 How to run Java program in cmd How to call a method in Java How to sort an array in Java How to iterate HashMap in Java How to write Java program How to create an array in Java How to create a package in Java How to generate random numbers in Java How to input String in Java How to create thread in Java How to find length of String in Java How to sort a string in Java How to use scanner in Java How to achieve multiple inheritance in Java How to run Java program in Eclipse How to call a function in Java How to create array of objects in Java How to create custom exception in Java How to achieve abstraction in Java How to call static method in Java

Java 8 Features

Java 8 Features Lambda Expressions in Java Functional Interface in Java Streams in Java Java Base64 Encoding and Decoding Parallel Arrays Sort in Java

Java 9 Features

Java 9 Tutorial Java 9 Try With Resources Java 9 Interface Private Method

Java Servlet Tutorial

Java Servlets Tutorial

Java JSP Tutorial

Java JSP Tutorial

Hibernate Tutorial

Hibernate Tutorial

Spring Tutorial

Spring Tutorial

Spring MVC Tutorial

Spring MVC Tutorial

Jenkins Tutorial

Jenkins Tutorial

Java Math Methods

Math.abs() Math.acos() Math.addExact() Math.asin() Math.atan () Math.atan2() Math.cbrt() Math.ceil() Math.copysign() Math.cos() Math.cosh() Math.decrementExact() Math.exp() Math.expm1() Math.floor() Math.floorDiv() Math.floorMod() Math.getExponent() Math.hypot() Math.IEEEremainder() Math.incrementExact() Math.log() Math.log10() Math.log1p() Math.max() Math.min() Math.multiplyExact() Math.multiplyFull() Math.negateExact() Math.nextAfter() Math.nextDown() Math.nextUp() Math.pow() Math.random() Math.rint() Math.round() Math.scalb() Math.signum() Math.sin() Math.sinh() Math.sqrt() Math.subtractExact() Math.tan() Math.tanh() Math.toDegrees() Math.toIntExact() Math.toRadians() Math.ulp()

Java String Methods

toCharArray() copyValueOf() endsWith() equals() equalsIgnoreCase() format() getBytes() getChars() hashCode() indexOf() intern() isEmpty() join() lastIndexOf() length() replace() replaceAll() replaceFirst() split() startsWith() subSequence() substring() toLowerCase() toUpperCase() trim() valueOf()

Java Conversion

Java Convert String to int Java Convert int to String Java Convert String to long Java Convert long to String Java Convert String to float Java Convert float to String Java Convert String to double Java Convert double to String Java Convert String to Date Java Convert Date to String Java Convert String to Object Java Convert Object to String Java Convert String to char Java Convert char to String Java Convert int to long Java Convert long to int

Misc

Functional Interfaces in Java Singleton class in Java Awesome explanation of Strings in Java Object class in Java Static class in Java All the important string methods in Java String Handling Method in Java What are Array strings in Java Advantages and Disadvantages of Strings in Java Big Decimal class in Java Class definition in Java Char and String differences in Java Difference between String, StringBuffer and StringBuilder in java Replace character in string Java String Coding Interview Questions in Java What is String in Java? String isnullorempty in Java String Matches in Java Trim Method in String Java Bean class in Java Libraries in Java Arithmetic Operations on String in Java Convert Char array to string in java Check whether Java is installed or not How to calculate time difference in Java How to stop execution after a certain time in Java Jagged Array in Java Java ArraylistRemove() Time Complexity Java Swing Time Picker Zigzag Array in Java

Client Server Program in Java

Client Server Program in Java

The client and server are the two main components of socket programming. The client is a computer/node that request for the service and the server is a computer/ node that response to the client. In Java, using socket programming, we can connect the client and server.

A socket is an endpoint for sending and receiving messages. It is a combination of IP address and port number. There are two types of sockets used in a client-server program: one is a client socket, and another is a server socket. The client, in a client-server program, must know the whereabouts of the endpoint (IP address and port number) of the server, where the client wants to send the request for a service. In the computer world, both client and server are application programs. A server program uses a server socket, whereas a client program uses a client socket for communication.

The following Java programs illustrate how to establish communication between a client and a server. Let’s start with the client-side program.

Client-Side Program

Filename: ClientSide.java

 // import statements
 import java.net.*;
 import java.io.*;
 import java.util.Scanner;
 public class ClientSide
 {
     // initializing socket and input output streams
     private DataOutputStream dataOut  = null;
     private Scanner sc                = null;
     private Socket skt                = null;
     // constructor to create a socket with given IP and port address
     public Client(String address, int port)
     {
         // Establishing connection with server
         try
         {
              // creating an object of socket
             skt = new Socket(address, port);
             System.out.println("Connection Established!! ");
             System.out.println("input \"Finish\" to terminate the connection. ");
             // taking input from user
             sc = new Scanner(System.in);
             // opening output stream on the socket
             dataOut = new DataOutputStream(skt.getOutputStream());
         }
         catch(UnknownHostException uh)
         {
             System.out.println(uh);
         }
         catch(IOException io)
         {
             System.out.println(io);
         }
         // to store the input messages given by the user
         String str = "";
         // The reading continues until "Finish" is input
         while (!str.equals("Finish"))
         {
             input = sc.nextLine(); // reading input
             try
             {
                 dataOut.writeUTF(str); // writing to the underlying output stream
             }
             // For handling errors while writing to output stream
             catch(IOException io)
             {
                 System.out.println(io);
             }
         }
         System.out.println(" Connection Terminated!! ");
         // for closing the connection
         try
         {
             dataOut.close();
             skt.close();
         }
         catch(IOException io)
         {
             System.out.println(io);
         }
     }
     public static void main(String argvs[])
     {
          // creating object of class Client
         ClientSide client = new ClientSide("localhost", 6666);
     }
 } 

Explanation: We know that to establish a connection, sockets are required on the client and server-side. The following statement creates a socket on the client-side:

sk = new Socket(address, port);

The constructor of the Socket class takes two arguments: one is address (IP address), and another is port (port number) and creates the object of the Socket class. In the code, we have used port number 6666. Here, we have used localhost because the client application program and the server application program are running on the same system. Generally, a client program and a server program sit on different systems. In such a scenario, instead of localhost, the IP address of the system on which the server is running is used. Ensure that a fully qualified IP address/ name is used in such case.

The port number 6666 means the client is trying to establish a connection to the server at port 6666. If the server is present at port 6666, the connection gets established; otherwise, not.

The statement

 dataOut = new DataOutputStream(skt.getOutputStream());
 dataOut.writeUTF(str); 

writes to the output stream opened on the socket. Whatever is written on the output stream is being read by the server. Here, str is a string that reads whatever the user gives as input. The reading of the variable str continues until the user inputs “Finish”. If any error occurs while writing to the underlying stream, the catch block of the IOException comes into the picture.

The following code snippet of the above catch block comes into action if we give any invalid IP address in the argument of the constructor of the Socket class.

 catch(UnknownHostException uh)
 {
 System.out.println(uh);
 } 

For example, instead of “localhost”, had we typed “locahost”, the statements of the above catch block would have come into action.

Now, let’s discuss the server-side program.

Server-Side Program

Filename: ServerSide.java

// import statements
 import java.net.*;
 import java.io.*;
 public class Server
 {
     //initializing input stream and socket
     private DataInputStream inStream = null;
     private Socket skt = null;
     private ServerSocket srvr = null;
     // constructor of the class Server
     public Server(int port)
     {
         // Starting the server and waiting for a client 
         try
         {
             srvr = new ServerSocket(port);
             System.out.println("Server starts");
             System.out.println("Waiting for a client to connect ... ");  
             skt = srvr.accept(); // waiting for  a client to send connection request
             System.out.println("Connected with a Client!! ");
             // Receiving input messages from the client using socket
             inStream = new DataInputStream( skt.getInputStream() );
             String str = ""; // variable for reading messages sent by the client
             // Untill "Finish" is sent by the client,
             // keep reading messages
             while (!str.equals("Finish"))
             {
                 try
                 {
                     // reading from the underlying stream
                     str = inStream.readUTF();
                     // printing the read message on the console
                     System.out.println( str );
                 }
                // For handling errors
                 catch(IOException io)
                 {
                     System.out.println( io );
                 }
             }
             // closing the established connection
             skt.close();
             inStream.close();
             System.out.println(" Connection Closed!! ");
         }
         // handling errors
         catch(IOException i)
         {
             System.out.println(i);
         }
     }
     public static void main(String argvs[])
     {
         // creating an object of the class ServerSide
         Server server = new Server(6666);
     }
 } 

Explanation: The statement

srvr = new ServerSocket(port);

creates a new socket and binds it to the port number, which is passed as an argument (port) to the constructor of the class ServerSocket. In the code, we have used port number 6666. This means the server is listening to port number 6666, and a client has to use this port number (6666) to connect to the server.

The statement

skt = srvr.accept();

is used by the server to accept the connection request from the client. The server waits after invoking the method accept(). The waiting continues till the server gets a connection request from the client. Here, waiting means any statement written after the accept() method does not get executed until the server gets a connection request. At this position, we say the server is listening on the given port number, which is 6666 in our case.

In order to read the messages sent from the client, we have to open an input stream to the socket. The following statement does the same.

inStream = new DataInputStream( skt.getInputStream() );

The method getInputStream() returns the input stream attached to the socket. In Java, the data output stream is used to write data that can be later read by the input stream. The same is happening in the above statement. Whatever we send from the client-side is being read here when we invoke the readUTF() method of the class DataInputStream. The following statement does the same

str = inStream.readUTF();

On the client-side, we have used the method writeUTF() to do the writing part to the stream. Similarly, on the server-side, we have used here readUTF() to do the reading part from the stream. The readUTF() method returns a Unicode string, which we store in the variable str. The reading continues till the client sends the word “Finish”. After reading the word “Finish”, the connection gets closed. The below-written statements achieve the same.

 skt.close();
 inStream.close(); 

Execution Step

First, the server-side program should be executed. This is because, when we start executing the client-side program, it starts looking for a server at port number 6666. Since we have not executed the server-side program first, there will no server present listening to port number 6666. Therefore, the client-side program raises the NullPointerException. Thus, the client-side program must be executed after the server-side program is executed.

In order to execute the above programs, open two command prompts, one for the client-side program and another for the server-side program. Use commands javac and java for doing compilation and execution, respectively.

Output:

First, we execute the server-side program.

Client Server Program in Java

We see that after the execution, server waits for a client to connect. Now, execute the client-side program and observe how the server responds.

Client Server Program in Java

We see the server responds with the message Connected with a client!! Now, the connection has been established and we can send messages to the connected server. Observe the following snapshots.

Client Server Program in Java

1234, 78, …, Russia are the inputs send from the client. Those input messages are displayed as it is on the server-side. To terminate the connection, we have to input the word Finish.

Client Server Program in Java

After the word “Finish” is input, the connection is closed on both the sides.

Examples of Client-Server Application

There are many uses of client-server applications. A few of them are mentioned below.

  • Whenever we use ATMs to check the bank account balance or to make the money withdrawal, we actually participate in client-server communication. The ATMs are designed to interact with the bank servers. The programs written on the server side serve the request sent by us through ATMs. It is obvious that ATMs act as the clients, and the bank servers act as the servers.

  • We frequently use web browsers like Opera, Mozilla Firefox, Google Chrome, etc., for net surfing. These browsers act as the clients that send a request to the servers. To which server the connection request is going to be sent by the browser is decided by the URL (Uniform Resource Locator), which is given by the user to the browser.
  • Sending a mail is also an example of a client-server application. The client, who is willing to send an email, sends a connection request to the mail server. Then, the server requests authentication (password and email address) from the client. If the password and email address match, the email is sent to the destination address.



ADVERTISEMENT
ADVERTISEMENT