无法使用 ServerSocket.socketBind 分配请求的地址

2022-08-31 16:54:45

当我尝试设置套接字服务器时,我收到一条错误消息:

Exception in thread "main" java.net.BindException: Cannot assign requested address: 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.<init>(ServerSocket.java:194)
    at java.net.ServerSocket.<init>(ServerSocket.java:106)
    at socketyserver.SocketyServer.main(SocketyServer.java:12)
Java Result: 1

整个代码是最简单的,因为它可以是:

public static void main(String[] args) throws UnknownHostException, IOException
{
    ServerSocket serverSocket;
    serverSocket = new ServerSocket(9999);
}

我100%确定我的端口已转发,Windows防火墙已关闭。没有任何东西可以阻止端口 9999。还有什么会出错?


答案 1

它可能与 中的配置错误有关。在我的情况下,它是这样的:而不是/etc/hosts192.168.1.11 localhost127.0.0.1 localhost


答案 2

正如其他人所指出的那样,它很可能与使用端口的另一个进程有关。在 Windows 上,运行以下命令:9999

netstat -a -n | grep "LIST"

它应该列出任何占用端口的东西。当然,您将不得不在任务管理器中手动杀死这些程序。如果这仍然不起作用,请替换以下行:

serverSocket = new ServerSocket(9999);

跟:

InetAddress locIP = InetAddress.getByName("192.168.1.20");
serverSocket = new ServerSocket(9999, 0, locIP);

当然,请替换为您的实际IP地址,或使用.192.168.1.20127.0.0.1