title: Communicating through two separate computer using java sockets
body: <p>I am trying to make a chat server and client that can communicate over two separate computers connected to the internet. One of them is connected to wifi and another one is through a modem. Here is my server code.</p>
  
  <p>GreetingServer.java</p>
  
  <pre><code>import java.net.*;
  import java.io.*;
  
  public class GreetingServer extends Thread
  {
     private ServerSocket serverSocket;
  
     public GreetingServer(int port) throws IOException
     {
        serverSocket = new ServerSocket(port);
        serverSocket.setSoTimeout(100000);
     }
  
     public void run()
     {
        while(true)
        {
           try
           {
              System.out.println("Waiting for client on port " +
              serverSocket.getLocalPort() + "...");
              Socket server = serverSocket.accept();
              System.out.println("Just connected to "
                    + server.getRemoteSocketAddress());
              DataInputStream in =
                    new DataInputStream(server.getInputStream());
              System.out.println(in.readUTF());
              DataOutputStream out =
                   new DataOutputStream(server.getOutputStream());
              out.writeUTF("Thank you for connecting to "
                + server.getLocalSocketAddress() + "\nGoodbye!");
              server.close();
           }catch(SocketTimeoutException s)
           {
              System.out.println("Socket timed out!");
              break;
           }catch(IOException e)
           {
              e.printStackTrace();
              break;
           }
        }
     }
     public static void main(String [] args)
     {
        int port = Integer.parseInt("6066");
        try
        {
           Thread t = new GreetingServer(port);
           t.start();
        }catch(IOException e)
        {
           e.printStackTrace();
        }
     }
  }
  </code></pre>
  
  <p>GreetingClient.java</p>
  
  <pre><code>import java.net.*;
  import java.io.*;
  
  public class GreetingClient2
  {
     public static void main(String [] args)
     {
        String serverName = "10.2.3.100";
        int port = Integer.parseInt("6066");
        try
        {
           System.out.println("Connecting to " + serverName +
           " on port " + port);
           Socket client = new Socket(serverName, port);
           System.out.println("Just connected to " 
           + client.getRemoteSocketAddress());
           OutputStream outToServer = client.getOutputStream();
           DataOutputStream out = new DataOutputStream(outToServer);
           out.writeUTF("Hello from "
                        + client.getLocalSocketAddress());
           InputStream inFromServer = client.getInputStream();
           DataInputStream in =
                          new DataInputStream(inFromServer);
           System.out.println("Server says " + in.readUTF());
           client.close();
        }catch(IOException e)
        {
           e.printStackTrace();
        }
     }
  }
  </code></pre>
  
  <p>The IP address in Client code is of the computer where the server is running acquired by InetAddress.getLocalHost().getHostAddress(). When I run the server, it waits for the client. And when I run the client code from another computer, it doesn't connect. Is it possible to communicate like this through sockets in java ?</p>