Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
277 views
in Technique[技术] by (71.8m points)

multithreading - Java - Thread - Address already in use (net bind)

I have a 2 button using Swing API to handle a Socket server thread. The problem is, when I start a new Socket Server is success.

  Java Thread ID:19 

But when I stop, and start again : its said

Java Thread ID:20 
Exception server handler: Address already in use (Bind failed)

Here is the source code. Any help it so appreciated.

private Thread worker;
private final AtomicBoolean running = new AtomicBoolean(false);

private boolean isRunning() {
  return running.get();
}

private void interrupt() {
  running.set(false);
  worker.interrupt();
}

// Function start a thread server socket
private void btnStartActionPerformed(java.awt.event.ActionEvent evt) {                                         
        
  // Validation
  if (textFieldDirectory.getText() != null && !textFieldDirectory.getText().isEmpty()) {

    worker = new Thread(new ServerHandler());
    worker.start();

    btnStart.setEnabled(false);
    btnStop.setEnabled(true);

  
  } else {
    textAreaLog.append(this.createLog("Please", "Failed"));
    
  }
}


// Function stop those thread
private void btnStopActionPerformed(java.awt.event.ActionEvent evt) {                                        
   interrupt();
        
   btnStart.setEnabled(true);
   btnStop.setEnabled(false);
        
}    


public class ServerHandler implements Runnable {

   @Override
   public void run() {
     try {
        running.set(true);

        ServerSocket serverSocket = new ServerSocket(59090);
        while (isRunning()) {
            
            Socket clientSocket = null;
            clientSocket = serverSocket.accept();

            // create each thread for client
            Thread listener = new Thread(new ClientHandler(clientSocket));
            listener.start();
            textAreaLog.append("
" + "Thread Listering: " + listener.getName() + "
");
        }
     } catch (IOException ex) {
        textAreaLog.append("Exception server handler: " + ex.getMessage());
        Thread.currentThread().interrupt();
     }
   }
}
question from:https://stackoverflow.com/questions/65896392/java-thread-address-already-in-use-net-bind

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
Waitting for answers

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...