java.net.BindException:在 Mac OSX 上创建 ServerSocket 时权限被拒绝

2022-09-01 09:11:31

我试图在Mac中运行一个带有eclipse的Java套接字,但它不起作用。我得到这个错误:

Exception in thread "main" java.net.BindException: Permission denied

    at java.net.PlainSocketImpl.socketBind(Native Method)
    at java.net.PlainSocketImpl.socketBind(PlainSocketImpl.java:521)
    at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:414)
    at java.net.ServerSocket.bind(ServerSocket.java:326)
    at java.net.ServerSocket.<init>(ServerSocket.java:192)
    at java.net.ServerSocket.<init>(ServerSocket.java:104)
    at server.MessageServer.main(MessageServer.java:11)

我怎样才能让它运行?

package server; //ChatServer 
import java.io.*; 
import java.net.*; 

public class MessageServer { 

public static void main (String args[]) throws IOException { 
    int port = 100; 
    ServerSocket server = new ServerSocket (port); 
    System.out.println("Server is started!"); 

    while (true) { 
        Socket client = server.accept (); 
        System.out.println ("Accepted from " + client.getInetAddress ()); 
        MessageHandler handler = new MessageHandler (client); 
        handler.start(); 
        } 
    } 
}

答案 1

你不能打开低于1024的端口,如果你没有root权限,并且从你在评论中发布的代码来看,你似乎正在尝试打开端口,这证实了我的理论。100

您需要使用高于 1024 的端口,如果您在非 root 用户下运行代码。


答案 2

基于 Unix 的系统将端口 < 1024 声明为“特权”,并且您需要管理员权限才能启动服务器。

对于测试,请使用端口号 >= 1024。

在生产环境中部署服务器时,请使用管理员权限运行它。


推荐