【发布时间】:2012-08-26 16:11:05
【问题描述】:
我在http://docs.oracle.com/javase/tutorial/networking/sockets/clientServer.html 关注 Oracle 的服务器端套接字教程。我使用他们提供的来源:
- http://docs.oracle.com/javase/tutorial/networking/sockets/examples/KnockKnockServer.java
- http://docs.oracle.com/javase/tutorial/networking/sockets/examples/KnockKnockProtocol.java
但是,当我尝试运行 KnockKnockServer 时,我得到一个 IOException,然后服务器打印
Could not listen on port: 4444.
我在 IOException catch 块中添加了一个e.printStackTrace(),并得到:
[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 错误?
【问题讨论】:
-
端口 4444 已被使用?
-
端口 4444 不是受保护的端口,因此您不需要 需要 root 访问权限。我认为该端口已在使用中。
-
命令
netstat -a | grep 4444返回什么? -
这是两个单独使用的命令:(1) netstat -a 将为您提供所有端口和服务 (2) grep 用于搜索从上述命令返回的所有内容字符串,其中包含文本 " 4444" 这意味着您可以获得使用 4444 的那些。
-
不,端口未使用。
netstat -a | grep 4444不返回任何内容。