title: Running a Client-Server program written in Java on NetBeans
body: <p>I'm trying to run a client-server program in java on Netbeans.</p>
  
  <p>Here's the code for the server:</p>
  
  <pre><code>// File Name GreetingServer.java
  
  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(10000);
     }
  
     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(args[0]); #line 48, error arises here. 
        try
        {
           Thread t = new GreetingServer(port);
           t.start();
        }catch(IOException e)
        {
           e.printStackTrace();
        }
     }
  }
  </code></pre>
  
  <p>Here's the code for the client:</p>
  
  <pre><code>// File Name GreetingClient.java
  
  import java.io.*;
  import java.net.*;
  
  public class GreetingClient
  {
     public static void main(String [] args)
     {
        String serverName = args[0]; #line 10, error arises here 
        int port = Integer.parseInt(args[1]);
        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>So when I want to simulate the client and the server running together I first run the server.
  Once the server is running I need to run the client.</p>
  
  <p>However when I try to run the server file, I get the following error:</p>
  
  <p>run:
  Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
      at GreetingServer.main(GreetingServer.java:48)
  Java Result: 1
  BUILD SUCCESSFUL (total time: 0 seconds)</p>
  
  <p>Similarly, when I try to run the client program, I get the following error:</p>
  
  <p>run:
  Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
      at GreetingClient.main(GreetingClient.java:10)
  Java Result: 1
  BUILD SUCCESSFUL (total time: 0 seconds)</p>
  
  <p>Why is this happening? Please help.</p>
  
  <p><strong>UPDATE:</strong></p>
  
  <pre><code>import java.net.*;
  import java.io.*;
  
  public class GreetingServer extends Thread
  {
      private static int port;
     private ServerSocket serverSocket;
  
     public GreetingServer(int port) throws IOException
     {
        serverSocket = new ServerSocket(port);
        serverSocket.setSoTimeout(10000);
     }
  
     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)
     {
        port=9000;
        try
        {
           Thread t = new GreetingServer(port);
           t.start();
        }catch(IOException e)
        {
           e.printStackTrace();
        }
     }
  }
  
  
  // File Name GreetingClient.java
  
  import java.io.*;
  import java.net.*;
  public class GreetingClient
  {
      private static String serverName;
     public static void main(String [] args)
     {
        String sName = "MyServerName";
        int port = 9000;
        try
        {
           System.out.println("Connecting to " + sName
                               + " on port " + port);
           Socket client = new Socket(sName, 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)
        {
        }
     }
  }
  </code></pre>
  
  <p>There is no error on the server side now. But I am still getting the following error on the client side:</p>
  
  <p>run:
  Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
      at GreetingClient.main(GreetingClient.java:10)
  Java Result: 1
  BUILD SUCCESSFUL (total time: 0 seconds)</p>