请教Address already in use: connect问题

腾飛 2009-09-11 05:52:28
我做了一个信息查询的东东,信息量大,大概一次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)
...全文
4345 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
yjflinchong 2012-05-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
短时间内new socket操作过多
而socket.close()操作并不能立即释放绑定的端口
而是把端口设置为TIME_WAIT状态
过段时间(默认240s)才释放(用netstat -na可以看到)
最后系统资源耗尽
(windows上是耗尽了pool of ephemeral ports 这段区间在1024-5000之间)

可以考虑增加端口数量来解决,不……
[/Quote]

紫竹大哥, 那这种高并发的访问中。 socket通信操作。 怎么才能及时关闭 释放呢?

我用cas 单点登录之后, 访问自己的网站测试的时候。 并发量高一点 。 异常就出来了。 怎么处理呢?

异常出来之后, cas退出 , 还是可以访问自己网站。 照理说退出后,就需要重新登录的。
sunny3791 2010-12-01
  • 打赏
  • 举报
回复
学习一下~~
丁丁不二 2009-09-14
  • 打赏
  • 举报
回复
检查socket有没有关闭,请求一次关闭一次,在try catch后加个finally,在里面关闭socket。
不过你做的是查询,如果是从DB中取数据那么就要注意连接是否被关闭,还是后上面一样的方法,在finally中添加关闭,而且要按照连接的次序从小到大关闭。还有可能就是你的应用服务器出现异常后没有关闭,然后占用了端口,使你新开的服务器无法加载。
腾飛 2009-09-14
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 jameskingding 的回复:]
检查socket有没有关闭,请求一次关闭一次,在try catch后加个finally,在里面关闭socket。
不过你做的是查询,如果是从DB中取数据那么就要注意连接是否被关闭,还是后上面一样的方法,在finally中添加关闭,而且要按照连接的次序从小到大关闭。还有可能就是你的应用服务器出现异常后没有关闭,然后占用了端口,使你新开的服务器无法加载。

[/Quote]

finally
{
try
{
if (rs != null)
{
rs.close();
}
if (ps != null)
{
ps.close();
}
if (con != null)
{
con.close();
}
} catch (SQLException ex)
{
ex.printStackTrace();
}
}
这是我的关闭方法,请问socket和异常如何关闭?
腾飛 2009-09-13
  • 打赏
  • 举报
回复
自己顶~~
bingshiliushui 2009-09-12
  • 打赏
  • 举报
回复
应用程序启动时,你建立了connection,但是在关闭应用程序时,你没有释放资源。应在资源不需要时调用connection.close()以释放资源。
腾飛 2009-09-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 java2000_net 的回复:]
短时间内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 注册表参数决定多久关闭端口等待可以重用关闭端口。

[/Quote]


我建了一个名为MaxUserPort的项,请问这些值在哪输入??小弟初学,请指教。


值类型: DWORD
值数据: 65534
有效范围: 5000 - 65534 (十进制)
默认: 0x1388 5000 (十进制)
youjianbo_han_87 2009-09-12
  • 打赏
  • 举报
回复
学习,标记。。。。。。。。。。。。。。。。。
config_man 2009-09-12
  • 打赏
  • 举报
回复
阿弥陀佛,老紫竹内功深厚...
海会圣贤 2009-09-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 java2000_net 的回复:]
短时间内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 注册表参数决定多久关闭端口等待可以重用关闭端口。

[/Quote]

能不能过防火墙哦?
feishare 2009-09-11
  • 打赏
  • 举报
回复
楼上详细,学习了
老紫竹 2009-09-11
  • 打赏
  • 举报
回复 1
短时间内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 注册表参数决定多久关闭端口等待可以重用关闭端口。
gesanri 2009-09-11
  • 打赏
  • 举报
回复
端口被占用,每次查询完把socket关闭,下次再打开试试
lihao1129 2009-09-11
  • 打赏
  • 举报
回复
这里有个跟你一样的帖子 你看看吧
http://topic.csdn.net/t/20030122/15/1383348.html
rookie001 2009-09-11
  • 打赏
  • 举报
回复
应该是端口已经被占用的问题..
查查端口是否已经被用了

81,116

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧