为什么以下代码不抛出“java.net.BindException:地址已在使用:JVM_Bind”异常?
import java.net.InetSocketAddress;
import java.net.ServerSocket;
public class Test
{
public static void main(String[] args) throws Exception
{
try (ServerSocket socket1 = new ServerSocket();
ServerSocket socket2 = new ServerSocket();
ServerSocket socket3 = new ServerSocket())
{
int port = 10000;
socket1.setReuseAddress(false);
socket1.bind(new InetSocketAddress("0.0.0.0", port));
socket2.setReuseAddress(false);
socket2.bind(new InetSocketAddress("127.0.0.1", port));
socket3.setReuseAddress(false);
socket3.bind(new InetSocketAddress("127.0.0.2", port));
Thread.sleep(Long.MAX_VALUE);
}
}
}
之后运行“netstat”显示:
C:\用户\管理员>netstat -a -n | 找到str 10000 TCP 0.0.0.0:10000 0.0.0.0:0 监听 TCP 127.0.0.1:10000 0.0.0.0:0 监听 TCP 127.0.0.2:10000 0.0.0.0:0 监听 TCP [::]:10000 [::]:0 监听
我在 Windows Server 2008 R2(64 位)上运行它,并且“ipconfig /all”仅显示一个网络适配器/接口(其他网络适配器被禁用)。但是,在其他一些机器上,这个程序实际上确实抛出了预期的“java.net.BindException:地址已经在使用:JVM_Bind”!
会发生什么?