问题描述
服务端测试代码:publicclassSocketLancher{publicstaticvoidmain(String[]args)throwsException{ServerSocketss=newServerSocket(2659,50);while(true){}}}参数50为Server的连接队列,为便于异常出现,这里一直没有执行accept操作,当连接数大于50后,客户端的connect操作就会出现异常。经测试,将ServerSocket运行在windowxp,客户端抛出的异常为:java.net.ConnectException:Connectionrefused:connectatjava.net.TwoStacksPlainSocketImpl.socketConnect(NativeMethod)atjava.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)atjava.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)atjava.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)atjava.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)atjava.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)atjava.net.Socket.connect(Socket.java:579)atorg.gradle.socket.Client.run(Client.java:21)atjava.lang.Thread.run(Thread.java:724)而Server运行在linux上,客户端抛出的异常为:java.net.SocketTimeoutException:connecttimedoutatjava.net.PlainSocketImpl.socketConnect(NativeMethod)atjava.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)atjava.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)atjava.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)atjava.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)atjava.net.Socket.connect(Socket.java:579)atorg.gradle.socket.Client.run(Client.java:21)atjava.lang.Thread.run(Thread.java:724)具体是什么原因导致异常的不同?是jdk对不同操作系统做了不同的实现?还是jvm或系统级别的哪些设置导致的?哪位知道讲解一下吧,多谢!
解决方案
解决方案二:
你自己都说了,jvm在不同的系统有不同实现。jvm在他所支持的平台上的实现方式肯定是不一样的,比如windows的jvm显然不能到linux上去运行,这就是你在载jre的时候为什么要选择不同的版本的原因了。