title: TCP NTP Java Socket Program
body: <p>I have this code about a Server-Client NTP project I'm working on... 
   I initialize the socket but I get java.net.SocketException: Socket is not connected this error. Any clues?</p>
  
  <p>Can anyone please help me?</p>
  
  <pre><code>package ntp;
  
  import java.io.*;
  import java.net.*;
  import java.text.SimpleDateFormat;
  import java.util.*;
  /**
   * @author Anastasis Chirstodoulakis
   */
  public class Server extends Thread {
      private int totalTime=0;
      private int x=0;          //counter
      private int moTime=0;     //average time
      private int PORT;
      private Socket sock = new Socket();
  
      public Server(int PORT) {
          this.PORT=PORT;
      }
  
      private Server(Socket sock) {
          this.sock = sock;
      }
  
      @Override
      public void run(){
          try {
              //open socket
  
  
              while(true){
                  ServerSocket server = new ServerSocket(PORT+=1000);
                  sock = server.accept();
                  new Thread(new Server(PORT+=1000)).start();
  
                  InputStream  in = sock.getInputStream(); 
                  OutputStream out = sock.getOutputStream();
                  PrintWriter w = new PrintWriter(out);   //buffer
                  Scanner s = new Scanner(in);
                  SimpleDateFormat time = new SimpleDateFormat("HH.mm.ss."); 
  
                  String msg=s.nextLine();
                  System.out.println(msg);
                  //get time and set format
                  Date date=new Date();       //get current time
                  SimpleDateFormat sd=new SimpleDateFormat("yyyy.MM.dd.HH:mm:ss");    
                  String sdf=sd.format(date);
                  //convert time into seconds
                  String arr[]=msg.split(" ");
                  String st=arr[3];
                  String arr1[]=st.split("\\.");
                  int hh=Integer.parseInt(arr1[0]);
                  int mm=Integer.parseInt(arr1[1]);
                  int ss=Integer.parseInt(arr1[2]);
                  int secTime=(3600*hh)+(60*mm)+ss;
  
                  totalTime += secTime;
                  x++; 
  
                  if(x==10){
                      moTime=totalTime/10;    //to get average time
  
                      String moHour= secToTime(moTime);                
                      w.println("Server time is:"+ moHour);
                      w.flush();  //to empty the buffer
                  }
                  in.close();
                  out.close();
                  sock.close();
              }
          }
          catch (IOException ex) {
              System.out.println(ex); 
          }
          catch (NullPointerException ex){
              System.out.println(ex);
          }
      }      
  
      public String secToTime(int totalSec){
          //seconds to HH,mm,ss
          int hour=totalSec/3600;
          int remain=totalSec%3600;
          int min=remain/60;
          int sec=remain%60;
  
          String hours = (hour &lt; 10 ? "0" : "") + hour,
          mins = (min &lt; 10 ? "0" : "") + min,
          secs = (sec &lt; 10 ? "0" : "") + sec;
          String send = hours + "." + mins + "." + secs + ".";
  
          return send;
        }
  }
  </code></pre>
  
  <p>And here is the client code but I think it's ok...</p>
  
  <pre><code>package ntp;
  
  import java.io.*;
  import java.net.*;
  import java.text.SimpleDateFormat;
  import java.util.*;
  /**
   * @author Anastasis Christodoulakis
   */
  public class Client extends Thread{
      private Random r;
      private int PORT;
  
      public Client(int PORT) {
          this.PORT=PORT;
          r = new Random();
      }
  
      public String secToTime(int totalSec){
          //seconds to HH,mm,ss
          int hour=totalSec/3600;
          int remain=totalSec%3600;
          int min=remain/60;
          int sec=remain%60;
  
          String hours = (hour &lt; 10 ? "0" : "") + hour,
          mins = (min &lt; 10 ? "0" : "") + min,
          secs = (sec &lt; 10 ? "0" : "") + sec;
          String send = hours + "." + mins + "." + secs + ".";
  
          return send;
        }
  
      @Override
      public void run(){        
          try {
              //open socket
              Socket sock=new Socket("localhost",PORT);          
              InputStream in=sock.getInputStream();
              OutputStream out=sock.getOutputStream();         
              Scanner s=new Scanner(in);
              PrintWriter w=new PrintWriter(out); //buffer
  
              for(int i=0;i&lt;10;i++){
                  Date today=new Date();     //get current time
                  SimpleDateFormat sd=new SimpleDateFormat("yyy.MM.dd.HH.mm.ss");  //change time form
                  String sdf=sd.format(today); //time to String
  
                   //convert time into seconds        
                  String ms[]=sdf.split("\\.");
                  int hh=Integer.parseInt(ms[3]);                
                  int mm=Integer.parseInt(ms[4]);            
                  int ss=Integer.parseInt(ms[5]);              
                  int secTime=(3600*hh)+(60*mm)+ss; 
  
                  //Random Delay (-0.5/0.5)
                  float lag=r.nextFloat()*(0.5f-0.5f)+0.5f;
                  secTime= (secTime - (int) (2 - lag));
  
                  w.println("Client time is: " + secToTime(secTime));
                  w.flush();      
  
              }
              while(s.hasNextLine()){
                  String input=s.nextLine();
                  System.out.println(input);
              }
  
              in.close();
              out.close();
              sock.close();
          } catch (IOException ex) {
              System.out.println(ex);
          }
      }    
  }
  </code></pre>
  
  <p>and main...</p>
  
  <pre><code>package ntp;
  
  public class NTP {
  
  
      public static void main(String[] args) {
          Server server = new Server(2000);   //set port
          Client client = new Client(2000);
  
          server.start();
          client.start();
      }
  }
  </code></pre>
  
  <p>............... .................... ................... ............... </p>
  
  <p>Thank you for your time.</p>