2012-03-27 20 views
6

ファイアウォールやルーターによってポートが無効になっている場合、ブラウザ(ブラウザ)でJavaScriptを検出できますか?クライアント側のJavaScriptでポートの可用性を確認するにはどうすればよいですか?

+2

どのようなJavascriptですか?ブラウザで?サーバー上で?どのような港?聞いたり接続したりするには?ローカルまたはリモート? – Thilo

+1

ブラウザで検出したい。たとえば、ポート843。 –

+0

私はフラッシュポリシーサーバを持っていますが、ポート843が利用できない場合、私はフラッシュアプ​​レットをロードしたくありません。 –

答えて

4

期待される応答があるかどうかだけがわかります。

JavaScriptを使用する場合、HTTPの境界にとどまっていなければなりません。

もちろん、サーバーのどのポートでもAjaxリクエストを送信してエラーが発生するかどうかを確認できます。現在のマシンのポートをチェックしたい場合は、おそらく "localhost:843"でリクエストを送信すると役に立ちます。

しかし、このエラーはその他の理由があり、必ずしもファイアウォールの問題ではない可能性があります。

あなたに役立つ情報がさらに必要です。

+0

私はフラッシュポリシーサーバを持っていますが、ポート843が利用できない場合、私はフラッシュアプ​​レットをロードしたくありません。 –

4

いいえ、純粋なjavascriptではこれはできません(特定のポートにHTTPリクエストを行うのとは異なり、結果はほとんど意味がありません)。ただし、外部から(つまりサーバーに)特定のポートが開いています。もう一つの選択肢は、もしあなたが本当にそれを必要とするならばあなたのためにこれを行うことができるJavaアプレットまたはブラウザのプラグインを使用することです。ただし、これはユーザーフレンドリーではありません。 (いずれにしても、必要な場所に正確なシナリオを記述すると便利です)

+0

私はフラッシュポリシーサーバを持っていますが、ポート843が利用できない場合、私はフラッシュアプ​​レットをロードしたくありません。 –

+0

その場合、私はフラッシュアプ​​レットをロードして、あなたのページへのコールバックを行い、それが機能しなくて、次にユーザーにフィードバックを提供するようアドバイスします(この場合は、javascriptではなく、 t)(そして、私は正確に何ができているのか、正確にはできないのか分かりません)。 –

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

関連する問題