cuốn sách gpt4 ai đã làm

java - Tại sao máy khách RMI localhost không sử dụng ip localhost để kết nối với máy chủ RMI localhost?

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-03 05:19:20 29 4
mua khóa gpt4 Nike

Chúng tôi đang sử dụng giao tiếp RMI máy khách/máy chủ trên cùng một máy (vì vậy tất cả các ip phải là localhost).

Chúng tôi bắt đầu đăng ký (sử dụng cổng mặc định 1099)


đăng ký = LocateRegistry.createRegistry(port);

và xuất một số đối tượng sang sổ đăng ký RMI


Naming.rebind("//"+ "localhost"+ ="+ port + "/"+ tên, đối tượng);

Chúng tôi truy xuất một số đối tượng từ một quy trình khác (hãy nhớ mọi thứ đang chạy trong localhost)


MyRemoteObject ro = (MyRemoteObject) Naming.lookup("//"+ "localhost"+ ://"+ port + "/"+ name);

Sự cố này xảy ra khi bạn chạy ứng dụng có mạng LAN đang hoạt động và tắt kết nối mạng trong quá trình này. Nếu bạn chạy ứng dụng và mạng LAN hoạt động tốt thì sẽ không có vấn đề gì xuất hiện và nếu bạn chạy ứng dụng và mạng LAN không hoạt động thì sẽ không có vấn đề gì xuất hiện. Nó chỉ xảy ra khi bạn thay đổi mạng LAN trong khi ứng dụng đang chạy.

Ngoại lệ được đưa ra khi thực thi phương thức Naming.lookup() là:


java.lang.RuntimeException:java.rmi.ConnectIOException: Kết nối được tạo ngoại lệ: 192.168.xx; ngoại lệ lồng nhau là:
java.net.NoRouteToHostException: Không có tuyến đến máy chủ: kết nối

Sau khi gỡ lỗi, tôi tìm thấy

RemoteObject ($Proxy0) -> RemoteObjectInvocationHandler -> UnicastRef2 -> LiveRef -> TCPEndpoint

Có ip của máy chủ (ví dụ: 192.168.xx) thay vì "localhost" hoặc 127.0.0.1 (đó là điều tôi muốn). Và giá trị boolean isLocal của đối tượng liveRef luôn sai.

Tôi không biết liệu tôi đã nói đủ rõ ràng chưa. Xin lỗi!!!

Bạn đề xuất món gì?

nỗ lực của tôi:

Tôi đã thử giải pháp này

  1. Chạy jvm với tham số -Djava.rmi.server.hostname=localhost
  2. Xác định lại RMIServerSocketFactory mỗi lần trả về 127.0.0.1. (TCPEndpoint có ip 192.168.xx và isLocal luôn sai)
  3. Rebind và tra cứu được gọi mà không có máy chủ trong URI. Điều này nên tham khảo localhost.

Nhưng không có điều nào trong số này có hiệu quả.

欢迎提出任何建议。

câu trả lời hay nhất

java.rmi.server.hostname nên làm thủ thuật .Bạn đã thiết lập nó trên máy chủ phải không?

nếu như java.rmi.server.hostname=localhost không hoạt động,java.rmi.server.hostname=127.0.0.1 hoặc java.rmi.server.hostname=::1?

Về java - tại sao máy khách RMI localhost không sử dụng ip localhost để kết nối với máy chủ RMI localhost, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/4258016/

29 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress