java socket programming problem
<p>client:    </p>

<pre><code>  import java.io.*;
  import java.net.*;
  public class Requester
  {
        Socket requestSocket;
        ObjectOutputStream out;
        ObjectInputStream in;
        String message;
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        Requester(){}
        void run() throws IOException
        {
            try{
                //1. creating a socket to connect to the server
                requestSocket = new Socket("172.16.3.219", 2004);
                System.out.println("Connected to localhost in port 2004");

                //2. get Input and Output streams
                out = new ObjectOutputStream(requestSocket.getOutputStream());
                out.flush();
                in = new ObjectInputStream(requestSocket.getInputStream());

                //3: Communicating with the server
                do{
                     try{
                        message = (String)in.readObject();
                        System.out.println("server&gt;" + message);
                        message=br.readLine();
                        sendMessage(message);
                     }
                        catch(ClassNotFoundException classNot)
                        {
                           System.err.println("data received in unknown format");
                    }
                }while(!message.equals("bye"));
               }
               catch(UnknownHostException unknownHost)
               {
                System.err.println("You are trying to connect to an unknown host!");
               }
               catch(IOException ioException)
               {
                ioException.printStackTrace();
               }
               finally
               {
                //4: Closing connection
                try{
                    in.close();
                    out.close();
                    requestSocket.close();
                   }
                  catch(IOException ioException)
                  {
                    ioException.printStackTrace();
                  }
               }
        }
        void sendMessage(String msg)
        {
            try{
                out.writeObject(msg);
                out.flush();
                System.out.println("client1&gt;" + msg);
               }
              catch(IOException ioException)
              {
                ioException.printStackTrace();
              }
        }
        public static void main(String args[]) throws IOException
        {
            Requester client = new Requester();
            client.run();
        }
    }
</code></pre>

<p>server:</p>

<pre><code>import java.io.*;
import java.net.*;
public class Provider
{
    ServerSocket providerSocket;
    Socket connection = null;
    ObjectOutputStream out;
    ObjectInputStream in;
    String message;
    Provider(){}
    BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

    void run()
    {
        try{
            //1. creating a server socket
            providerSocket = new ServerSocket(2004, 10);

            //2. Wait for connection
            System.out.println("Waiting for connection");

              connection = providerSocket.accept();
              System.out.println("Connection received from" + connection.getInetAddress().getHostName());

            //3. get Input and Output streams
                out = new ObjectOutputStream(connection.getOutputStream());
            out.flush();
            in = new ObjectInputStream(connection.getInputStream());
            sendMessage("Connection successful");

            //4. The two parts communicate via the input and output streams
            do
            {
               try
               {
                    message = (String)in.readObject();
                    System.out.println("client&gt;" + message);

                    if (message.equals("bye"))
                    {
                        sendMessage("bye");
                    }
                        else
                    {
                        message=br.readLine();
                        sendMessage(message);
                    }
              }
              catch(ClassNotFoundException classnot)
              {
                System.err.println("Data received in unknown format");
              }
            }while(!message.equals("bye"));
        }
        catch(IOException ioException)
        {
            ioException.printStackTrace();
        }
        finally
        {
            //4: Closing connection
            try{
                        in.close();
                        out.close();
                        providerSocket.close();
               }
              catch(IOException ioException)
              {
                            ioException.printStackTrace();
              }
            }
    }

        void sendMessage(String msg)
    {
        try
        {
            out.writeObject(msg);
            out.flush();
            System.out.println("server&gt;" + msg);
        }
        catch(IOException ioException)
        {
            ioException.printStackTrace();
        }
    }
    public static void main(String args[])throws IOException
    {
       Provider server = new Provider();
       while(true)
       {
        server.run();
       }
    }
}                                                                                                                                                                                                               
</code></pre>

<p>Server program is at  172.16.3.219. If both server and client are with in one system(172.16.3.219) programs are working.If a place my client program in some other system let us say 172.16.3.30 i am getting Exceptions(still server is at 172.16.3.219). Should i change socket() constructor. If the problem is with constructor suggest me suitable constructor when client and server are in different systems </p>
