openStreamで起きるタイムアウトを未然に防ぎたい

このQ&Aのポイント
  • openStreamで起きるタイムアウトを未然に防ぎたいシナリオについて説明しました。
  • プログラム実行時にa.comにアクセスできないとタイムアウト時間まで待ち続けてしまう問題に対する解決方法について尋ねました。
  • アクセス可能性のチェックには、a.comの実在とポート443の受け付け状態を確認する必要があることを示しました。
回答を見る
  • ベストアンサー

openStreamで起きるタイムアウトを未然に防ぎたい

こんにちは。 String url="https://a.com:443/dir1/a.txt"; URL u = new URL(url); u.openStream(); 上記のようなプログラムを実行した場合、a.comにアクセスできないとタイムアウト時間まで待ち続けてしまいます。 タイムアウトを設定するのも一つなのですが、タイムアウトまで待たなくてもアクセスできるかどうかを調べるような方法はないでしょうか。 アクセスできるかどうか、というのは具体的には ・a.comが実在するかどうか ・a.comがポート443を受け付けているかどうか の2点が分かること、だと思います。 よろしくお願いします。

  • Java
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • _ranco_
  • ベストアンサー率58% (126/214)
回答No.2

クライアントがタイムアウトまで待つのは当然であり、待たされるのは、 > a.comにアクセスできない 場合だけとはかぎりません。彼女が家からなかなか出てこないのは、病気とは限らない。服の着替えで手間取っているのかもしれない。クライアントにはいずれにせよ、この時点では理由は分からないから、待つのが礼儀。 クライアントがタイムアウトを設定するためには、無引数のSocketコンストラクタを使い、connect()の引数で指定します。readのタイムアウトは、setSoTimeout()で指定します。

oubokun
質問者

お礼

分かりやすい説明ありがとうございました。 何となく待たないといけないのかな~、ともやもやしていたのですが、それがはっきりして良かったです。 「タイムアウトを設定し、この時間待って応答がなかったら」という決めにします。

その他の回答 (1)

回答No.1

… Socket(String host,int port) でSocketを生成してみて、例外が発生したら… でも 「指定されたホスト上の指定されたポート番号に接続します。 」 とあるので結局「接続」してるので…

oubokun
質問者

お礼

回答ありがとうございました。 以下を試してみたのですが、やはりタイムアウトまで待ってしまいます。 Socket socket = new Socket("a.com", 443);

関連するQ&A

  • InternetExplorerでタイムアウトになってしまう

    インターネットのあるサイトだけ接続がタイムアウトになってしまいます。 以下の例えのURLで○○○○の部分はポート番号4桁が入っています。 http://www.****.co.jp:○○○○/***/***/***.S01 どうすれば接続できるようになるのでしょうか? 会社の端末はWin2000 IE6.0SP1でLAN,ローカルアドレスにはプロキシサーバーを使用する設定になっています。

  • VBタイムアウト

    タイムアウト、プールサイズの制限値 VB2010で業務アプリケーションの集計ツールを作成しています。 仕組みは単純で、下記の様にDateTimePicker(カレンダー)から日付を選び ボタンクリックでフォーム内のデータグリッド内に集計値が入っていく仕組みです。 'カレンダー日付選択 Sub Aggregate() '日付の取得 DateTimePicker1.Format = DateTimePickerFormat.Custom DateTimePicker1.CustomFormat = "yyyy-MM-dd 1つのフォームにデータグリッドが10個ほどあるので画面遷移までに5秒くらいかかってしまいます。 1度目の表示は問題ないのですが、日付を選択し直し2度、3度と実行すると ”タイムアウトに達しました。プールから接続を制限する前にタイムアウト期間が過ぎました。 プールされた接続がすべて使用中で、プールサイズの制限値に達した可能性があります。” と表示されてしまいます。開放も行っているつもりで原因がわかりません。 原因がわかれば教えていただきたいです。処理をスピードアップできる方法があればそれもお願いします。 接続文字は以下の通りです。 Function CONNECT(ByVal SqlText As String) As String Dim St As String Dim Cn As New System.Data.SqlClient.SqlConnection Dim SQL As New System.Data.SqlClient.SqlCommand Dim ServerName As String = "AAAAAAAAA" Dim UserID As String = "BBBBBBBBB" Dim Password As String = "CCCCCCC" Dim DatabaseName As String = "DB" Dim Adapter As New System.Data.SqlClient.SqlDataAdapter Dim Table As New DataTable Adapter.SelectCommand = SQL SQL.Connection = Cn SQL.CommandTimeout = 120 St = "Server=" & ServerName & ";" St &= "User ID=" & UserID & ";" St &= "Password=" & Password & ";" St &= "Initial Catalog=" & DatabaseName Cn.ConnectionString = St SQL.CommandText = SqlText Cn.Open() Return SQL.ExecuteScalar SQL.Connection = Nothing SQL.Transaction = Nothing SQL.Dispose() Cn = Nothing Cn.Dispose() Cn.Close() End Function データグリッドの転記は下記の様なコードをずらっと書いています。 DataGridView10(2, 3).Value = CONNECT("SELECT COUNT(*)" & _ " FROM dbo.IOTBL, dbo.APLTBL" & _ " WHERE APLTBL.APLID=IOTBL.APLID" & _ " And (APLTBL.APLTYPE='JA01')" & _ " And (APLTBL.DELETED<>'1')" )

  • javaについて>IEのクッキーを使いたい

    IEでログインした状態であれば、ヤフーメールなどクッキーを使うHPにアクセスできるかと思ったのですがアクセスできません。どうすればよいでしょうか? 多分、javaはIEのクッキーを利用していないのですよね・・・ 何とか、IEのクッキーを利用できれば良いのですが。何か、良いお知恵はありませんでしょうか? 宜しくお願い致します。 以下、コードです。 ーーーーーーーーーーーーーーーーーーーーーーー import java.io.*; import java.net.*; class Test { static String input() throws IOException { InputStream is = new FileInputStream("url.txt");//urlを入力 BufferedReader br = new BufferedReader(new InputStreamReader(is)); String str = br.readLine(); return(str); } static void read(String str) throws IOException { OutputStream os = new FileOutputStream("log.txt",true); BufferedWriter fr = new BufferedWriter(new OutputStreamWriter(os)); URL url = new URL(str); BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream(),"JISAutoDetect")); for (;;) { String i = in.readLine(); if(i == null) { break; } System.out.println(i + "\n"); fr.write(i + "\n"); } in.close(); fr.close(); } public static void main(String[] args) throws IOException { Test brow = new Test(); brow.read(brow.input()); } }

    • ベストアンサー
    • Java
  • time ./a.outについて(初心者)

    time ./a.outコマンドを使って プログラム実行時間を調べたのですが、 real、user、sysのそれぞれの意味がよくわかりません。 詳しく知っている方教えてもらえませんか? お願いします。

  • Ajaxでタイムアウトしてしまう

    こんにちは。始めまして。 現在、perl & Ajax(prototype.js)でプログラムを組んでいます。 大雑把に言うと、入力されたキーワードにヒットするURLをPerlのLWPでGoogleから拾ってきて、HTML中のIDにAjax.Updaterで表示するものです。 その際、大量のキーワード(例えば300個くらい)を使って検索する場合、Ajax.Updaterがタイムアウトしてしまいます。 <script> new Ajax.Updater('ggl1','hogehoge.pl',{parameters: '&q=キーワード1'}); new Ajax.Updater('ggl2','hogehoge.pl',{parameters: '&q=キーワード2'}); new Ajax.Updater('ggl3','hogehoge.pl',{parameters: '&q=キーワード3'}); new Ajax.Updater('ggl4','hogehoge.pl',{parameters: '&q=キーワード4'}); new Ajax.Updater('ggl5','hogehoge.pl',{parameters: '&q=キーワード5'});   (続く続く・・・) new Ajax.Updater('ggl300','hogehoge.pl',{parameters: '&q=キーワード300'}); </script> どのようにすれば、タイムアウトさせないように出来るのでしょうか? お分かりの方がいらっしゃいましたら、ご教授ください。

  • VB.netのタイムアウト方法について

    こんばんわ。 vb.netのTCP接続に関する質問になります。 Dim tcp_conect As New System.Net.Sockets.TcpClient(host, port) これを使用して接続しようと思うのですが、 エラー時やサーバに接続できないときのタイムアウト時間が長すぎるため、設定したいのですが、どのようにすればよいでしょうか? サンプルコードかURLのご紹介をお願いいたします。 もちろんこれ以外の方法でも構いません。 よろしくお願いいたします。 環境はWin7・vb.net2012 Expressになります。

  • Net::Telnetでタイムアウト時間が短い

    タイムアウト時間を確認するのに、以下のプログラムを実行したのですが、存在しないホストを指定してプログラムを実行しても3秒程度でタイムアウトしてしまいます。指定したタイムアウト時間(以下のプログラムでは100秒)待つにはどうすればよろしいでしょうか? お願いします OS:CentOS 5.1 perl: 5.8.8 Net-Telnet-3.03 ===== プログラム ===== #!/usr/bin/perl use Net::Telnet (); my $result; my $h = 'aa.bb.cc.dd'; my $u = 'my_name'; my $pass = 'my_pass'; my $p = '/[\$%#>] $/'; my $t = new Net::Telnet (Timeout => 100, Prompt => $p, Errmode => "return"); $result = $t->open($h); unless($result) { print "open ng\n"; exit; } else { print "open ok\n"; $t->login($u, $pass); print "login ok\n"; $t->print("exit"); }

    • ベストアンサー
    • Perl
  • [ターミナルでタイムアウトしてしまう]

    [ターミナルでタイムアウトしてしまう] ローカルでの開発環境を整えたいと思い、 ドットインストールというサイト(http://dotinstall.com/)で ”ローカル開発環境の構築”というレッスンを受講しているのですが、 ”#10 ターミナルから作業できるようにする”というレッスンにおいてターミナルからアクセスしようとする際に”Operation timed out”と表示されてしまいます。 こちらに関してなにか方法はあるのでしょうか? 当方プログラミング初心者なため技術的な単語はわからないですが、どなたかご教授頂けると幸いです。

  • Web ページのテキスト取得

    URL url = new URL("http://www.yahoo.co.jp/"); BufferedReader br = new BufferedReader( new InputStreamReader(url.openStream())); String str; while ((str = br.readLine()) != null) { System.out.println(str); とすればyahooのhtmlが出力されますが、日本語が文字化けします。 対策を教えてください。 また、yahooのようなページのテキスト(htmlタグを除く)だけを取得する方法を教えてください。

    • ベストアンサー
    • Java
  • java わからない。

    今、卒業研究でJAVAを扱っています。 しかし、思った動作をするプログラムが作れません。 時間もなくなってきたので、okwaveに投稿しました。 お願いします。 パソコンはwindowsです。 プログラムを実行すると, (1)コマンドプロセッサでdirを実行してくれる。 (2)実行した後にファイルにする。 実行するときは[dir > dir.txt]のようにしたいです。 今まで書いてきた例をいかに描きます。 import java.io.*; public class TestExec1 { public static void main(String[] args) { try { String s1 = "dir"; Process process = Runtime.getRuntime().exec(s1); InputStream is = process.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String line; while ((line = br.readLine()) != null) { System.out.println(line); } } catch (Exception e) { e.printStackTrace(); } } } どこが間違っているかわかりません。 よろしくお願いします。

専門家に質問してみよう