2

http://docs.oracle.com/javase/tutorial/networking/sockets/clientServer.htmlにあるOracle の ServerSide Socket チュートリアルに従っています。彼らが提供するソースを使用します:

ただし、KnockKnockServer を実行しようとすると、IOException が発生し、サーバーが出力します

Could not listen on port: 4444.

e.printStackTrace()IOException catch ブロックにa を追加し、次を取得します。

[beni@mackerel:~]$ \sudo java KnockKnockServer
Creating socket
Could not listen on port: 4444.
java.net.BindException: Permission denied
    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 KnockKnockServer.main(KnockKnockServer.java:41)

root として実行していて、ポート 4444 を開こうとしていることに注意してください。それでも Permission denied エラーが表示されるのはなぜですか?

4

3 に答える 3

2

私はなんとか問題を解決することができました。ハンズオフしました!私のシステムにインストールされていますが、メニューバーからすべてのルールを無効にしました。KnockKnockServerはまだポートを開くことができませんでした。これで、HandsOffをアンインストールしました。完全に、そして通常通りポートを開くことができます。

私は常にnc -l 4444Cプログラムで同じソケットポートを開くことができましたが、Javaからは開くことができなかったので、それでも少し驚くべきことです。しかし同時に、Hands Offは、KnockKnockServerがポートを開くことを許可するかどうかを尋ねませんでした。

私はハンズオフのサポートをフォローアップします、多分彼らは助けることができます。

ありがとう、よろしくベネディクト

于 2012-08-26T20:35:31.030 に答える
0

私が考えることができる唯一の説明は、バインドが SELinux によって拒否されているということです。

于 2012-08-26T16:36:17.780 に答える
0

4444 ポートは別のプログラムによって使用されています。

タスク マネージャに移動し、[プロセス] タブで javaw.exe が実行されていることを確認します。プログラムを終了してから、プログラムを実行します

于 2012-08-26T16:37:06.133 に答える