首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

请问Address already in use: connect有关问题

2012-05-21 
请教Address already in use: connect问题我做了一个信息查询的东东,信息量大,大概一次500左右个,显示在一

请教Address already in use: connect问题
我做了一个信息查询的东东,信息量大,大概一次500左右个,显示在一个页面,并且每次要从数据库里查询这个信息是否有,如果有就做其他操作。但是经常出现以下这样的情况,不知道如何解决。从网上搜索也就是说说socket没有被释放什么的,请问应该如何释放???具体怎么做,谢谢!!! 
Caused by: java.net.BindException: Address already in use: connect 
at java.net.PlainSocketImpl.socketConnect(Native Method) 
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333) 
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195) 
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182) 
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:364) 
at java.net.Socket.connect(Socket.java:507) 
at sun.reflect.GeneratedMethodAccessor59.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:585) 
at net.sourceforge.jtds.jdbc.SharedSocket.createSocketForJDBC3(SharedSocket.java:304) 
at net.sourceforge.jtds.jdbc.SharedSocket. <init>(SharedSocket.java:255) 
at net.sourceforge.jtds.jdbc.ConnectionJDBC2. <init>(ConnectionJDBC2.java:310) 
... 50 more 
java.lang.NullPointerException 
at com.oper.ReservaOper.selectReservaRepeat(ReservaOper.java:204) 
at org.apache.jsp.Reserva.ReservationsAddNextWeek_jsp._jspService(ReservationsAddNextWeek_jsp.java:2478) 
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) 
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324) 
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292) 
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157) 
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:704) 
at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:590) 
at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:510) 
at org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:966) 
at org.apache.jsp.ReservationsAddNextWeekRun_jsp._jspService(ReservationsAddNextWeekRun_jsp.java:52) 
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) 
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324) 
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292) 
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214) 
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) 
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) 
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152) 
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) 
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) 


at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137) 
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118) 
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102) 
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) 
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) 
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929) 
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160) 
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799) 
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705) 
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577) 
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683) 
at java.lang.Thread.run(Thread.java:595) 
java.sql.SQLException: Network error IOException: Address already in use: connect 
at net.sourceforge.jtds.jdbc.ConnectionJDBC2. <init>(ConnectionJDBC2.java:385) 
at net.sourceforge.jtds.jdbc.ConnectionJDBC3. <init>(ConnectionJDBC3.java:50) 
at net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:182) 
at java.sql.DriverManager.getConnection(DriverManager.java:525) 
at java.sql.DriverManager.getConnection(DriverManager.java:171) 
at com.db.DB.db(DB.java:14) 
at com.oper.ReservaOper.selectReservaRepeat(ReservaOper.java:202) 
at org.apache.jsp.Reserva.ReservationsAddNextWeek_jsp._jspService(ReservationsAddNextWeek_jsp.java:282) 
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) 
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324) 
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292) 
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157) 
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:704) 
at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:590) 
at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:510) 
at org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:966) 
at org.apache.jsp.ReservationsAddNextWeekRun_jsp._jspService(ReservationsAddNextWeekRun_jsp.java:52) 
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) 
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324) 
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292) 
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214) 


at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) 
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) 
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152) 
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) 
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137) 
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118) 
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102) 
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) 
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) 
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929) 
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160) 
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799) 
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705) 
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577) 
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683) 
at java.lang.Thread.run(Thread.java:595)

[解决办法]
应该是端口已经被占用的问题..
查查端口是否已经被用了
[解决办法]
这里有个跟你一样的帖子 你看看吧
http://topic.csdn.net/t/20030122/15/1383348.html
[解决办法]
端口被占用,每次查询完把socket关闭,下次再打开试试
[解决办法]
短时间内new socket操作过多
而socket.close()操作并不能立即释放绑定的端口
而是把端口设置为TIME_WAIT状态
过段时间(默认240s)才释放(用netstat -na可以看到)
最后系统资源耗尽
(windows上是耗尽了pool of ephemeral ports 这段区间在1024-5000之间)

可以考虑增加端口数量来解决,不过你为何不考虑用Socket池呢?让一个Socket重复利用呢?

以下是修改方法
默认最大数量的短暂 TCP 端口为 5000 ' 适用于 ' 部分中包含产品中。 这些产品中已添加新参数。 要增加最大值是短暂端口, 请按照下列步骤操作:
1.
启动注册表编辑器。
2.
注册表, 中找到以下子项, 然后单击 参数 :
HKEY _ LOCAL _ MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
3.
在 编辑 菜单, 单击 新建 , 然后添加以下注册表项:
MaxUserPort 值名称:
值类型: DWORD
值数据: 65534
有效范围: 5000 - 65534 (十进制)
默认: 0x1388 5000 (十进制)
说明: 此参数控制程序从系统请求任何可用用户端口时所用最大端口数。 通常, 1024 的值和含 5000 之间分配临时 (短期) 端口。
4.
退出注册表编辑器, 并重新启动计算机。
注意 一个附加 TCPTimedWaitDelay 注册表参数决定多久关闭端口等待可以重用关闭端口。

[解决办法]
应用程序启动时,你建立了connection,但是在关闭应用程序时,你没有释放资源。应在资源不需要时调用connection.close()以释放资源。
[解决办法]

探讨
短时间内new socket操作过多
  而socket.close()操作并不能立即释放绑定的端口
  而是把端口设置为TIME_WAIT状态
  过段时间(默认240s)才释放(用netstat -na可以看到)
  最后系统资源耗尽
  (windows上是耗尽了pool of ephemeral ports 这段区间在1024-5000之间)

可以考虑增加端口数量来解决,不过你为何不考虑用Socket池呢?让一个Socket重复利用呢?

以下是修改方法
默认最大数量的短暂 TCP 端口为 5000 ' 适用于 ' 部分中包含产品中。 这些产品中已添加新参数。 要增加最大值是短暂端口, 请按照下列步骤操作:
1.
启动注册表编辑器。
2.
注册表, 中找到以下子项, 然后单击 参数 :


HKEY _ LOCAL _ MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
3.
在 编辑 菜单, 单击 新建 , 然后添加以下注册表项:
MaxUserPort 值名称:
值类型: DWORD
值数据: 65534
有效范围: 5000 - 65534 (十进制)
默认: 0x1388 5000 (十进制)
说明: 此参数控制程序从系统请求任何可用用户端口时所用最大端口数。 通常, 1024 的值和含 5000 之间分配临时 (短期) 端口。
4.
退出注册表编辑器, 并重新启动计算机。
注意 一个附加 TCPTimedWaitDelay 注册表参数决定多久关闭端口等待可以重用关闭端口。


[解决办法]
检查socket有没有关闭,请求一次关闭一次,在try catch后加个finally,在里面关闭socket。
不过你做的是查询,如果是从DB中取数据那么就要注意连接是否被关闭,还是后上面一样的方法,在finally中添加关闭,而且要按照连接的次序从小到大关闭。还有可能就是你的应用服务器出现异常后没有关闭,然后占用了端口,使你新开的服务器无法加载。

热点排行
Bad Request.