タイプ の可変パケットがありますDatagramPacket
。IP アドレスをpacket.getAddress().toString()
表す文字列が生成/
されますが、文字列の先頭に次のように追加されます。
/127.0.0.1
先頭の は簡単に削除できます'/'
が、IP の文字列表現を取得するためのより良い方法はありますか? '/'
他の状況でもっとあるとどうなるか心配です。
ありがとう!
タイプ の可変パケットがありますDatagramPacket
。IP アドレスをpacket.getAddress().toString()
表す文字列が生成/
されますが、文字列の先頭に次のように追加されます。
/127.0.0.1
先頭の は簡単に削除できます'/'
が、IP の文字列表現を取得するためのより良い方法はありますか? '/'
他の状況でもっとあるとどうなるか心配です。
ありがとう!
以下を使用してください。
packet.getAddress().getHostAddress()
ドキュメントから:
テキスト表示でIPアドレス文字列を返します。
それと対比してInetAddress.toString()
ください:
このIPアドレスをに変換します
String
。返される文字列の形式は、ホスト名/リテラルIPアドレスです。ホスト名が未解決の場合、ネームサービスの逆引き参照は実行されません。ホスト名の部分は空の文字列で表されます。
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つのフィールドを本質的に分離します。