Java network connection thread

Introducing Threads in Socket Programming in Java

This article assumes that you have basic knowledge of socket programming in java and the basic details of client-server model used in communication.

Why to use threads in network programming?

The reason is simple, we don’t want only a single client to connect to server at a particular time but many clients simultaneously. We want our architecture to support multiple clients at the same time. For this reason, we must use threads on server side so that whenever a client request comes, a separate thread can be assigned for handling each request.

Let us take an example, suppose a Date-Time server is located at a place, say X. Being a generic server, it does not serve any particular client, rather to a whole set of generic clients. Also suppose at a particular time, two requests arrives at the server. With our basic server-client program, the request which comes even a nano-second first would be able to connect to the server and the other request would be rejected as no mechanism is provided for handling multiple requests simultaneously. To overcome this problem, we use threading in network programming.
The following article will focus on creating a simple Date-Time server for handling multiple client requests at the same time.

Quick Overview

As normal, we will create two java files,Server.java and Client.java. Server file contains two classes namely Server (public class for creating server) and ClientHandler (for handling any client using multithreading). Client file contain only one public class Client (for creating a client). Below is the flow diagram of how these three classes interact with each other.

Читайте также:  Php функция проверки строки

Server Side Programming(Server.java)

  • Server class : The steps involved on server side are similar to the article Socket Programming in Java with a slight change to create the thread object after obtaining the streams and port number.
    1. Establishing the Connection: Server socket object is initialized and inside a while loop a socket object continuously accepts incoming connection.
    2. Obtaining the Streams: The inputstream object and outputstream object is extracted from the current requests’ socket object.
    3. Creating a handler object: After obtaining the streams and port number, a new clientHandler object (the above class) is created with these parameters.
    4. Invoking the start() method : The start() method is invoked on this newly created thread object.
  • ClientHandler class : As we will be using separate threads for each request, lets understand the working and implementation of the ClientHandler class extending Threads. An object of this class will be instantiated each time a request comes.
    1. First of all this class extends Thread so that its objects assumes all properties of Threads.
    2. Secondly, the constructor of this class takes three parameters, which can uniquely identify any incoming request, i.e. a Socket, a DataInputStream to read from and a DataOutputStreamto write to. Whenever we receive any request of client, the server extracts its port number, the DataInputStream object and DataOutputStream object and creates a new thread object of this class and invokes start() method on it.
      Note : Every request will always have a triplet of socket, input stream and output stream. This ensures that each object of this class writes on one specific stream rather than on multiple streams.
    3. Inside the run() method of this class, it performs three operations: request the user to specify whether time or date needed, read the answer from input stream object and accordingly write the output on the output stream object.
Читайте также:  Вконтакте для java телефонов

Источник

Оцените статью