java.net.UnknownHostException: ชื่อโฮสต์ไม่ถูกต้องสำหรับเซิร์ฟเวอร์: local


124

ฉันควรทำอย่างไรเพื่อแก้ไขข้อผิดพลาด:

java.net.UnknownHostException: Invalid hostname for server: local

ฉันเพิ่มชื่อโฮสต์เสมือนใหม่ที่โปรแกรมจำลอง Android แต่ผลลัพธ์กลับเป็น

 java.net.UnknownHostException virtualhostname at 
  java.net.InetAddress.lookUpHostByName(InetAddress.java:506)

เมื่อฉันพิมพ์ URL โฮสต์เสมือนบนพีซีของฉันมันจะทำงานบนหน้าจอ จากนั้นอีกครั้งเมื่อฉันใช้ Emulator และตรวจสอบ Logcat ฉันไม่สามารถอ่านหรือตรวจสอบสถานะ HTTP ได้หาก 200, 202 หรือหมายเลขรหัสข้อผิดพลาด มันก็กลับไปUnknownHostException


6
ข้อมูลเพิ่มเติมเล็กน้อยจะช่วยให้เราแก้ปัญหาได้ง่ายขึ้น
หนีบ

คุณอยู่เบื้องหลังพร็อกซีเซิร์ฟเวอร์และกำหนดการตั้งค่าพร็อกซีหรือไม่ ในกรณีนี้คุณอาจต้องยกเว้น localhost และโฮสต์อื่น ๆ ที่ไม่ต้องการความช่วยเหลือจากพร็อกซีเซิร์ฟเวอร์เพื่อแก้ไขเป็นที่อยู่ IP ที่ถูกต้อง
asgs

ฉันเพิ่มชื่อโฮสต์เสมือนใหม่ที่โปรแกรมจำลอง Android แต่ผลลัพธ์กลับเป็น "java.net.UnknownHostException virtualhostname ที่ java.net.InetAddress.lookUpHostByName (InetAddress.java:506)" เมื่อฉันพิมพ์ URL โฮสต์เสมือนบนพีซีของฉันมันจะทำงานบนหน้าจอ จากนั้นอีกครั้งเมื่อฉันใช้ Emulator และตรวจสอบ Logcat ฉันไม่สามารถอ่านหรือตรวจสอบสถานะ HTTP ได้หาก 200, 202 หรือหมายเลขรหัสข้อผิดพลาด มันกลับไปที่ "UnknownHostException"
David Dimalanta

คำตอบ:


66

สิ่งที่กล่าวถึงข้อยกเว้นก็คือไม่มีเซิร์ฟเวอร์ที่รู้จักชื่อ "local" ฉันเดาว่าคุณกำลังพยายามเชื่อมต่อกับคอมพิวเตอร์ในพื้นที่ของคุณ ลองใช้ชื่อโฮสต์"localhost"แทนหรือบางที127.0.0.1หรือ::1(สุดท้ายคือ IPv6)

จากJavadocs :

โยนเพื่อระบุว่าไม่สามารถระบุที่อยู่ IP ของโฮสต์ได้

127.0.0.1หรือ::1หรือ"localhost"ควรจะติดต่อย้อนกลับดังนั้นหากไม่ได้ทำงานที่ฉันต้องการจะประหลาดใจจริงๆ

หากมีเซิร์ฟเวอร์ที่เรียกว่า "local" บนเครือข่ายของคุณให้ตรวจสอบการตั้งค่า DNS ของคุณหรือเพิ่มลงในไฟล์โฮสต์ของคุณ


1
ในการใช้งานบางอย่างการรีสตาร์ท JVM อาจจำเป็นเพื่อให้การเปลี่ยนแปลงเกตเวย์ / dns มีผลบังคับใช้
André Laszlo

69

ฉันมีปัญหาเดียวกันในเครื่อง Mac ของฉัน ผมพบปัญหาเมื่อผมส่ง Ping ของฉันจากสถานีและมันกลับมา$HOSTNAMEping: cannot resolve myHostName: Unknown host

วิธีแก้ไข:

  1. ทำecho $HOSTNAMEที่เครื่องปลายทางของคุณ
  2. สิ่งที่แสดงให้เห็นว่ามันชื่อโฮสต์ (ช่วยบอกmyHostName) พยายามที่จะ ping ping myHostNameมัน หากส่งคืนให้ping: cannot resolve myHostName: Unknown hostเพิ่มรายการลงใน/etc/hostsไฟล์ของคุณ
  3. สำหรับ/etc/hostsไฟล์แก้ไขนั้นและเพิ่มสิ่งต่อไปนี้:

    127.0.0.1 myHostName

หวังว่าจะช่วยได้


สงสัยว่ามันทำงานอย่างไรกับบางเครื่องนอกกรอบและในบางเครื่องเราต้องเพิ่มรายการโฮสต์
Skynet

16

java.net.UnknownHostException: โฮสต์ไม่ได้รับการแก้ไข:

โยนเพื่อระบุว่าไม่สามารถระบุที่อยู่ IP ของโฮสต์ได้

นอกจากนี้ยังมีข้อยกเว้นนี้เมื่อคุณเชื่อมต่อกับ wifi ที่ใช้ได้ แต่เราเตอร์ไม่ได้รับอินเทอร์เน็ต มันง่ายมากที่จะทำซ้ำสิ่งนี้:

  1. เชื่อมต่อกับ wifi ที่ใช้ได้
  2. ตอนนี้ถอดสายเคเบิลออกจากเราเตอร์ในขณะที่เราเตอร์เสียบอยู่

คุณจะสังเกตเห็นข้อผิดพลาดนี้ !!

คุณไม่สามารถแก้ปัญหานี้ได้จริงๆคุณสามารถแจ้งเตือนผู้ใช้ได้อย่างสง่างาม (บางอย่างเช่น - "ไม่สามารถเชื่อมต่อได้")


1
มันจะเป็นทั่วไปมากขึ้นที่จะบอกว่ายกเว้นถูกยกขึ้นเมื่อเจ้าภาพไม่พบใน DNS หรือเมื่อ DNS ของตัวเองไม่สามารถพบได้เช่นการใด ๆเหตุผลที่การเชื่อมต่อเครือข่ายหรือกำหนดค่าที่ผิด
Marquis of Lorne

แล้วคุณจะแก้ไขปัญหานี้อย่างไร?
cokedude

2
คุณไม่สามารถแก้ปัญหานี้ได้จริงๆคุณสามารถแจ้งเตือนผู้ใช้ได้อย่างสง่างาม (สิ่งที่ชอบ - "ไม่สามารถที่จะทำให้การเชื่อมต่อ")
แอช

การมีปัญหานี้ในเครือข่ายโรงเรียน แต่ไม่ใช่การเชื่อมต่อส่วนตัวที่บ้านหมายความว่าอย่างไร
โซเดียมไนเตรต

@sodiumnitrate อาจเป็นเครือข่ายโรงเรียนของคุณต้องมีการตรวจสอบความถูกต้องของ id / pwd ก่อน .. ลองเปิด url ของเว็บในเบราว์เซอร์และดูว่าแสดงอย่างถูกต้องหรือไม่
Ash

7

คำถามนี้ไม่เฉพาะเจาะจงสำหรับคำถาม แต่คำถามนี้ปรากฏขึ้นเมื่อฉันเป็น Googling สำหรับคำถามที่กล่าวถึงUnknownHostExceptionและไม่พบการแก้ไขที่อื่นดังนั้นฉันคิดว่าฉันจะเพิ่มคำตอบที่นี่

ข้อยกเว้นที่ได้รับอย่างต่อเนื่องคือ:

java.net.UnknownHostException:  google.com
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:184)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:589)
    at java.net.Socket.connect(Socket.java:538)
    at java.net.Socket.<init>(Socket.java:434)
    at java.net.Socket.<init>(Socket.java:211)
    ... 

ไม่ว่าฉันจะพยายามเชื่อมต่อกับโฮสต์ที่ถูกต้องอย่างไรการพิมพ์ในเทอร์มินัลก็ไม่ช่วยเช่นกัน ทุกอย่างถูกต้อง

การแก้ไขปัญหา

ไม่ได้เรียกร้อง สตริงโฮสต์ที่มีช่องว่างtrim() ในการเขียนพร็อกซีเซิร์ฟเวอร์โฮสต์ได้มาจากส่วนหัว HTTP โดยใช้split(":")อัฒภาคสำหรับHOSTส่วนหัว ช่องว่างด้านซ้ายนี้และทำให้UnknownHostExceptionเป็นโฮสต์ที่มีช่องว่างไม่ใช่โฮสต์ที่ถูกต้อง ทำhost = host.trim()ในString hostการแก้ไขปัญหาที่ไม่ชัดเจน


นี่คือปัญหาของฉัน
Sterling Diaz

1
ขอบคุณ - สิ่งนี้ช่วยฉันได้ ในกรณีของฉันโฮสต์ String ที่ถูกส่งผ่านไปยังฟังก์ชันมีส่วนต่อท้าย \ n ดังนั้นการรัน.trim()บนนั้นจึงแก้ไขให้ฉัน!
rayzinnz

1
ขอบคุณฉันใช้เวลามากเกินไปในการพยายามค้นหาว่าปัญหาคืออะไรจนกระทั่งฉันรู้ว่าฉันพิมพ์ช่องว่างระหว่างที่อยู่ IP สองที่แตกต่างกัน
Sandoval0992

5

สิ่งนี้อาจเกิดขึ้นเนื่องจากสาเหตุหลายประการ

1) ตรวจสอบว่าคุณได้เชื่อมต่อ VPN หรือไม่คุณอาจได้รับข้อผิดพลาดนี้ในบางครั้งถ้าใช่

"ชื่อโฮสต์ของคุณ localhost เปลี่ยนเป็นที่อยู่ลูปแบ็ค: 127.0.0.1 โดยใช้ 10.xxx.1.193 แทน (บนอินเทอร์เฟซ cscotun0)"

2) ตรวจสอบ $ HOSTNAME ของคุณ

3) พยายาม ping $ HOSTNAME บน commandline และหากไม่ได้ผลให้ปรับแต่งการตั้งค่าระบบเพื่อให้โฮสต์ในเครื่องของคุณตอบสนองต่อการ Ping


5

ไม่มีชื่อโฮสต์ของคุณ JBoss ใช้ตัวแปรสภาพแวดล้อมนี้ ($ HOSTNAME) เมื่อเชื่อมต่อกับเซิร์ฟเวอร์

[root@xyz ~]# echo $HOSTNAME
xyz

[root@xyz ~]# ping $HOSTNAME
ping: unknown host xyz

[root@xyz ~]# hostname -f
hostname: Unknown host

มีหลายสิบอย่างที่ทำให้เกิดสิ่งนี้ได้ โปรดแสดงความคิดเห็นหากคุณค้นพบเหตุผลใหม่

สำหรับการแฮ็กจนกว่าคุณจะสามารถแก้ไขปัญหานี้ได้อย่างถาวรบนเซิร์ฟเวอร์ของคุณคุณสามารถเพิ่มบรรทัดต่อท้ายไฟล์ / etc / hosts ของคุณ:

127.0.0.1 xyz.xxx.xxx.edu xyz

การบำรุงรักษาเชิงป้องกัน: unix.stackexchange.com/questions/248616/…
MacGyver

4

ลองทำดังต่อไปนี้:

String url = "http://www.google.com/search?q=java";
URL urlObj = (URL)new URL(url.trim());
HttpURLConnection httpConn = 
(HttpURLConnection)urlObj.openConnection();
httpConn.setRequestMethod("GET");
Integer rescode = httpConn.getResponseCode();
System.out.println(rescode);

ตัดแต่ง () URL


การตัดแต่งสตริงแบบฮาร์ดโค้ดโดยไม่มีช่องว่างนั้นไม่สมเหตุสมผล
Blake McBride

1

พยายามเชื่อมต่อกับคอมพิวเตอร์ในพื้นที่ของคุณลองใช้ชื่อโฮสต์ "localhost" แทนหรือบางที :: / - สุดท้ายคือ ipv6


1

โปรดลองตั้งค่าตัวแปรสภาพแวดล้อม SPARK_LOCAL_IP เป็นที่อยู่ IP (สามารถเป็น localhost เช่นที่อยู่ IP ของคุณเอง) ที่คุณต้องการเชื่อมต่อ เช่น

$ export SPARK_LOCAL_IP=182.95.208.152

ด้วยวิธีนี้คุณจะไม่จำเป็นต้องเปลี่ยนการตั้งค่าลินุกซ์ที่มีอยู่ ทำงานให้ฉันหวังว่าจะช่วยคุณด้วย


0

เชื่อมต่อมือถือของคุณด้วยการเชื่อมต่อ wifi ที่แตกต่างกันกับผู้ให้บริการรายอื่น ฉันไม่ทราบปัญหาที่แน่นอน แต่ฉันไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์กับผู้ให้บริการรายใดรายหนึ่งได้ แต่ใช้งานได้เมื่อฉันเชื่อมต่อกับผู้ให้บริการรายอื่น ลองดูสิ!


0

ฉันมีปัญหานี้ในแอพ Android ของฉันเมื่อจับไฟล์ xml รูปแบบของลิงก์ของฉันไม่ถูกต้องฉันฟอร์แมตใหม่ด้วย url แบบเต็มและใช้งานได้



-1

หากไฟล์ / etc / localhosts ของคุณมีรายการด้านล่าง: เพิ่มรายการชื่อโฮสต์ดังต่อไปนี้:

127.0.0.1 local host (add your hostname here)
::1 (add hostname here) (the last one is IPv6).

สิ่งนี้ควรแก้ไขปัญหาได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.