Showing posts with label socket. Show all posts
Showing posts with label socket. Show all posts

Thursday, December 26, 2013

Client-Server Socket Programming in Java


Hey geeks, today I would like to share about some networking concepts like socket programming in Java. We will see how to communicate between Server and Clients using core Java programming. Socket programming can be done in many langauges, basically it's done in C programming because C is a system programming langauge but in Java it's quite easier then the C programming. We can say, the magic in socket programming is that it's not necessary that your Server and Client both should be written in same langauges, it can be possible to write Server code in C programming and Client in Java programming and vice-versa. But there should be proper sycncronization and it's depends on the logic of programmer who is concern with the Application he/she is doing. Here I am considering that you guys have the basic knowledge of Socket programming and the methods used in it.

Sunday, February 24, 2013

Socket Programming in JAVA

Socket is a logical entity in a computer system which provides communication mechanism between two computers using TCP (transmission control protocol) or UDP (user data-gram protocol), but in this blog we will be studying communication over TCP. Socket is combination of IP address and port. The java.net package contains classes that provide all of low level communication for you. To create socket there is Socket class available in java.net package and the java.net.ServerSocket class provides a mechanism for server program to listen for client and establish connection between them.

Steps to establish communication using socket over TCP:

1.Server initiate Server socket object indicating on which port communication will take place i.e. server decides port on which communication takes place.
2.The server invokes the accept() method of the ServerSocket class. This method waits until client connects to server on the given port.
3. Then client initiate socket object specifying IP address or name of server and port number on which communication will takes place. Communication will takes place only when server is listening to same port.
4.After this it can be possible to communicate on a socket.

After following above steps communication can be done using I/O streams. TCP is a two way communication protocol. Both client and server has input and output stream. Client output stream is connected to input stream and Client output stream is connected to server output stream. There are various socket primitives available in ServerSocket class.

Socket primitives:-

There are a lot of primitives available but we will be discussing only two which is required to establish simple communication over socket.

      public ServerSocket(int port):

This primitive in server decides on which port communication will take place. We can say that it binds the port address by creating socket. Sometime this primitives throws I/O exceptions.

       public Socket accept():

This primitive in server continuously waiting for client to get connect on the specified port in above primitives. This method also throws I/O exceptions.
           
Example :-

For client:
import java.net.*;
import java.io.*;
public class socketclient {
public static void main(String[] args) {
                        Socket s=null;
                        try
                        {
                                    s = new Socket("localhost",30000);       
                        }
                        catch(UnknownHostException uhe)
                        {
                          uhe.printStackTrace();
                        }
                        catch(IOException ioe)
                        {
                                  ioe.printStackTrace();   
                        }
                        System.out.println("Connected Successfully");
                        BufferedReader in = null;
                        PrintWriter out = null;
        try
        {
             in=new BufferedReader(new InputStreamReader(s.getInputStream()));
             out=new PrintWriter(new OutputStreamWriter(s.getOutputStream()));
             System.out.println("Start Communication now -->>");
             while(true)
             {
       BufferedReaderreader=newBufferedReader(newinputStreamReader(System.in));
             String name=reader.readLine();
             out.println(name);
             out.flush();
             System.out.println("Server says:->>"+in.readLine());
             if(in.readLine().equals("exited") | in.readLine().equals(null))
             {
                         s.close();
                         break;
                         }
             }
        }
        catch(IOException ioe)
        {
        ioe.printStackTrace();          
        }
           
            }

For server:
import java.net.*;
import java.io.*;
public class socketserver {
            public static void main(String[] args) {
                        ServerSocket ss=null;
                        Socket server = null;
                        int port=30000;
                        try
                        {
                                    ss=new ServerSocket(port);
                        }
                        catch(IOException ioe)
                        {
                                    ioe.printStackTrace();
                        }
                        System.out.println("listening 0n "+ port);
                        try
                        {
                                    server=ss.accept();
                        }
                        catch(IOException ioe)
                        {
                                    ioe.printStackTrace();
                        }
                        BufferedReader in = null; 
            PrintWriter out = null;
        try
        {
            in = new BufferedReader(new InputStreamReader(server.getInputStream()));
            out = new PrintWriter(new OutputStreamWriter(server.getOutputStream()));
           while(true)
            {
            String clientCommand = in.readLine();
            if(clientCommand.equals("exit"))
            {
                        System.out.println("Connection is disconnected from the user Messege :EXIT");
           out.println("exited");out.flush();
                        server.close();
                        break;
            }
             System.out.println("Client Says :-->>" + clientCommand);
             System.out.println("Server Says:-->>");
       BufferedReaderreader=newBufferedReader(newInputStreamReader(System.in));
             String name=reader.readLine();
             out.println(name);
             out.flush();
            }
       }
        catch(IOException ioe)
        {
            ioe.printStackTrace();
        }
}
}