IPアドレスの存在確認

解決


BCT  2007-08-22 03:15:13  No: 27476

よろしくお願いいたします。

TCP/IP接続数制限の回避の為に、IPアドレスの存在確認を行ってから、TCPコンポーネントをOPENしようかと思っています。
以下のもの以外で、よい方法案があれば教えてください。

案1. PINGを打つ → 結果が返るまで遅い(直接TCPをOPENした方がましっぽい)
案2. UDP(TMNUDPを利用)で通信後、TCPをOPENする → サーバアプリ起動中でも返信されないケースがある(WindowsNT Server//現在原因不明)

案2の解決方法も募集したいと思っております。
よろしくお願いいたします。

環境:Delphi4


BCT  2007-08-22 03:33:28  No: 27477

追記します。

下のコードは、案2確認用に作ったものです。
「返信されないケース」と書いてしまいましたが、下でいうところの「Test1」送信後、「Test2」が返ってこないということです。
NT Server側で起動している側のアプリで、DataReceivedイベントが起きていませんので、そもそも受信できていないというのが正しいですね。
すみません。
セキュリティソフトなどは利用していません。

よろしくお願いいたします。

procedure TForm1.FormCreate(Sender: TObject);
begin
  NMUDP1.LocalPort := 1234;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  C: array[0..7] of Char;
begin
  NMUDP1.RemoteHost:= '192.168.0.1';
  NMUDP1.RemotePort:= 1234;

  C:= 'Test1';
  NMUDP1.SendBuffer(C, Length(C));
end;

procedure TForm1.NMUDP1DataReceived(Sender: TComponent;
  NumberBytes: Integer; FromIP: String);
var
  C: array[0..7] of Char;
begin
  NMUDP1.ReadBuffer(C, NumberBytes);

  if C = 'Test1' then begin
    NMUDP1.RemoteHost:= FromIP;
    NMUDP1.RemotePort:= 1234;

    C:= 'Test2';
    NMUDP1.SendBuffer(C, Length(C));
  end;
end;


もにゃ  2007-08-23 03:51:14  No: 27478

目的の返答ではありませんが。
pingコマンドの存在目的を考えれば今回の目的を達成するには
案1が妥当だと思います。
結果が返るまで遅いといわれてますが、
単にタイムアウトの設定が長いだけのような気がします。


BCT  2007-08-23 18:48:39  No: 27479

もにゃさん、ありがとうございます。

確かにそうですね。
タイムアウトを短く設定して確認する方法で検討して見たいと思います。
気になる点としては、FWでPINGのみ返答が無い、みたいなケースくらいでしょうか。

なお、「返信されないケース」ですが、別のNT Workstationでも同じ結果だったので、TNMUDPがうまく動作しないのかな?などと疑ってみています。
2003server・XP・2000server・2000・98SEでは特に問題ありませんでした。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加