新换了Win7系统, 用eclipse运行程序时全部报错,在XP系统中运行正常,是win7限制了
口吗?异常日志如下,不是端口占用问题,不要随便糊弄我。怎么解决,求高手指点!java.rmi.server.ExportException:Listenfailonpor...
口吗?
异常日志如下,不是端口占用问题,不要随便糊弄我。怎么解决,求高手指点!
java.rmi.server.ExportException: Listen fail on port:0; nested exception is:
java.net.SocketException: Unrecognized Windows Sockets error: 0: NET_Bind
at sun.rmi.transport.tcp.TCPTransport.listen(TCPTransport.java:286)
或
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:603) 展开
异常日志如下,不是端口占用问题,不要随便糊弄我。怎么解决,求高手指点!
java.rmi.server.ExportException: Listen fail on port:0; nested exception is:
java.net.SocketException: Unrecognized Windows Sockets error: 0: NET_Bind
at sun.rmi.transport.tcp.TCPTransport.listen(TCPTransport.java:286)
或
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:603) 展开
2个回答
展开全部
这个看起来很奇怪,想不明白为什么 XP 正常但 Win 7 不正常
使用 0 当端口号时,是表示让操作系统随机给一个端口号给它用。
所以这时候拿到什么端口是无所谓的。因些我在想,或许你可以先 new ServerSocket(); 拿到一个随机端口写之后再明确地传递给程序使用这个固定的端口号,这就不要让它去猜了。
这个使用 0 去拿一个随机端口的功能可能是只是某个 Java 类的功能,而不见得所有的地方使用 0 都表示拿一个随机的端口,或者说 Windows 本身并不允许端口 0。 Socket 这边能用 0 不见得 RMI 那边也可以用 0 嘛。
我在 Windows 7 64位上试了这个程序,能找到随机端口,那可能是 RMI 那边不能接受 0 当端口号,因此我们先用这个方法找到了随机端口之后再传递给它。这错误是 Windows 报告的,很可能是 Windows 本身不允许,而 ServerSocket 类确实使用另一个办法帮我们事先申请一个随机的端口,而 RMI 那边没有这样。
ServerSocket server = new ServerSocket(0);
int randomPort = server.getLocalPort();
System.out.println("Random port :" + randomPort);
server.close();
server = new ServerSocket(randomPort);
server.setReuseAddress(true);
server.accept();
追问
在代码中指定的是3069端口,不知道为什么日志中是端口0?
你的分析挺有道理,我先往随机端口这个方向查查
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询