Javaプログラムで、ネットワーク上に同じIPアドレスが
存在していないかを確認したいとおもっています。

JavaではICMPレベルについてサポートしていないとのことで、
ネイティブのコマンドを利用しようと思い、以下のようにソースを書いてみました。

 try
 {
  // xxx.xxx.xxx.xxxはあるかどうか調べたいIPアドレス
  Process proc = Runtime.getRuntime().exec("ping xxx.xxx.xxx.xxx");
  proc.waitFor();
  int value = proc.exitValue();
  if(value == 0)
  {
   //正常
  }
  else
  {
   //異常終了
  }
 }
 cache(Exception e){}

IPアドレスが存在するときはproc.exitValue()の戻り値が0で、
存在しないときには0以外かと思ったのですが、
どうやらIPアドレスが存在はしていても、pingコマンドが正常に終了さえすれば
0が返ってきてしまうようです。

そこで戻りを一行ずつ読みこんで解析しようかとおもったのですが…、
どの文字が含まれていればネットワーク上に
IPアドレスxxx.xxx.xxx.xxxが含まれているかを判断できるのかがわかりません。

どのWindows上でも、IPアドレスの存在を確かめるには、どうしたらよいのでしょうか?

JavaというよりはWindows?の問題?かとおもったのですが、
Windows上でDOSから実行する分には、
人間が目視して確かめればいいだけだとおもうので、
プログラムが使用する場合にもつかえるpingコマンドを知りたいのです。
よろしくおねがいします。


使用JVM SDK1.3.1_02
使用OS Windows95,Windows98,Windows2000,WindowsMeすべてで共通に動かしたい

このQ&Aに関連する最新のQ&A

A 回答 (2件)

最近,javaからpingを投げることに頭を抱えてます.


この質問ってもう完了してしまったのでしょうか.
もし,情報ありましたらお願いいたします.

ちなみに僕の場合は
Process proc = Runtime.getRuntime().exec("ping xxx.xxx.xxx.xxx");
proc.waitFor(); ←ここで応答が来ません

Process proc = Runtime.getRuntime().exec("ping xxx.xxx.xxx.xxx > ping.log");
の場合は「Bad Parameter」とのメッセージが戻ってきています.

BufferedReader br = new BufferedReader(new InputStreamReader(proc.getInputStream()));
br.readLine();
で戻ってきた内容を見ています.

よろしくお願いします
    • good
    • 0

PINGで応答がある場合。


C:\>ping 127.0.0.1

Pinging 127.0.0.1 with 32 bytes of data:

Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128

Ping statistics for 127.0.0.1:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms

C:\>
応答がない場合。
C:\>ping 1.1.1.1

Pinging 1.1.1.1 with 32 bytes of data:

Request timed out.
Request timed out.
Request timed out.
Request timed out.

Ping statistics for 1.1.1.1:
Packets: Sent = 4, Received = 0, Lost = 4 (100% loss),
となります。
Runtime.getRuntime().exec("ping xxx.xxx.xxx.xxx > /tmp/ping.log");
等と記述して、ファイルの内容を見てはいかがですか。
Request timed uot.がpingで応答のなかった場合です。

この回答への補足

ありがとうございます。
お返事が遅れてごめんなさい。

えっと…。Request timed out.は
Windowsシステムすべてで共通といいきっていのでしょうか?
結果によって次の処理に自動的にふりわけたいのですが、
Request timed uot
をキーワードにすると、
ping 255.255.255.255とかのときには適応できないですよね…

補足日時:2002/04/10 08:16
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qベット・ミドラーの「From A Distance」について

ベット・ミドラーの「From A Distance」は洋画の挿入(エンディング)曲だったでしょうか?
以前、日本のドラマで流れていたそうですが、それではなく、映画で使用されたかどうか、できれば映画タイトルも知りたいです。
よろしくお願い致します。

Aベストアンサー

とてもよい曲です。ベット・ミドラーの「From A Distance」はベストで発表された曲です。所有している“FOR THE BOYS” のサウンドトラックCD(AMCY-340)を確認しましたが含まれておりません。他の出演作にも使われたことは無いようです。

参考URL:http://www.hmv.co.jp/product/detail/33809

Qclass Test_A {  main(){}}の実行順序は?

public class Test_A {
public static void main(){

int a = 0;
int b = 1;

}
}
例えば上のようなサンプルで何故 main()がクラスTest_A の中に挟まっているのでしょうか?実行順序としては main()が終了したら、クラスTest_A の方はどうなるのでしょうか? main()からプログラムが始まるのは分かるのですが、その後の動作が分かりません。よろしくお願いします。 

Aベストアンサー

>main()がクラスTest_A の中に挟まっているのでしょうか

Javaは、全てのプロパティ、メソッドはどこかのクラスに属していないといけないからです。
mainメソッドであっても例外ではありません。

>main()からプログラムが始まるのは分かるのですが、その後の動作が分かりません。

これを考える上で最も重要なのはmainメソッドがstaticであることです。
staticなメソッドは、そのクラスのインスタンスを作らなくても、
つまり、new Test_A();としなくても実行することが可能です。
プログラム実行時には、Test_Aクラスのインスタンスは生成されません。
質問のコードでは変数a,bに値が代入され、それで終わりです。

Javaでは、(正確にはJavaVMは)実行するclassファイルにある、
String[]引数を持ったvoid mainメソッドを実行する仕様になっています。
しかし、mainメソッドを実行するときには何のインスタンスも生成されていないので、
何かのインスタンスのメソッドを実行することはできません。
なので、staticなメソッドでないとJavaVMが実行できないのです。
さらに、JavaVMからアクセス可能なスコープを与える必要があるので、
publicである必要もあるのです。

あとは、そのmainメソッドに指定されたコードを実行し、mainメソッドの最後まで処理が進んだら
そこでJavaVMが終了し、プログラムも終了します。

※細かい話ですが、main()からプログラムは始まりません。
正確に言うと、引数なしのmain()メソッドは他のメソッドと何ら代わりがありません。
プログラムを始めるには、
アクセススコープがpublicで、staticな戻り値のなく、引数にString配列を取るmainメソッド
であることが必要です。つまり、
public static void main(String[] args)
とするのが通常です。
試しに質問のコードをjavaコマンドで実行すると、NoClassDefFoundErrorが出るはずです。

>main()がクラスTest_A の中に挟まっているのでしょうか

Javaは、全てのプロパティ、メソッドはどこかのクラスに属していないといけないからです。
mainメソッドであっても例外ではありません。

>main()からプログラムが始まるのは分かるのですが、その後の動作が分かりません。

これを考える上で最も重要なのはmainメソッドがstaticであることです。
staticなメソッドは、そのクラスのインスタンスを作らなくても、
つまり、new Test_A();としなくても実行することが可能です。
プログラム実行時...続きを読む

QFrom a Distanceを歌っているのは誰?

以前、JFN系列のFMラジオ番組で、Radio Japanというのがありましたが、そのなかで使われていたFrom a Distanceという曲の歌手が知りたいのですが…
いろいろ調べて、ベットミドラーでないことは判ったのですが、それ以上は調べきれません…
ご存知の方、ご回答宜しくお願いします!

Aベストアンサー

【From a Distance】
この曲は1990年にBette Midlerが歌って有名になりましたが、
元の曲は1987年にNanci Griffithの作曲でJulie Goldが歌った曲です。
カバーした歌手は大変多いですね。
Vicky Leandros (1995)、Anthony Ventura(1992)、
Cliff Richard (1994)、Elaine Paige(1998)、
Harajuku(1995)、James Galways(1999)、
Kathy Mattea(1991)、Phil Coulter(1994)等ですね。
試聴できるものを紹介します。
Julie Gold
http://www.hmv.co.jp/product/detail/174269

Bette Midler
http://www.hmv.co.jp/product/detail/14024

Nanci Griffith
http://www.hmv.co.jp/product/detail/270728

Cliff Richard
http://www.hmv.co.jp/product/detail/2537179

Pf Sloan
http://www.hmv.co.jp/product/detail/1257335

Nanci Griffith
http://www.hmv.co.jp/product/detail/1975293

Travers & Appice
http://www.hmv.co.jp/product/detail/1795083

Michael Ball
http://www.hmv.co.jp/product/detail/509801

【From a Distance】
この曲は1990年にBette Midlerが歌って有名になりましたが、
元の曲は1987年にNanci Griffithの作曲でJulie Goldが歌った曲です。
カバーした歌手は大変多いですね。
Vicky Leandros (1995)、Anthony Ventura(1992)、
Cliff Richard (1994)、Elaine Paige(1998)、
Harajuku(1995)、James Galways(1999)、
Kathy Mattea(1991)、Phil Coulter(1994)等ですね。
試聴できるものを紹介します。
Julie Gold
http://www.hmv.co.jp/product/detail/174269

Bette Midler
http://www.hmv....続きを読む

Q"try{}catch(){}"文で"close()"はどのように書けばよいのでしょうか。

こんにちは、片岡と言います。

プログラム1は、Java言語で学ぶデザインパターン入門(結城浩さん著)の
433ページを参考にして書きました。

私は、プログラム1のclose()の書き方よりもプログラム2のようなclose()の書き方が、
良いと思っています。
なぜならば、プログラム1では、out.writeObject(memento)行の例外によって、
close()が実行されないからです。

私のこの考え方は正しいのでしょうか。
もっと良いclose()の書き方はあるのでしょうか。
ご存知の方はいらっしゃいませんか。

●プログラム1
public class Main {
public static void saveMemento(Memento memento) {
try {
ObjectOutput out = new ObjectOutputStream(new FileOutputStream("game.dat"));
out.writeObject(memento);
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
… //以下略
}

public class Memento implements Serializable {
… //以下略
}


●プログラム2
public class Main {
public static void saveMemento(Memento memento) {
try {
ObjectOutput out = new ObjectOutputStream(new FileOutputStream("game.dat"));
out.writeObject(memento);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (out != null) {
try {
out.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
}
… //以下略
}

public class Memento implements Serializable {
… //以下略
}


なお、私の環境は以下の通りです。
OS: Microsoft Windows XP Professional SP2
開発環境:Eclipse 3.2.2
java: java version "1.4.2_13"

こんにちは、片岡と言います。

プログラム1は、Java言語で学ぶデザインパターン入門(結城浩さん著)の
433ページを参考にして書きました。

私は、プログラム1のclose()の書き方よりもプログラム2のようなclose()の書き方が、
良いと思っています。
なぜならば、プログラム1では、out.writeObject(memento)行の例外によって、
close()が実行されないからです。

私のこの考え方は正しいのでしょうか。
もっと良いclose()の書き方はあるのでしょうか。
ご存知の方はいらっしゃいませんか。

●プロ...続きを読む

Aベストアンサー

>私のこの考え方は正しいのでしょうか。
正しいです。質問者さんが書かれているやり方が一般的です。
念のため書いておきますが、outをtryの外で宣言しないとコンパイルが通りません。

まぁ、あくまでデザインパターンを学ぶための本ですから、細かなコーディングについて気にする必要はないでしょう(疑問を持つことは良いことですが)。

Qin the distance と at a distance の違い

in the distance と at a distance の違い。

鬼塚のミラクル英文108で

in the distance と at a distance について、

(1)in the distance「遠くの[に]」
(2)at a distance「少し離れたところの[に]」


「ときどぎ遠くにあるものを見て、目を休ませましょう」
→It's a good idea to rest your eyes by looking at something in the distance.

「少し離れたところに、私は非常によく知っている男が、私の方向に向かってくるのが目に入りました」
→I saw, at a distance, a man I know very well heading in my direction.

との文例を示し、
「定冠詞theと不定冠詞aの違いに注目して覚える。」
とのことが書かれているのですが、
両者の違いがよく分かりません。

私が知っている知識としては、
定冠詞theは話し手と聞き手、若しくは書き手と読み手の両者が共通認識を持てる。
不定冠詞aは多くのものの中の任意の一つ。
ということだけなのですが、in the distance と at a distance の違いが分かりません。

丸暗記ではなく、単語のイメージを基に理解する方法があるようでしたら、
教えてください。

in the distance と at a distance の違い。

鬼塚のミラクル英文108で

in the distance と at a distance について、

(1)in the distance「遠くの[に]」
(2)at a distance「少し離れたところの[に]」


「ときどぎ遠くにあるものを見て、目を休ませましょう」
→It's a good idea to rest your eyes by looking at something in the distance.

「少し離れたところに、私は非常によく知っている男が、私の方向に向かってくるのが目に入りました」
→I saw, at a distance, a man I know very well heading i...続きを読む

Aベストアンサー

a と the は非常にややこしいようですが、a はいくつでもある不特定のものを言います。一方、the は特定の一つもものを言います。the sun, 家の玄関(the door),家の中の冷蔵庫 the refrigerator話題になった the boy, the man など。同じ概念で、in the center, in the middle(中心に、真ん中に)on the left, right などがあります。真ん中、左、右も一つの概念です。同様に in the
distance (遠くにある、遠くの)も一つの概念です。つまりどのくらい離れているかを問うてはいません。in は『遠くにある』とその範囲を表しています。in the garden, in my room と同じようにthe distance の範囲に含まれものを指しています。
a castle in the distance 遠くにある城、a ship in the distance 遠くの船、など。
一方 at は点、地点などを表しています。その地点は不特定であるので at a distance となります。
つまり自分からの距離を表しています。その意味から離れたところ(遠くではなくて)自分からある距離離れているところという意味です。

at a distance of 10meters 10メートルはなれば場所
a man standing at a distance 少し離れたところに立っている人

in the distance (自分からどのくらい離れているかは関係なく)遠くに
at a distance (自分からどのくらい離れているかが問われている)離れたところに

a と the は非常にややこしいようですが、a はいくつでもある不特定のものを言います。一方、the は特定の一つもものを言います。the sun, 家の玄関(the door),家の中の冷蔵庫 the refrigerator話題になった the boy, the man など。同じ概念で、in the center, in the middle(中心に、真ん中に)on the left, right などがあります。真ん中、左、右も一つの概念です。同様に in the
distance (遠くにある、遠くの)も一つの概念です。つまりどのくらい離れているかを問うてはいません。in は『遠くにある』...続きを読む

Q{}の意味は

Javaでメソッドの宣言等ではなく、
{}
を書くと、どういう意味があるのでしょうか?

Aベストアンサー

ブロックですよね。
http://www.y-adagio.com/public/standards/tr_javalang/14.doc.htm#24644

ブロック内で宣言した変数はブロック外では参照できません。
たとえば、
public static void main(String[] arg){
{
int i = 0;
}
System.out.println(i); //コンパイルエラー
}
になります。

{}は普段のプログラミングでもよく使っていると思います。
if文やfor文などと一緒に。
if(true) {
//ここをifブロックと言ったりしますよね
}

Qdistinguish A from B

僕のレベルでは、distinguish A from B 「AとBを区別する」= tell A from B = know A from B という風に同列に暗記してるだけなんですけど、これらは実際どんな意味の違いがあるのですか?どんな風に使い分けられているのですか?

Aベストアンサー

distinguish A from B
→このdistinguishは、もともと「突き刺す」という意味の言葉から出来た語で、突き刺して分離するという意味を持っていました。つまり、はっきり、切り裂いてAとBを区別する、見分ける、識別するという意味です。
このような区別する意味を含む動詞なので
distinguish A and Bとも言えますが、tell, knowでは言えません。

tell A from B
tellの中心的な意味は、情報を伝えるということです。Aという情報をBから(違うものとして)伝えるということから、AとBの違いを言う、違うと伝えるということで、AとBを区別して伝えるということになります。この場合、意味上、どうしても通常can, be able toなどと共に使うことになります。

know A from B
こちらは、通常、否定文、疑問文で用います。たとえば、
He doesn't know good music from grunge. 彼はよい音楽とくだらい音楽の区別ができない。
こちらは、知っている状態を表すknowを用い、いい音楽がわかっていないーーgrungeと区別してーーというような意味になります。あまり区別という感じがしない表現です。むしろ、いい音楽がわかっていないーーということの延長のようにfrom grungeを付け足している感じです。
ですから、
She didn't know me from Adam.
は、彼女は私のことを知らなかったーーアダムと区別できないーーアダムとイブのアダムですがーー
She didn't know me at all. の意味になります。つまり
not know A from Bは
not know Aという言い方を強めて言っている感覚です。

以上、ご参考になればと思います。

distinguish A from B
→このdistinguishは、もともと「突き刺す」という意味の言葉から出来た語で、突き刺して分離するという意味を持っていました。つまり、はっきり、切り裂いてAとBを区別する、見分ける、識別するという意味です。
このような区別する意味を含む動詞なので
distinguish A and Bとも言えますが、tell, knowでは言えません。

tell A from B
tellの中心的な意味は、情報を伝えるということです。Aという情報をBから(違うものとして)伝えるということから、AとBの違いを言う、違うと伝えるとい...続きを読む

Qreturn {c : c, h : h}について

私以外が作ったjavascriptプログラムでこのように書かれていました。

var h = null;
var c = null;
//省略
return {c : c, h : h}

このreturn文のところの意味を知りたいのです。
{x : x, y : y}という形式でプログラムすると、
どのような条件として判断されるのでしょうか?

このプログラムの意味が分かりませんでした。
もしよろしければ、教えて頂けませんか。
よろしくお願い致します。

Aベストアンサー

まず、Objectの表記方法はご存知ですか?
var o={a:1, b:2, c:"3"}
とかいう表記はObjectを表し、
alert(o.a)
という形で、プロパティを呼び出したり、という使い方があります。

なんてのは、「javascript オブジェクト初期化子」で検索していただくとして、


本題。
仕様上、functionは1個または0個の戻り値しか返せません。
  例:function f(){return 1;return 2;} はreturn 1が実行された時点で終了。
ですが、2個以上の戻り値が必要になることもあり、(人それぞれ?)
  例:角度を指定し、sin と cos の両方の値を返したい
    画像の縦と横のサイズを知りたい
そんなときに複数の値をプロパティとして持った一つのObjectにまとめてしまえば、
戻り値は一つですむ、という解決方法があったりします。(質問内容はこれにあたります)
配列で、なんていうのもあったり。


function f(t){return {s:Math.sin(t), c:Math.cos(t),t:Math.tan(t)}}
について、
var r=f(3.14)
alert(r.s)//sinの値を参照
alert(r.c)//cos
といったように使われます。私は使ったことないです。

独り言:あぁ、メモリの悲鳴が・・・

まず、Objectの表記方法はご存知ですか?
var o={a:1, b:2, c:"3"}
とかいう表記はObjectを表し、
alert(o.a)
という形で、プロパティを呼び出したり、という使い方があります。

なんてのは、「javascript オブジェクト初期化子」で検索していただくとして、


本題。
仕様上、functionは1個または0個の戻り値しか返せません。
  例:function f(){return 1;return 2;} はreturn 1が実行された時点で終了。
ですが、2個以上の戻り値が必要になることもあり、(人それぞれ?)
  例:角度を...続きを読む

Qdie from/of A の違いは?

なにかあるんでしょうか?聞いたところでは
OF A・・・Aは病気
FROM A・・間接的原因・過労など

です。ですがテストでは、FROM心臓病
がありました。これって明らかにOFのような気がするのですが、実際どうなのでしょうか?

お願いします。

Aベストアンサー

 ひとつの単語には1つの意味しかないという持論を持つ者です(わかりにくければ参考程度にお願いします)。

  of:構成要素の離脱
  from:出発点(→距離感)

 ofの語源はoffと同じですが、offが(壁からポスターがはがれるような)表面からの分離を表すのに対して、ofは全体の中から一部が抜け出す、つまり「構成要素の離脱」を表します。out ofという表現がよく使われるように、ofがoutと相性が良いのもこのためです。
  (1)The man robbed an old lady of her purse.「その男は老婦人から財布を奪った。」(老婦人の一部である財布が老婦人から離脱)
  (2)a glass of milk「コップ1杯のミルク」(ミルク全体の中のコップによって分離された1杯)
  (3)the windows of my room「私の部屋の窓」(私の部屋全体の一部である窓)
  (4)the city of Kyoto「京都市(京都という町)」
  (5)It is very kind of you to help.「手伝ってくださるなんてあなたは親切な方ですね。」

 (3)は一見分離ではないように思えますが、the windowsが話題の主体になる(私の部屋の構成要素のうち、窓が取り沙汰されている)ので、その意味では分離です。(4)はthe city(一部)とKyoto(全体)が同じ大きさで、同格の用法です。(5)は、(手伝ってくださるのは、「あなたという人格(全体)の中の親切という一面(一部)」ですね)という内容です。

 fromは「出発点」を表し、to(到達点)との対応表現として使われます。そして到達点に至るまでにどのような経路をたどっても関係ありません。例えば、
  A cold wind blew from sea.「冷たい風が海から吹いてきた。」
という例文の場合、極端な言い方をすれば、風が海とは反対方向から吹いてきたとしても、それがもともと海から吹いてきた風であれば、この文は有効となります。
 このように、fromとtoの間には途中経路のイメージが介在するために、toから見たfromには遠いイメージ、つまり「距離感」のイメージが生じます。
  Keep away from the cage.「おりに近づかないこと。」
のように、fromがaway(離れて見えない)などと相性が良いのもこのためです。

 ofとfromの根本的な意味の違いは以上のような感じです。死亡原因について使われる場合もやはり、
  die of A…Aという事柄が全面的な原因となって、dieという結果が生じる(→Aは直接的死因)
  die from A…Aという出発点から途中経路をたどってdieという到達点に至る(→Aは間接的死因)
という説明が可能です。

 しかし正直なところ、現在ではこの区別もあいまいになってきています(死因の境界線がはっきりしないことも多い)。結局は話者がどう考えるかによっても違ってきます。ただ、ofとfromの基本的な意味は知っておかれると良いかと思います。

 ひとつの単語には1つの意味しかないという持論を持つ者です(わかりにくければ参考程度にお願いします)。

  of:構成要素の離脱
  from:出発点(→距離感)

 ofの語源はoffと同じですが、offが(壁からポスターがはがれるような)表面からの分離を表すのに対して、ofは全体の中から一部が抜け出す、つまり「構成要素の離脱」を表します。out ofという表現がよく使われるように、ofがoutと相性が良いのもこのためです。
  (1)The man robbed an old lady of her purse.「その男は老婦人から財布...続きを読む

Q中カッコ{}だけの記述について

いつもお世話になります。

以前あるソースコードを眺めていたら、中カッコ{}だけの記述をしているのを見かけました。
例えば、

public class Test {
public static void main(String args[]) {
{
String s = "ああああああああ";
System.out.println(s);
}
}
}

のような感じで、{から始まり何かの処理を書いて}で閉じるというようなもので、if文やfor文などなくいきなり中カッコで記述するというものです。
このような書き方ができるのは初めてしったのですが、このような書き方は何かの呼ばれ方があるのでしょうか、
またこのように書くことによって何かメリットはあるのでしょうか。

宜しくお願いします。

Aベストアンサー

> 書き方は何かの呼ばれ方があるのでしょうか、

単に「ブロック」もしくは「コードブロック」で良いと思います。


> またこのように書くことによって何かメリットはあるのでしょうか。

変数の有効範囲(スコープ)を限定する働きが有ります。

下記のコードはちゃんと動きますが、内側の{}を外してしまうと変数sが二重宣言となってしまうのでコンパイルエラーになります。

public class Test {

public static void main(String args[]) {

{
String s = "ああああああああ";
System.out.println(s);
}

{
String s = "いいいいいいいい";
System.out.println(s);
}
}
}


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング