java.net.UnknownHostException: Tên máy chủ không hợp lệ cho máy chủ: cục bộ


124

Các bước tôi nên thực hiện để giải quyết lỗi là gì:

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

Tôi đã thêm tên máy chủ ảo mới tại trình giả lập Android nhưng kết quả trả về

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

Khi tôi nhập URL máy chủ ảo của mình trên PC, nó sẽ hoạt động trên màn hình. Sau đó, một lần nữa, khi tôi chạy trên Trình giả lập và kiểm tra trên Logcat, tôi không thể đọc hoặc kiểm tra trạng thái HTTP nếu 200, 202 hoặc một số mã lỗi. Nó chỉ đơn giản là trở lạiUnknownHostException


6
thêm một chút thông tin sẽ giúp chúng tôi giải quyết vấn đề dễ dàng hơn
kẹp

bạn có đang sử dụng máy chủ Proxy và đã định cấu hình cài đặt proxy không? Nếu vậy, bạn có thể cần phải loại trừ máy chủ cục bộ và các máy chủ khác không cần sự trợ giúp của máy chủ Proxy để phân giải thành Địa chỉ IP hợp lệ.
asgs

Tôi đã thêm tên máy chủ ảo mới tại trình giả lập Android nhưng kết quả trả về "java.net.UnknownHostException virtualhostname tại java.net.InetAddress.lookUpHostByName (InetAddress.java:506)". Khi tôi nhập URL máy chủ ảo của mình trên PC, nó sẽ hoạt động trên màn hình. Sau đó, một lần nữa, khi tôi chạy trên Trình mô phỏng và kiểm tra trên Logcat, tôi không thể đọc hoặc kiểm tra trạng thái HTTP nếu 200, 202 hoặc một số mã lỗi. Nó chỉ đơn giản quay trở lại "UnknownHostException"
David Dimalanta

Câu trả lời:


66

Điều ngoại lệ thực sự đang nói là không có máy chủ được biết đến với tên "cục bộ". Tôi đoán là bạn đang cố kết nối với máy tính cục bộ của mình. "localhost"Thay vào đó, hãy thử với tên máy chủ hoặc có thể 127.0.0.1hoặc ::1(tên cuối cùng là IPv6).

Từ javadocs :

Ném để chỉ ra rằng không thể xác định được địa chỉ IP của máy chủ.

127.0.0.1hoặc ::1hoặc "localhost"luôn phải là giao diện lặp lại, vì vậy nếu điều đó không hoạt động, tôi sẽ thực sự ngạc nhiên.

Nếu thực sự có một máy chủ được gọi là "cục bộ" trên mạng của bạn - hãy kiểm tra cài đặt DNS của bạn hoặc thêm nó vào tệp máy chủ của bạn.


1
Trên một số triển khai, rõ ràng có thể cần khởi động lại JVM để các thay đổi cổng / dns có hiệu lực.
André Laszlo

69

Tôi đã gặp vấn đề tương tự trên máy Mac của mình. Tôi đã tìm thấy sự cố khi tôi ping $HOSTNAMEtừ thiết bị đầu cuối và nó quay trở lại ping: cannot resolve myHostName: Unknown host.

Để giải quyết:

  1. Thực hiện echo $HOSTNAMEtrên thiết bị đầu cuối của bạn.
  2. Dù hostname nó show (cho phép nói myHostName), cố gắng ping nó: ping myHostName. Nếu nó trả về ping: cannot resolve myHostName: Unknown hostthì hãy thêm mục nhập vào /etc/hoststệp của bạn .
  3. Đối với /etc/hoststệp chỉnh sửa đó và thêm sau:

    127.0.0.1 myHostName

Hy vọng nó giúp.


Wonder thế nào nó hoạt động trên một số máy ra khỏi hộp và trên một số chúng ta phải thêm các host nhập
Skynet

16

java.net.UnknownHostException: Máy chủ chưa được giải quyết:

Ném để chỉ ra rằng không thể xác định được địa chỉ IP của máy chủ.

Ngoại lệ này cũng được nêu ra khi bạn được kết nối với một wifi hợp lệ nhưng bộ định tuyến không nhận được internet. Rất dễ dàng để tái tạo điều này:

  1. Kết nối với một wifi hợp lệ
  2. Bây giờ, hãy tháo cáp khỏi bộ định tuyến trong khi bộ định tuyến được cắm vào

Bạn sẽ quan sát thấy lỗi này !!

Bạn thực sự không thể giải quyết vấn đề này, Bạn chỉ có thể thông báo cho người dùng một cách duyên dáng. (đại loại như - "Không thể tạo kết nối")


1
Sẽ tổng quát hơn nếu nói rằng ngoại lệ được nêu ra khi không tìm thấy máy chủ trong DNS hoặc khi không tìm thấy chính DNS, ví dụ: vì bất kỳ lý do kết nối mạng nào hoặc do định cấu hình sai.
Marquis of Lorne,

Vì vậy, làm thế nào để bạn khắc phục vấn đề này?
cokedude

2
Bạn thực sự không thể giải quyết vấn đề này, Bạn chỉ có thể thông báo cho người dùng một cách duyên dáng. (đại loại như - "Không thể tạo kết nối")
Ash

Vấn đề này xảy ra trong mạng trường học nhưng không phải kết nối cá nhân của tôi ở nhà có nghĩa là gì?
natrinitrat

@sodiumnitrate Có thể là mạng trường học của bạn yêu cầu một số xác thực id / pwd trước tiên .. Hãy thử mở bất kỳ url web nào trong trình duyệt và xem liệu điều đó có được hiển thị đúng không
Ash

7

Đây không phải là câu hỏi cụ thể cho câu hỏi, nhưng câu hỏi này đã xuất hiện khi tôi đang sử dụng Google để UnknownHostExceptiontìm câu trả lời được đề cập và bản sửa lỗi không được tìm thấy ở bất kỳ nơi nào khác nên tôi nghĩ mình sẽ thêm câu trả lời ở đây.

Ngoại lệ liên tục nhận được là:

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)
    ... 

Cho dù tôi đã cố gắng kết nối với bất kỳ máy chủ hợp lệ nào thì việc in nó trong thiết bị đầu cuối cũng không giúp được gì. Mọi thứ đều đúng.

Giải pháp

Không gọi trim() chuỗi máy chủ chứa khoảng trắng . Khi viết một máy chủ proxy, máy chủ được lấy từ tiêu đề HTTP với việc sử dụng split(":")dấu chấm phẩy cho HOSTtiêu đề. Khoảng trắng bên trái này và nguyên nhân UnknownHostExceptionlà máy chủ lưu trữ có khoảng trắng không phải là máy chủ hợp lệ. Làm một host = host.trim()trên String hostđã giải quyết được vấn đề mơ hồ.


Đây là vấn đề của tôi.
Sterling Diaz

1
Cảm ơn bạn - điều này đã cứu tôi. Trong trường hợp của tôi, máy chủ chuỗi được chuyển đến hàm có hậu tố \ n, vì vậy việc chạy .trim()trên đó đã sửa lỗi cho tôi!
rayzinnz

1
Cảm ơn, tôi đã dành quá nhiều thời gian để tìm ra vấn đề cho đến khi tôi nhận ra mình đã nhập một khoảng trống giữa hai địa chỉ IP khác nhau.
Sandoval0992

5

Điều này có thể xảy ra do nhiều lý do

1) Kiểm tra xem bạn đã kết nối VPN chưa, đôi khi bạn có thể gặp lỗi này nếu có

"Tên máy chủ, localhost của bạn phân giải thành địa chỉ lặp lại: 127.0.0.1; sử dụng 10.xxx.1.193 thay thế (trên giao diện cscotun0)"

2) Kiểm tra $ HOSTNAME của bạn

3) thử ping $ HOSTNAME trên dòng lệnh và nếu nó không hoạt động, hãy chỉnh sửa cài đặt hệ thống để làm cho máy chủ cục bộ của bạn phản hồi với ping


5

Tên máy chủ của bạn bị thiếu. JBoss sử dụng biến môi trường này ($ HOSTNAME) khi nó kết nối với máy chủ.

[root@xyz ~]# echo $HOSTNAME
xyz

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

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

Có hàng tá thứ có thể gây ra điều này. Hãy bình luận nếu bạn phát hiện ra một lý do mới.

Đối với một cuộc tấn công cho đến khi bạn có thể giải quyết vĩnh viễn sự cố này trên máy chủ của mình, bạn có thể thêm một dòng vào cuối tệp / etc / hosts của mình:

127.0.0.1 xyz.xxx.xxx.edu xyz


4

Hãy thử những cách sau:

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);

Cắt () URL


Việc cắt xén một chuỗi được mã hóa cứng không có khoảng trắng là vô nghĩa.
Blake McBride

1

Cố gắng kết nối với máy tính cục bộ của bạn. Hãy thử bằng tên máy chủ "localhost" thay thế hoặc có lẽ :: / - tên cuối cùng là ipv6


1

Hãy thử đặt biến môi trường SPARK_LOCAL_IP thành địa chỉ ip (có thể là localhost tức là địa chỉ ip của chính bạn) mà bạn muốn kết nối. Ví dụ

$ export SPARK_LOCAL_IP=182.95.208.152

Bằng cách này, bạn sẽ không bắt buộc phải thay đổi các cài đặt linux hiện có. Làm việc cho tôi, hy vọng sẽ giúp bạn quá.


0

Kết nối điện thoại di động của bạn với kết nối wifi khác nhau với nhà cung cấp dịch vụ khác nhau . Tôi không biết chính xác vấn đề nhưng tôi không thể kết nối với máy chủ với một nhà cung cấp dịch vụ cụ thể nhưng nó hoạt động khi tôi kết nối với nhà cung cấp dịch vụ khác. Vì vậy, hãy thử nó!


0

Tôi đã gặp sự cố này trong ứng dụng Android của mình khi lấy tệp xml định dạng liên kết của tôi không hợp lệ, tôi đã định dạng lại với url đầy đủ và nó hoạt động.


0

Nếu bạn ở đây vì trình giả lập của bạn cung cấp cho bạn Ngoại lệ đó, hãy đi tới Công cụ> Trình quản lý AVD trong trình mô phỏng Android của bạn và khởi động Lạnh Trình mô phỏng của bạn.


-1

Nếu tệp / etc / localhosts của bạn có mục nhập như dưới đây: Thêm mục nhập tên máy chủ như bên dưới:

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

Điều này sẽ giải quyết vấn đề.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.