문제

How do i stop a server cause the ss.close() doesn't stop the server. I am using the following code :

    public class Server {
        ServerSocket ss;
        boolean listening;


        public void StartServer() {
            try {
                ServerSocket ss = new ServerSocket(7777);
                listening = true;
                JOptionPane.showMessageDialog(null, "Server started");
            } catch (IOException ioe) {
                JOptionPane.showMessageDialog(null, "Error: " + ioe);
            }


        while(listening) {
            try {
                new Session(ss.accept());
            } catch(IOException ioe) {
                JOptionPane.showMessageDialog(null, "Error: " + ioe);
            }
        }
    }

    public void StopServer() {
        try {
            ss.close();
        } catch (Exception e) {}
    }
  }

I call the StopServer method somewhere else. I have also tried to set listening to false. Where i call the StartServer method i placed a Message Dialog to see if it continues.

    private void btn_StartActionPerformed(java.awt.event.ActionEvent evt) {                                          
            lbl_Image2.setText("");
            lbl_Image2.setIcon(new ImageIcon("../../Project/Images/GreenButton.png"));
            lbl_Image2.setVisible(true);
            btn_Start.setEnabled(false);
            btn_Stop.setEnabled(true);
            SV.StartServer();
            JOptionPane.showMessageDialog(null, "Stopped");
    }

When I try to call the StopServer() the message dialog doesn't pop up.

도움이 되었습니까?

해결책

Change ServerSocket ss = new ServerSocket(7777); to ss = new ServerSocket(7777);. The ss variable referenced in the StopServer() method is not the same one that is started in StartServer().

다른 팁

If u want to give control of starting/stopping the server, you have to create GUI based server in threads. Because in StartServer method following while loop will not release its control called by the component (Start Button).

while(listening) {
        try {
            new Session(ss.accept());
        } catch(IOException ioe) {
            JOptionPane.showMessageDialog(null, "Error: " + ioe);
        }
    }
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top