InetAddress.getLocalHost () অজানাহোস্টএক্সেপশন ছুড়ে দেয়


88

আমি বিভিন্ন অপারেটিং সিস্টেমে আমাদের সার্ভার-অ্যাপ্লিকেশন (লিখিত জাভা) পরীক্ষা করছি এবং ভেবেছিলাম যে সুন্দর জাভা ইন্টিগ্রেশনের কারণে ওপেনসোলারিস (২০০৮.১১) সবচেয়ে কম ঝামেলা পাবে। আমি অজানাহস্টএক্সসেপশন দিয়ে শেষ হওয়ায় আমি ভুল ছিল was

try {
  computerName = InetAddress.getLocalHost().getHostName();
  if (computerName.indexOf(".") > -1)
    computerName = computerName.substring(0,
        computerName.indexOf(".")).toUpperCase();
} catch (UnknownHostException e) {
  e.printStackTrace();
}

আউটপুটটি হ'ল:

java.net.UnknownHostException: desvearth01: desvearth01
    at java.net.InetAddress.getLocalHost(InetAddress.java:1353)

তবে, nslookup desvearth01সঠিক আইপি ঠিকানা প্রদান করে, এবং প্রত্যাশার সাথে nslookup localhostপ্রত্যাবর্তন করে 127.0.0.1। এছাড়াও, একই কোডটি ফ্রিবিএসডি-তে পুরোপুরি কাজ করে। ওপেনসোলারিসের কি এমন বিশেষ কিছু আছে যা সম্পর্কে আমি অবগত নই?

কোনও ইঙ্গিত প্রশংসা, ধন্যবাদ।

উত্তর:


120

ভাল traditionতিহ্যে, আমি আবার আমার নিজের প্রশ্নের উত্তর দিতে পারি:

দেখে মনে হচ্ছে এটি InetAddress.getLocalHost()উপেক্ষা করে /etc/resolv.confতবে কেবল /etc/hostsফাইলটি দেখায় (যেখানে আমি এর বাইরেও কিছু নির্দিষ্ট করেছিলাম না localhost)। এই ফাইলে আইপি এবং হোস্টনাম যুক্ত করা সমস্যার সমাধান করে এবং ব্যতিক্রমটি চলে যায়।


আর একটি উত্তর প্রায় সঠিক এবং আমি উপর থেকে ইঙ্গিত পেয়েছি এবং আমার সমস্যা সমাধান হয়ে যায় ... ধন্যবাদ

তবে এটি উন্নত করার জন্য, আমি ধাপে ধাপে পরিবর্তনগুলি যুক্ত করছি, যাতে এটি এমনকি নিষ্পাপ ব্যবহারকারীদের জন্য সহায়ক হবে।

পদক্ষেপ:

  • খুলুন /etc/hosts, এন্ট্রিগুলি নীচের মত দেখাবে।

     127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4  
     ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    
  • আপনাকে এর উপরে আরও একটি লাইন যুক্ত করতে হবে যেমন viবা gedit(যেমন <your-machine-ip> <your-machine-name> localhost) কোনও সম্পাদক দ্বারা ।

     192.168.1.73 my_foo localhost
    

এখন সামগ্রিক ফাইলটি এর মতো দেখতে পারে:

192.168.1.73 my_foo localhost
127.0.0.1    localhost localhost.localdomain localhost4 localhost4.localdomain4
::1          localhost localhost.localdomain localhost6 localhost6.localdomain6
  • কেবল এটি সংরক্ষণ করুন এবং আপনার জাভা কোডটি আবার চালান ... আপনার কাজ শেষ হয়েছে।

4
যখন আপনি হোস্ট ফাইলে লিখতে চেষ্টা করার অনুমতি সমস্যার সম্মুখিন হন তাহলে, এখানে নির্দেশাবলী সহায়তা করবে: decoding.wordpress.com/2009/04/06/...
septerr

4
এছাড়া OS X এবং জাভা 7, বিস্তারিত একটি বাগ এবং এখানে কার্যসংক্রান্ত groups.google.com/forum/#!topic/h2-database/DuIlTLN5KOo
মার্ক Lakewood,

12
সেটিং 127.0.0.1 localhost <hostname>আমার জন্য যথেষ্ট ছিল
Marius Soutier

এটি অনেক দেরীতে পেয়েছে। পরিবর্তে একটি নেটওয়ার্কইন্টারফেস.সেট নেটওয়ার্কইন্টারফেস () সমাধান কোড আপ করুন।
সিটিপেনরোজ

4
আপনার হোস্টনামটি পেতে, আপনি hostnameটার্মিনাল থেকে কমান্ডটি ব্যবহার করতে পারেন ।
ধূসর

8

আমি NetworkInterface.getNetworkInterfaces()যখন InetAddress.getLocalHost()একটি নিক্ষেপ করি তখন ফিরে পড়া হিসাবে ব্যবহার করি UnknownHostException। এখানে কোড (স্পষ্টতার জন্য ব্যতিক্রম পরিচালনা ছাড়া) without

Enumeration<NetworkInterface> iterNetwork;
Enumeration<InetAddress> iterAddress;
NetworkInterface network;
InetAddress address;

iterNetwork = NetworkInterface.getNetworkInterfaces();

while (iterNetwork.hasMoreElements())
{
   network = iterNetwork.nextElement();

   if (!network.isUp())
      continue;

   if (network.isLoopback())
      continue;

  iterAddress = network.getInetAddresses();

  while (iterAddress.hasMoreElements())
  {
     address = iterAddress.nextElement();

     if (address.isAnyLocalAddress())
        continue;

     if (address.isLoopbackAddress())
        continue;

     if (address.isMulticastAddress())
        continue;

     return address.getHostAddress();
  }
}

অন্যান্য উত্তরগুলি /etc/hostsফাইল সম্পাদনা করে । এটি ত্রুটিযুক্ত প্রবণ, ভঙ্গুর, রুট অ্যাক্সেসের প্রয়োজন হতে পারে এবং সমস্ত ওএস এর কাজ করবে না।


6

আমার অ্যামাজনের উদাহরণে আমি একই সমস্যাটি দেখছিলাম, ডিফল্ট ডিএনএস কনফিগারেশন সমস্যা ছিল। সুতরাং সমস্যাটি সমাধানের জন্য আমি এই পদক্ষেপগুলি করেছি -

আপনার হোস্টের নাম পান

$hostname
ip-10-122-16-169

হোস্ট নেম পিং

$ping ip-10-122-16-169
ping: unknown host ip-10-122-16-169

বিড়াল / ইত্যাদি / হোস্ট ফাইল, আপনি কিছু পাবেন

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost6 localhost6.localdomain6

এখন আপনাকে প্রথমে আপনার প্রথম হোস্টের নামটি মুঠির রেখার শেষে যুক্ত করা দরকার, সুতরাং আপনি যখন যুক্ত করবেন তখন এটি দেখতে দেখতে ভাল লাগবে

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 ip-10-122-16-169
::1         localhost6 localhost6.localdomain6

এখন আপনি একই হোস্টনামটি পুনরায় পরীক্ষা করার জন্য যেতে প্রস্তুত

$ping ip-10-122-16-169
PING localhost (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=255 time=0.018 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=255 time=0.024 ms

একটি ec2 উদাহরণের জন্য কাজ করেছেন, ধন্যবাদ
বায়বাতু

4

সোলারিসে হোস্ট লুক্ক্রিপ্টগুলি /etc/nsswitch.conf'হোস্টগুলি:' রেখাটি কী বলে তার উপর নির্ভর করে এটি ব্যবহার করে /etc/hosts, এনআইএস, ডিএনএস এবং / অথবা এলডিএপি পরামর্শ করা উচিত কিনা তা নির্ভর করে ।

আপনি যদি কেবল হোস্ট এবং ডিএনএস ব্যবহার করেন তবে আপনার এতে থাকা উচিত /etc/nsswitch.conf:

হোস্ট: ফাইল ডিএনএস

কমান্ডটি সরাসরি পরামর্শ nslookup desvearth01নেয় কারণ কাজ করে । আপনি যদি আরও ভাল কমান্ড লাইন পরীক্ষা করতে চান তবে কমান্ডটি ব্যবহার করুন:nslookup/etc/resolv.conf

গেস্ট হোস্ট desvearth01

4

আমি যখন ওয়ার্কস্টেশনের নাম পরিবর্তন করেছি এবং গ্লাস ফিশ 2 শুরু করার চেষ্টা করেছি তখন এই ত্রুটিগুলি দেখা যায় You

127.0.0.1       localhost
127.0.1.1       MyNewName


1

যদি আপনি এই বার্তার দেখতে পান, তাহলে আপনি সেট হোস্টনাম প্রয়োজন সঙ্গে hostname superhost.domain কমান্ড !

এর পরে, কোন /etc/hostsফাইলটিতে স্ট্রিং রয়েছে তা পরীক্ষা করে দেখুন 127.0.0.1 localhost

এছাড়াও, পরীক্ষা করুন যে কমান্ডটি uname -aএরকম কিছু দেয়:

লিনাক্স সুপারহোস্ট.ডোমেন 2.6.38-8-সার্ভার # 42-উবুন্টু এসএমপি সোমবার 11 এপ্রিল 03:49:04 ইউটিসি ২০১১ x86_64 x86_64 x86_64 জিএনইউ / লিনাক্স

এটার মত না!!!!

লিনাক্স (কোনটি নয়) 2.6.38-8-সার্ভার # 42-উবুন্টু এসএমপি সোমবার 11 এপ্রিল 03:49:04 ইউটিসি 2011 x86_64 x86_64 x86_64 জিএনইউ / লিনাক্স


0

আর একটি বিকল্প এই পোস্টে রয়েছে (বাস্তবে, আপনার হোস্টনামের জন্য আপনার / ইত্যাদি / সিসকনফিগ / নেটওয়ার্ক ফাইলে কী রয়েছে ... এফকিউডিএন নাম পরিবর্তন করে এটি এই সমস্যার সমাধান করে)।

জাভা getLocalHost () অজানাহোস্টএক্সেপশন / ইত্যাদি / হোস্ট ফাইল লিনাক্স এপিআই পৃথক?


0

আমি পাশাপাশি এই সমস্যা আছে। আমার আরও পরীক্ষা করা দরকার, তবে দেখে মনে হচ্ছে এটি NetworkInterface.getNetworkInterfaces()আরও নির্ভরযোগ্য হতে পারে। আমি মনে করি এটি অনুসন্ধান করে না, তবে কেবল আইপি ধরেছে।

getLocalHost()ব্যর্থ হলে আমি এটি 'পরের সেরা' হিসাবে ব্যবহার করছি ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.