23

タイプ の可変パケットがありますDatagramPacket。IP アドレスをpacket.getAddress().toString()表す文字列が生成/されますが、文字列の先頭に次のように追加されます。

/127.0.0.1

先頭の は簡単に削除できます'/'が、IP の文字列表現を取得するためのより良い方法はありますか? '/'他の状況でもっとあるとどうなるか心配です。

ありがとう!

4

2 に答える 2

32

以下を使用してください。

packet.getAddress().getHostAddress()

ドキュメントから:

テキスト表示でIPアドレス文字列を返します。

それと対比してInetAddress.toString()ください:

このIPアドレスをに変換しますString。返される文字列の形式は、ホスト名/リテラル​​IPアドレスです。ホスト名が未解決の場合、ネームサービスの逆引き参照は実行されません。ホスト名の部分は空の文字列で表されます。

于 2012-10-18T05:04:16.973 に答える
7

IPだけが必要な場合は、ホストアドレスを使用します。

String address = InetAddress.getByName("stackoverflow.com").getHostAddress();

ホスト名だけが必要な場合は、

String hostname = InetAddress.getByName("stackoverflow.com").getHostName();

表示されているスラッシュは、おそらく、返されたInetAddressに対して暗黙のtoString()を実行して出力しようとしたときに発生します。これにより、スラッシュで区切られたホスト名とアドレスが出力されます(例:stackoverflow.com/64.34.119.12)。あなたが使うことができます

String address = InetAddress.getByName("stackoverflow.com").toString().split("/")[1];
String hostname = InetAddress.getByName("stackoverflow.com").toString().split("/")[0];

しかし、ここでStringの仲介者に行く理由はまったくありません。InetAddressは、2つのフィールドを本質的に分離します。

于 2012-10-18T05:13:21.170 に答える