2017-02-01 4 views
0

Я хочу иметь счетчик количества входящих соединений, которые у меня есть в секунду. Это означает, что я сделал петлю, как этот:Когда серверыocket.accept() выдает исключение? [java]

int incomingConnections; 
while(true) { 
    try { 
    Socket socket = serverSocket.accept(); 
    incomingConnections++; 
    } catch (Exception ex) { 
    } 

Раньше я начал TimerTask так:

new Timer().scheduleAtFixedRate(new TimerTask() { 
      @Override 
      public void run() { 
       System.out.println("TimerTask: " + incominConnections + " incoming Connections while the last second."); 
       incominConnections = 0; 
      } 
     }, 0, 1000); 

Что мне нужно сделать, потому что я хочу Int только сосчитать когда он принимает соединение succesfull, а не каждый раз, когда он выполняет итерацию цикла. Любая помощь там? Thx

+1

Я не понимаю, что вы пытаетесь сделать с помощью TimerTask. Насколько я могу судить, это не имеет отношения к вашему вопросу. И он ничего не делает. Почему вы включили его? –

+0

«Каждый раз, когда он выполняет итерацию цикла» и «когда он принимает соединение успешно», это то же самое в коде, который вы опубликовали. Если генерируется исключение, счетчик не увеличивается. Неясно, что вы спрашиваете. – EJP

ответ

0

Ваш код уже делает то, что вы хотите.

Документация Java для ServerSocket.accept() говорится, что:

Отслеживает соединения должны быть сделаны к этому гнезду и принимает его. Метод блокируется до тех пор, пока не будет выполнено соединение.

Так как вызов принимать блоки, вы только увеличиваете счетчик, если соединение успешно выполнено.

Если в вызове accept() вы выбрали исключение, вы введете блок catch, не выполняя код, который увеличивает счетчик.