2016-09-27 4 views
0

Ich möchte meinen Server schließen, wenn ich die Stopptaste in meiner GUI drücke. Ich benutze diesen Code für die Steckdose, der zuhört, wenn ein Client-Verbindung zum Serversocket ist:So schließen Sie einen Socket, wenn er eine Verbindung abhört

public void run() { 
     while (running) { 
      try { 
       if (serverSocketPassed) { 
        socket = serverSocket.accept(); 
        scanner = new Scanner(socket.getInputStream()); 
        stream = new PrintStream(socket.getOutputStream()); 
       } 
      } catch (IOException e) { 
       System.out.println("err11"); 
       e.printStackTrace(); 
      } 
     } 

    } 

Und für das Schließteil sieht der Code folgendermaßen aus:

public void stop() { 
    try { 
      serverSocket.close(); 
      running = false; 
     } catch (Exception e) { 
      System.out.println("Err"); 
      e.printStackTrace(); 
     } 
     scanner.close(); 
     stream.close(); 
} 

Aber wenn ich rufe den Anschlag Funktion, bevor ein Client verbunden: Ich bekomme einen Fehler. Diese ist der Fehler:

err11 
java.net.SocketException: socket closed 
    at java.net.DualStackPlainSocketImpl.accept0(Native Method) 
    at java.net.DualStackPlainSocketImpl.socketAccept(Unknown Source) 
    at java.net.AbstractPlainSocketImpl.accept(Unknown Source) 
    at java.net.PlainSocketImpl.accept(Unknown Source) 
    at java.net.ServerSocket.implAccept(Unknown Source) 
    at java.net.ServerSocket.accept(Unknown Source) 
    at _47b3n.server.main.Server$SocketRunner.run(Server.java:93) 
    at java.lang.Thread.run(Unknown Source) 
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
    at _47b3n.server.main.Server.stop(Server.java:42) 
    at _47b3n.server.main.ServerGUI$ActionListener.actionPerformed(ServerGUI.java:166) 
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) 
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) 
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) 
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source) 
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source) 
    at java.awt.Component.processMouseEvent(Unknown Source) 
    at javax.swing.JComponent.processMouseEvent(Unknown Source) 
    at java.awt.Component.processEvent(Unknown Source) 
    at java.awt.Container.processEvent(Unknown Source) 
    at java.awt.Component.dispatchEventImpl(Unknown Source) 
    at java.awt.Container.dispatchEventImpl(Unknown Source) 
    at java.awt.Component.dispatchEvent(Unknown Source) 
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) 
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) 
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) 
    at java.awt.Container.dispatchEventImpl(Unknown Source) 
    at java.awt.Window.dispatchEventImpl(Unknown Source) 
    at java.awt.Component.dispatchEvent(Unknown Source) 
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source) 
    at java.awt.EventQueue.access$500(Unknown Source) 
    at java.awt.EventQueue$3.run(Unknown Source) 
    at java.awt.EventQueue$3.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) 
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) 
    at java.awt.EventQueue$4.run(Unknown Source) 
    at java.awt.EventQueue$4.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) 
    at java.awt.EventQueue.dispatchEvent(Unknown Source) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.run(Unknown Source) 

Wie kann ich richtig auf den Server schließen und es ist Komponenten?

+0

'scanner' und' Stream' sind nicht definiert; Nach "null" suchen. Was den Fehler "SocketException: socket closed" betrifft - Sie müssen damit leben; Dies ist, was Sie bekommen, wenn der Socket geschlossen ist, während Sie darauf warten - fangen Sie die 'Exception' auf und loggen Sie sie gut ein. –

Antwort

0

Schließen Sie den Stream nicht abrupt, sondern schließen Sie den Server-Socket abrupt.

Versuchen Sie folgendes:

stream.close(); 
Verwandte Themen