Ergebnis 1 bis 2 von 2

Thema: Netzwerkprogrammierung beim Battleship Tutorial

  1. #1
    Neuer Benutzer
    Registriert seit
    01.01.2016
    Beiträge
    1

    Standard Netzwerkprogrammierung beim Battleship Tutorial

    Beim durchgehen des Source Codes vom Battleship Tutorial bin ich im Abschnitt unter Netzwerkprogrammierung auf folgendes Codefragment gestossen:

    Code:
    while( !stop_ ) {
    	try {
    		logger_.finest( "Listening..." );
    		Socket clientsock = sock.accept();
    		clientsock.setSoTimeout( 0 );
    
    		// Execute handler
    		pool.execute( new PeerHandler( clientsock ) );
    
    	} catch( SocketTimeoutException e ) {
    		logger_.finer( e.getMessage() );
    		continue;
    	} catch( Exception e ) {
    	}
    }
    sock.close();
    Sowie auf die Methode requestStop:

    Code:
    public void requestStop()
    {
    	stop_ = true;
    }
    Nun, an dieser Stelle fiel sofort auf, dass der NodeService nur dann sauber gestoppt werden kann, wenn nach dem Aufruf von requestStop() eine weitere Serveranfrage erfolgt weil sock.accept() blocking ist. Gerne wollte ich mich daher nach dem Konzept dahinter erkundigen bzw. warum führt die Methode requestStop() nicht direkt sock.close() auf?

  2. #2
    CodePlanet Staff Avatar von StarShaper
    Registriert seit
    10.09.2005
    Beiträge
    52

    Standard

    Hallo egges2.

    Das Runnable erzeugt permanent neue Threads, in denen dann ein Socket übergeben wird. Danach wird ein neuer Socket generiert. Das Member "sock" ist also kein Singleton in dem Sinne. Die Methode requestStop() bedeutet für die Klasse nicht, dass alle Sockets geschlossen werden. Diese sind ja der Klasse nach der Übergabe mit

    Code:
    pool.execute( new PeerHandler( clientsock ) );
    gar nicht mehr bekannt. Der alte Socket wird, sobald eine neue Clientverbindung akzeptiert wird, überschrieben.

    Code:
    Socket clientsock = sock.accept();
    Insofern sagt man der Klasse mit requestStop() lediglich, sie soll keine neuen Verbindungen mehr annehmen.

    Cu

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •