重新运行应用程序总是抛出java.net.BindException,并且必须重新启动服务器
我创建了一个Java Web应用程序,该应用程序具有一个应用程序侦听器,该侦听器在初始化的上下文上创建线程,该线程创建了一个ServerSocket,该ServerSocket接受循环中的新连接 问题是,每次我重新部署应用程序时,它都会给我java.net.BindException:地址已在使用中(绑定失败)。我已经关闭了ServerSocket,不知道还能做什么。这是我的密码:重新运行应用程序总是抛出java.net.BindException,并且必须重新启动服务器,java,multithreading,sockets,Java,Multithreading,Sockets,我创建了一个Java Web应用程序,该应用程序具有一个应用程序侦听器,该侦听器在初始化的上下文上创建线程,该线程创建了一个ServerSocket,该ServerSocket接受循环中的新连接 问题是,每次我重新部署应用程序时,它都会给我java.net.BindException:地址已在使用中(绑定失败)。我已经关闭了ServerSocket,不知道还能做什么。这是我的密码: @Override public void run() { int port = Integer.pars
@Override
public void run() {
int port = Integer.parseInt(conf.getConf("port"));
try (ServerSocket serverSocket = new ServerSocket(port)) {
while (work) {
Socket socket = serverSocket.accept();
System.out.println("User connected!");
WorkThread workThread = new WorkThread(conf, socket, bpk);
workThread.start();
}
}
} catch (IOException ex) {
Logger.getLogger(SocketThread.class.getName()).log(Level.SEVERE, null, ex);
}
}
提前谢谢你 如果您的服务器应用程序仍在运行(确实如此),则您尚未关闭服务器套接字(它仍在侦听)。我已检查、停止应用程序、取消部署并在我的pc上检查套接字是否仍被Java占用您已关闭
服务器套接字
何处?在一个上下文被破坏的侦听器中?我使用了上面所示的try with resource inside run方法,ServerSocket实现Closeable,所以这应该足够了,对吗?只有当这个线程退出时。你是怎么造成的?并将其从阻塞中取出accept()
?