web-dev-qa-db-ja.com

java.net.BindException:Mac OSXでServerSocketを作成するときに許可が拒否されました

EclipseでMacで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(); 
        } 
    } 
}
24
Kevbear

1024未満のポートを開くことはできません。root権限がなく、コメントに投稿したコードから、私の理論を確認する100ポートを開こうとしているようです。

ルート以外のユーザーでコードを実行している場合は、1024より大きいポートを使用する必要があります。

56
carlspring

nixベースのシステムは、ポート<1024 を「特権」として宣言し、サーバーを起動するには管理者権限が必要です。

テストには、1024以上のポート番号を使用します。

サーバーを実稼働環境にデプロイするときは、管理者権限で実行してください。

21
Aaron Digulla

同じ問題があり、ポート番号が1024未満であったため、ポート番号を1024に変更すると問題が解決しました。 1024未満のポートは特権ポートと呼ばれ、Linux(およびほとんどのUNIXフレーバーとUNIXライクシステム)では、非ルートユーザーが開くことは許可されていません。

3
confused

MyServer.Java

import Java.io.*;
import Java.net.*;
public class MyServer
{
    ServerSocket ss;
    Socket s;
    DataOutputStream dos;
    DataInputStream dis;
    public MyServer()
    {
        try 
        {
        System.out.println("Server Started ");
        ss=new ServerSocket(4444);
        s=ss.accept();
        System.out.println(s);
        System.out.println("Client Connected");
        dis=new DataInputStream(s.getInputStream());
        dos=new DataOutputStream(s.getOutputStream());
        ServerChat();
        }
        catch(Exception e)
        {
            System.out.println(e);
        }
    }   
    public static void main(String arg[])
    {
        new MyServer();
    }
    public void ServerChat()throws IOException
    {

        String str;
        do
        {
        str=dis.readUTF();
        System.out.println("Client msg : "+str);
        dos.writeUTF("Hello "+str);
        dos.flush();
        }while(!str.equals("stop"));

    }

}

MyClient.Java

import Java.io.*;
import Java.net.*;
public class MyClient
{
    Socket s;
    DataInputStream din;
    DataOutputStream dout;
    public MyClient()
    {
    try
    {
        s=new Socket("localhost",4444);
        System.out.println(s);
        din = new DataInputStream(s.getInputStream());
        dout = new DataOutputStream(s.getOutputStream());
        ClientChat();
    }
    catch(Exception e)
    {
    System.out.println(e);  
    }   
    }
    public void ClientChat() throws IOException
    {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String s1;
    do
    {
    s1=br.readLine();
    dout.writeUTF(s1);
    dout.flush();
    System.out.println("Server Msg : "+din.readUTF());
    }while(!s1.equals("stop"));
    }
    public static void main(String arg[])
    {
    new MyClient();
    }

}
0
JVD