2017-02-01 3 views
0

Ich möchte einen Zähler haben, wie viele eingehende Verbindungen ich pro Sekunde habe. Das heißt, ich habe eine Schleife wie diese gemacht:Wann löst serversocket.accept() eine Ausnahme aus? [java]

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

Vor, begann ich eine Timertask wie folgt aus:

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

Was muss ich tun müssen, weil ich die int wollen nur zählen, wenn es eine Verbindung erfolgreich akzeptiert, nicht jedes Mal, wenn es die Schleife wiederholt. Irgendwelche Hilfe da draußen? Thx

+1

Ich verstehe nicht, was Sie mit der TimerTask zu tun versuchen. Das ist für Ihre Frage, soweit ich das beurteilen kann, irrelevant. Es tut auch nichts. Warum hast du es aufgenommen? –

+0

"Jedes Mal, wenn es die Schleife wiederholt" und "wenn es eine Verbindung erfolgreich akzeptiert" sind die gleichen Dinge in dem Code, den Sie gepostet haben. Wenn eine Ausnahme ausgelöst wird, wird der Zähler nicht erhöht. Unklar, was du verlangst. – EJP

Antwort

0

Ihr Code macht schon, was Sie wollen.

Die Java Dokumentation für ServerSocket.accept() besagt, dass es:

Wartet auf eine Verbindung zu dieser Buchse hergestellt werden und akzeptiert sie. Die Methode blockiert, bis eine Verbindung hergestellt wird.

Also, weil der Aufruf zu akzeptieren, Blöcke, werden Sie nur immer Ihren Zähler erhöhen, wenn eine Verbindung erfolgreich hergestellt wird.

Wenn eine Ausnahme im Aufruf von accept() ausgelöst wird, geben Sie den catch-Block ein, ohne den Code auszuführen, der den Zähler inkrementiert.

Verwandte Themen