2012-06-26 1 views
0

У нас есть пакетные файлы, которые моя компания любит запускать за одну ночь, поэтому я взял код нашего сервера (MatLab)/client (Java/Eclispe), который отлично работал с отдельными файлами, помещал в то же время true loop вокруг всего и заставить его работать должным образом таким образом. Единственная проблема заключается в том, что сервер всегда ищет клиента с вызовом socket.accept(), но если у него нет клиентов для подключения к нему, он просто сидит там навсегда. Чтобы закрыть программу, мы должны обратиться к диспетчеру задач и закрыть его.Остановить сокет от прослушивания при приеме

Таким образом, он может каким-либо образом поместить таймер на прием, чтобы, если никто не пытается подключиться через определенное время, больше не нужно запускать пакетные файлы, я могу отменить подключение и выключение программы.

+0

также [этот ответ с помощью сокетов таймаут] (http://stackoverflow.com/a/2983861/2805324) – LateralFractal

ответ

0

Этот код позволит вам установить таймаут принять()

private ServerSocket listener; 
    private int timeout; 
    private Thread runner; 
    private boolean canceled; 

    ... 

    // returns true if cancel signal has been received 
    public synchronized boolean isCanceled() 
    { 
     return canceled; 
    } 

    // returns true if this call does the canceling 
    // or false if it has already been canceled 
    public synchronized boolean cancel() 
    { 
     if (canceled) { 
      // already canceled due to previous caller 
      return false; 
     } 

     canceled = true; 
     runner.interrupt(); 
     return true; 
    } 

    public void run() 
    { 
     // to avoid race condition (see below) 
     listener.setSoTimeout(timeout); 

     while (! isCanceled()) { 
      // DANGER!! 
      try { 
       Socket client = listener.accept(); 
       // hand client off to worker thread... 
      } 
      catch (SocketTimeoutException e) { 
       // ignore and keep looping 
      } 
      catch (InterruptedIOException e) { 
       // got signal while waiting for connection request 
       break; 
      } 
     } 

     try { 
      listener.close(); 
     } 
     catch (IOException e) { 
      // ignore; we're done anyway 
     } 
    }