gpt4 book ai didi

Java套接字绑定(bind)两次无异常

转载 作者:行者123 更新时间:2023-12-02 07:07:29 24 4
gpt4 key购买 nike

当我的应用程序启动时,它绑定(bind)在给定端口上:

public boolean checkIsAlreadyStart() {
try {
final ServerSocket server = new ServerSocket();
server.setReuseAddress(false);
server.bind(new InetSocketAddress("127.0.0.1",APPLICATION_PORT ));
if (server.isBound()){
logger.debug("binding to port: {}", APPLICATION_PORT);
return false;
}
return true;
} catch (IOException e) {
logger.error("cannot bind to port", e);
return true;
}
}

但是,当我同时运行应用程序的两个实例时,第二个实例仍然可以运行该方法而不会出现 IOException。我必须调用accept()方法吗?

最佳答案

无法重现:

10/04/2013 3:55:34 PM S checkIsAlreadyStart
INFO: Bound to port: 9,999
10/04/2013 3:55:34 PM S checkIsAlreadyStart
SEVERE: cannot bind to port
java.net.BindException: Address already in use: JVM_Bind
at java.net.PlainSocketImpl.socketBind(Native Method)
at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:383)
at java.net.ServerSocket.bind(ServerSocket.java:328)
at java.net.ServerSocket.bind(ServerSocket.java:286)
at S.checkIsAlreadyStart(S.java:33)
at S.main(S.java:63)

然而,由于server是一个局部变量,它可能允许对ServerSocket进行垃圾收集,这将关闭它。如果您的目的是保持端口打开,您应该将 server 设置为实例变量。

关于Java套接字绑定(bind)两次无异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15915685/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com