1. 程式人生 > >【SSH】Socket bind failed: [730048] ?????????×???(Э?é/???????/???)????í??,tomcat啟動失敗

【SSH】Socket bind failed: [730048] ?????????×???(Э?é/???????/???)????í??,tomcat啟動失敗

一、前言

      前一些日子學習SSH網上商城,小編也是一個二把刀,剛剛接觸了JAVA,用MyEclipse編輯的程式碼,執行後發現在
Console視圖裡面有很多的錯誤,其中第一個就是這個。根據以往的感受,都是要從第一個BUG開始處理,然後小編就可以對這個問題開始動刀~~~

嚴重: Failed to initialize end point associated with ProtocolHandler ["http-apr-8080"]
java.lang.Exception: Socket bind failed: [730048] ?????????×???(Э?é/???????/???)????í??
    at org.apache
.tomcat.util.net.AprEndpoint.bind(AprEndpoint.java:470) at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:650) at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:435) at org.apache.catalina.connector.Connector.initInternal(Connector.java:978) at org.apache
.catalina.util.LifecycleBase.init(LifecycleBase.java:102) at org.apache.catalina.core.StandardService.initInternal(StandardService.java:560) at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102) at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:838
) at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102) at org.apache.catalina.startup.Catalina.load(Catalina.java:642) at org.apache.catalina.startup.Catalina.load(Catalina.java:667) 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.load(Bootstrap.java:253) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:427) 2016-9-21 17:34:22 org.apache.catalina.core.StandardService initInterna

二、解決方法

      出現以上的問題不要緊張,這個問題主要的原因是: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為其他的埠號。在網上找到資料如下:具體的可否使用還沒有測試,請原諒,希望後面的人測試了可以留言告訴一下後面的學習者,非常感謝。

方法二:改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,基本上可以了

三、小結

      經過小編不斷的分析嘗試,最終方法四解決了我的問題,就是埠衝突了,一開機tomcat就執行,佔用8080埠,後來再執行伺服器就會有重複了。所以以後還是要多多留意。

       另外小編提示大家Tomcat的配置也是有意思的,所以關於Tomcat配置的技術,小編將會在下一篇部落格中分享。