• ベストアンサー

[Delphi] Socketのエラーを抑制する方法

バックグラウンドで動作して、インターネットからWebの新着情報を持ってきて画面の隅に表示するというアプリケーションをDelphi + TClientSocketで作成しています。 フォーム作成時 : ClientSocket1.open; 接続時 : ClientSocket1.socket.sendtext(リクエスト内容); 受信時 : フォームの情報を更新 タイマー : 一定時間おきに接続イベントを発生 そこで質問なのですが、ネットに繋がっていない等でDNS参照に失敗すると 「Windowsソケットエラー API ASync Lookup」 と、APIからエラーが返ってきます。一定時間おきにチェックするので、非接続時にこれが毎回出てくるとうざいということで、接続失敗しても黙っているように変更したいのですが、どのようにしたら良いのでしょうか・・・。 TClientSocketのヘルプが無くてわかりませんでした(汗

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

  • ベストアンサー
回答No.2

ClientSocketのイベント「OnError」にて、「ErrorCode:=0;」を設定してください。 以前私も苦労したことがあります。

pythian
質問者

お礼

これを設定しないとエラーが出てしまうんですね。 試したところ、成功しました。ありがとうございます!

その他の回答 (1)

  • honiyon
  • ベストアンサー率37% (331/872)
回答No.1

こんにちは、honiyonです。  tryとexceptを使うと幸せになれると思います。  参考になれば幸いです(..

pythian
質問者

補足

try - exceptはDelphiが生成した例外を捕えるものだと思っていたのですが、 ただのAPIのエラーだと思って試していませんでした。 (デバッガが例外で停止しないオプションになっていたので気づきませんでした) そこで、ClientSocket1.open;の部分だけtryして、exceptで プログラムを終了するようにしてみたのですが、変化はありませんでした。 もう少し調べてみます。早速のアドバイスありがとうございます。

関連するQ&A

  • Delphiでエラーが出ます

    Borland Delphi6 を学校の課題で使用しています。 授業でしか触れていないため プログラミングは本当に初心者です。 プログラムを完成させていざ実行を押すと [致命的エラー] ファイル”~.dcu”が作成されません と表示されてしまいます。 プログラムの中身には問題はないはずです。 以前うまくいったプログラムを コピーして貼り付けても実行できませんでしたので… 考えられる原因はなんでしょうか? 情報が少なくて答えづらいかと思いますが、 なにか解決策があればご教授願います。 なにかあれば尋ねてくだされば 補足しますのでよろしくお願いします。

  • DelphiのOKボタンのイベント処理

    はじめまして。Delphiを初めて数ヶ月の初心者なんですが、 わからないことがありますので教えてください。 フォームにOKボタンとCancelボタンを作成し、 OKボタンが押されたときのOnClickイベントでエラーチェックをして OKならフォームClose NGならCloseしない という操作がしたいのですが、後者のやり方がわかりません。 よろしくお願いします。

  • Delphiでyacscom.dllを使いたい

    Delphi6を使用してType Libより、Yahoo! Audio Conferencing(yacscom.dll)を使用してみようと思ったのですが、エラーになってしまいます。 タイプライブラリからのYACSCOMLib_TLB.pas書き出しはメニューから実行し完了します。それをパッケージに登録も問題はありません。 新規アプリを開き、追加したコンポーネントTYAcsをフォームに置こうとすると「インターフェイスがサポートされていません.」と表示されてしまいます。 同じコンポーネントをVB6で使おうとした場合は、フォームに貼り付けでき使えそうです。 ちなみに、Delphi2010でも確認しましたが、同じ結果です。 yacscom.dllは、ヤフーメッセンジャーV7インストール時に導入されるものを対象で考えています。 Delphiで使えるようにできる方法があれば知りたいと思い、ここに書き込みさせていただきました。判られる方が居られましたら、よろしくお願いします。

  • delphi7でAlt+Tabでのフォームの切替について

    現在、delphi7 + interbase7でC/Sシステムを開発しています。 複数のフォーム(form1,form2,form3・・・)を立ち上げて、それを、WindowsAPIのAlt+TabでそれぞれActiveになっているフォームの切替を行いたいのですが、作成の糸口がつかめず、 大変困っています。 感じとしては、Windowsの標準の機能で、Alt+Tabキーで実行中のアプリを切り替えられると思うのですが、 それと同じような動きをDelphiの中で実現できたらなと考えています。 経験者の方、もしくは何か情報を知っている方がいましたら、ご教授お願いします。

  • androidのsocketエラー

    androidのソケット通信プログラムを作成しています。 何度もソケットの接続・切断を繰り返していると、以下のエラーが発生します。 Socket.connect メソッド(接続)で発生しています。 socketは毎回.closeメソッドで切断しています。 このようになると、端末を再起動しない限りソケット接続を再度行なうことはできない模様です。このエラーの発生理由がわかりません。お詳しい方おられましたら何卒よろしくお願いします。 ちなみに利用しているandroid端末はKYL21(京セラ androidバージョン4.0.4)です。 01-09 09:06:46.418: W/System.err(29936): java.net.ConnectException: failed to connect to /192.168.10.12 (port 50000): connect failed: ENOBUFS (No buffer space available) 01-09 09:06:46.418: W/System.err(29936): at libcore.io.IoBridge.connect(IoBridge.java:114) 01-09 09:06:46.418: W/System.err(29936): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192) 01-09 09:06:46.418: W/System.err(29936): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:460) 01-09 09:06:46.418: W/System.err(29936): at java.net.Socket.connect(Socket.java:838) 01-09 09:06:46.418: W/System.err(29936): at java.net.Socket.connect(Socket.java:791) 01-09 09:06:46.418: W/System.err(29936): at com.example.simple_test.Wifi_Service.Socket_Connect(Wifi_Service.java:2033) 01-09 09:06:46.428: W/System.err(29936): at com.example.simple_test.Wifi_Service$10.run(Wifi_Service.java:1938) 01-09 09:06:46.428: W/System.err(29936): Caused by: libcore.io.ErrnoException: connect failed: ENOBUFS (No buffer space available) 01-09 09:06:46.428: W/System.err(29936): at libcore.io.Posix.connect(Native Method) 01-09 09:06:46.428: W/System.err(29936): at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:85) 01-09 09:06:46.428: W/System.err(29936): at libcore.io.IoBridge.connectErrno(IoBridge.java:127) 01-09 09:06:46.428: W/System.err(29936): at libcore.io.IoBridge.connect(IoBridge.java:112) 01-09 09:06:46.428: W/System.err(29936): ... 6 more

  • wingateで、アクセスが集中すると"Socket Error"となる。

    お世話になっております。 wingateを経由してインターネットに接続していますが、アクセスが集中すると(10台くらい)、とたんにブラウザの表示に時間がかかり、結局"Socket Error"が表示されます。 環境は ・wingateのバージョンは4.5.2(50ユーザー版) ・OSはWindows2000Pro ・接続クライアントは約100台 です。特別な設定は何もしていませんが、何か必要なのでしょうか?

  • IO::Socketでacceptを実行すると待機状態になる

    IO::Socketを使って、accept();を実行すると接続があるまでずっと待機状態になってしまいます。 調べたところ、これはaccept()の仕様だという事は分かったのですが、これをなんとかして一定時間たったらあきらめる。という風には出来ないのでしょうか?

    • ベストアンサー
    • Perl
  • PerlでHTML取得(その前にSocket取得)できない原因について

    下記コードを使い WEBサイトの更新日付を取得したいのですが 実行すると Socket Error:Invalid argument のエラーが表示されソケットの作成に失敗します。 Perlのバージョンは 5.8.0でウィルス対策ソフト停止後のコード実行等対策等を考えて行いましたが状況は改善されません。 よければ、どうしてソケットの作成に失敗するのか教えていただけないでしょうか? 失敗テストケース $host:www.google.co.jp # テストコード # モジュールの使用宣言 use IO::Socket; # URLを入力 $ur1 = <STDIN>; # URLをホスト名とファイルパスに分割 chomp($ur1); if ($ur1 =~ /http:\/\/([^\/]+)(\/.*)/) { $host = $1; $file = $2; } else { die "そのURLには対応していません。\n"; } # ソケットオブジェクト作成 $client_socket = new IO::Socket::INET { PeerAddr => $host, PeerPort => 'http', Proto => 'tcp', TimeOut => '5' }; unless ($client_socket) { print "Socket Error:$!\n"; } # 入力をサーバーに送信 print "$host $file" . "\n"; print $client_socket "GET $file HTTP/1.0\n\n";

    • ベストアンサー
    • Perl
  • tcpip_socketの設定をするとpostgres起動時にエラーになる。

    開発によるテストで外部からtcp/ip接続を行いたいので、 tcpip_socket = true という項目をpostgresql.confに追加してみましたが、 postgres起動時に以下のようなエラーにり起動できません。 起動時のコマンド: pg_ctl -D /usr/local/pgsql/data start -w -o "-S -i" エラー: FATAL: unrecognized configuration parameter "tcpip_socket" postmaster (PostgreSQL) 8.1.9 何か原因分かりますでしょうか。

  • PerlでIO::Socket::INET: connect: Unknown errorについて プロキシ設定?

    PerlでIO::Socket::INET: connect: Unknown errorが発生します。IEを使う時でもインターネットに接続する場合、プロパティで192.168.1.1を設定しておりますが、 プロシキ接続できる、設定方法はあるのでしょうか?

    • ベストアンサー
    • Perl