新换了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)
展开
 我来答
jamxval
2014-12-04 · TA获得超过6822个赞
知道大有可为答主
回答量:4308
采纳率:82%
帮助的人:1420万
展开全部

这个看起来很奇怪,想不明白为什么 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?
你的分析挺有道理,我先往随机端口这个方向查查
QQ520_8899
2014-12-04 · TA获得超过302个赞
知道小有建树答主
回答量:143
采纳率:0%
帮助的人:177万
展开全部
没有办法。换32位的系统吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式