1. 程式人生 > >Socket bind failed: [730048],tomcat啟動失敗

Socket bind failed: [730048],tomcat啟動失敗

嚴重: Error starting endpoint
java.lang.Exception: Socket bind failed: [730048] ?????????×???(Э?é/???????/???)????í??
 at org.apache.tomcat.util.net.AprEndpoint.init(AprEndpoint.java:649)
 at org.apache.tomcat.util.net.AprEndpoint.start(AprEndpoint.java:756)
 at org.apache.coyote.http11.Http11AprProtocol.start(Http11AprProtocol.java:137)
 at org.apache.catalina.connector.Connector.start(Connector.java:1095)
 at org.apache.catalina.core.StandardService.start(StandardService.java:540)
 at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
 at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:597)
 at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
 at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
2012-4-17 18:30:17 org.apache.catalina.core.StandardService start
嚴重: Failed to start connector [Connector[HTTP/1.1-8080]]
LifecycleException:  service.getName(): "Catalina";  Protocol handler start failed: java.lang.Exception: Socket bind failed: [730048] ?????????×???(Э?é/???????/???)????í??
 at org.apache.catalina.connector.Connector.start(Connector.java:1102)
 at org.apache.catalina.core.StandardService.start(StandardService.java:540)
 at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
 at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:597)
 at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
 at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)

出現以上的問題不要緊張,這個問題主要的原因是:tomcat的8080埠被佔用了。解決的步驟方法如下:

第一種方法:檢視埠。

      1.開始-執行-輸入cmd-netstat -ano-回車-查到8080埠的PID (linux下netstat -anp | grep :8080)
      2.通過Ctrl+Alt+Delete快捷鍵開啟Windows工作管理員-檢視-選擇列-勾選PID(程序識別符號)(P)-找到8080埠的PID-結束程序
        或開始-執行-輸入cmd-netstat -ano|find "8080 "-tasklist|find "PID "-askkill /pid PID

由於我出現上述的問題是由於剛剛安裝了oracle,Oracle中的 tnslsnr.exe程序佔用了8080埠(oracle\ora92\bin\TNSLSNR.EXE)。故將tnslsnr.exe的程序結束,重新執行tomcat中的專案,發現不能連線資料庫。對此我看了網上的一些資料,才知道:tnslsnr.exe   關掉後就不能通過網路方式連線資料庫了(本機通過JDBC連也不行),但在伺服器端還可以使用。如果你還想使用8080埠號又要能連線oracle資料庫,那只有改tnslsnr.exe的埠8080為其他的埠號。在網上找到資料如下:具體的可否使用還沒有測試,請原諒,希望後面的人測試了可以留言告訴一下後面的學習者,非常感謝。

以下修改tnslsnr.exe佔用8080埠的內容來自:pendy2008的博文

oracle 10服務一啟動 TNSLSNR.exe 會佔用8080埠,這時,需要改一下埠:
用oracle提供的包: 
-- 把HTTP/WEBDAV埠從8080改到8081 
SQL> call dbms_xdb.cfg_update(updateXML(dbms_xdb.cfg_get(), 
'/xdbconfig/sysconfig/protocolconfig/httpconfig/http-port/text()',8081)) 
/ 
-- 把FTP埠從2100改到2111 
SQL> call dbms_xdb.cfg_update(updateXML(dbms_xdb.cfg_get(), 
'/xdbconfig/sysconfig/protocolconfig/ftpconfig/ftp-port/text()',2111)) 
/ 
SQL> commit; 
SQL> exec dbms_xdb.cfg_refresh; 
-- 檢查修改是否已經成功 
SQL> select dbms_xdb.cfg_get from dual;

第二種方法:改tomcat中的埠。

        修改Tomcat 6.0\conf\server.xml,找到該檔案中的以下標籤內容。

<Connector port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443"  URIEncoding="UTF-8"/>

將port=“8080”改為其他埠。注意:不要使用伺服器端使用的熟知埠號,數值為0~1023,而數值為1024-49151的登記埠號是可以使用的,還有一類是客戶端使用的埠號---短暫埠號,數值為49152~65535,這類埠號是僅在客戶程序執行時才動態選擇的,是留給客戶程序選擇暫時使用。簡而言之,一般將埠該為8080左右的人一個埠號就可以了。但這種方法效果沒有第一種好,因為修改後的埠也存在被暫用的可能。

第三種方法:結束javaw.exe和java.exe程序

          出現這種情況也有可能是由於Myeclipse 不正常退出導致的,不過終於找到了一個可行的辦法。開啟工作管理員,找到名為JAVAW.EXE 和JAVA.EXE的程序(大小寫可能有不同),結束掉佔記憶體小的那個(佔記憶體大的那個為當前正在使用的myeclipse),重啟tomcat,問題解決。

第四種方法:取消tomcat的自動啟動

          假如你設定了tomcat開機時自啟動,在專案裡在啟動tomcat時就報了埠被佔用的錯誤。解決的辦法是把tomcat開機時啟動禁掉,重啟計算機,在專案裡啟動tomcat,基本上可以了