2012-03-27 65 views
6

是否可以在JavaScript中(在瀏覽器中)檢測端口是否被防火牆或路由器禁用?如何檢查客戶端JavaScript中的端口可用性?

+2

什麼樣的Javascript?在瀏覽器中?在服務器上?什麼樣的端口?聆聽或連接?本地或遠程? – Thilo 2012-03-27 07:17:49

+1

我想在瀏覽器中檢測到它。例如端口843. – 2012-03-27 07:19:29

+0

我有一個Flash策略服務器,但如果端口843不可用,那麼我不想加載Flash小程序。 – 2012-03-27 07:33:57

回答

4

您只能看到預期響應是否存在。

使用javascript時,必須保持HTTP的邊界。

當然,您可以在服務器的任何端口上發送Ajax請求,並查看是否出現錯誤。如果你想檢查當前機器的端口,那麼可能在「localhost:843」上發送請求可能會有所幫助。

但錯誤可能是其他原因,並不一定是防火牆問題。

我們需要更多的信息來幫助你。

+0

我有一個Flash策略服務器,但如果端口843不可用,那麼我不想加載Flash小程序。 – 2012-03-27 07:34:41

4

不,用純javascript這是不可能的(除了向特定端口發出http請求,但這些結果意味着什麼),然而你可以做的是從外部(換句話說你的服務器)檢查是否特定的端口是打開的。另一種選擇是使用java applet或瀏覽器插件,如果你真的需要它,真的需要它,在這種情況下,你可能會使用各種開源工具,如果你有必要的經驗的話。但請注意,這不完全是用戶友好的。 (無論哪種方式,如果你需要描述確切的場景,你可能需要使用它,因爲這可能會有一個完全不同的解決方案)。

+0

我有一個Flash策略服務器,但如果端口843不可用,那麼我不想加載Flash小程序。 – 2012-03-27 07:56:42

+0

在這種情況下,我會建議您加載Flash小程序,並在頁面無法正常工作時進行回調,然後向用戶提供反饋(在這種情況下,它是關於Flash功能的,而不是JavaScript,可能)(我不知道閃光燈是什麼,不可能閃光燈)。 – 2012-03-27 08:13:42

3

如果您足夠靈活地使用jQuery,請參閱此Answer by me。這不僅將檢查端口的可用性,而且還將檢查成功響應代碼200是否來自遠程(或任何,我的意思是它也支持跨域)服務器。此處也提供解決方案。我將在這裏檢查端口843.

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
     <script type="text/javascript" src="jquery-1.7.2-min.js"></script> 
    </head> 
    <body> 
     <script type"text/javascript"> 
      var isAccessible = null; 
      function checkConnection() { 
    /*make sure you host a helloWorld HTML page in the following URL, so that requests are succeeded with 200 status code*/ 
       var url = "http://yourserverIP:843/test/hello.html" ; 
       $.ajax({ 
        url: url, 
        type: "get", 
        cache: false, 
        dataType: 'jsonp', // it is for supporting crossdomain 
        crossDomain : true, 
        asynchronous : false, 
        jsonpCallback: 'deadCode', 
        timeout : 1500, // set a timeout in milliseconds 
        complete : function(xhr, responseText, thrownError) { 
         if(xhr.status == "200") { 
          isAccessible = true; 
          success(); // yes response came, execute success() 
         } 
         else { 
          isAccessible = false; 
          failure(); // this will be executed after the request gets timed out due to blockage of ports/connections/IPs 
         } 
        } 
       }); 
      } 
      $(document).ready(function() { 
       checkConnection(); // here I invoke the checking function 
      }); 
     </script> 
    </body> 
</html> 
+0

這提示我看看這個方法是否會應用於我在試圖ping一個端口時可能沒有監聽器的問題。問題是,當沒有監聽者時,即使在try/catch中包裝xhr請求時,Chrome也總是記錄錯誤。不是一個殺手,但仍然很醜。通過刪除成功和錯誤塊並處理完整塊中的響應,就像在這裏所做的那樣,我們避免了控制檯消息!我仍然可以通過異步調用來做到這一點。感謝代碼。 – likestoski 2014-01-30 15:34:50

相關問題