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();
}
}
}
1024未満のポートを開くことはできません。root権限がなく、コメントに投稿したコードから、私の理論を確認する100
ポートを開こうとしているようです。
ルート以外のユーザーでコードを実行している場合は、1024より大きいポートを使用する必要があります。
nixベースのシステムは、ポート<1024 を「特権」として宣言し、サーバーを起動するには管理者権限が必要です。
テストには、1024以上のポート番号を使用します。
サーバーを実稼働環境にデプロイするときは、管理者権限で実行してください。
同じ問題があり、ポート番号が1024未満であったため、ポート番号を1024に変更すると問題が解決しました。 1024未満のポートは特権ポートと呼ばれ、Linux(およびほとんどのUNIXフレーバーとUNIXライクシステム)では、非ルートユーザーが開くことは許可されていません。
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();
}
}