2012-02-27 13 views
5

Tôi muốn sử dụng lớp Java HttpURLConnection để kết nối với một thiết bị cụ thể trên mạng cục bộ. Tôi cần phải sử dụng một bộ điều hợp mạng cụ thể bởi vì máy sẽ chạy chương trình của tôi có 2 bộ điều hợp mạng được cài đặt. Một bộ điều hợp nằm trên mạng công ty rộng hơn và được gán động một IP trong khi mạng thứ hai là mạng cục bộ cho máy và có IP tĩnh. Đây là mạng nội bộ thứ hai mà tôi muốn hạn chế chương trình của mình.HttpURLKết nối và sử dụng bộ điều hợp mạng cụ thể

Sử dụng HttpURLKết nối thuận tiện vì nó giúp tôi phân tích cú pháp phản hồi của máy chủ v.v ... và truy cập thẳng vào dữ liệu tôi cần thay vì thực hiện một cái gì đó như this. Tuy nhiên, vì tôi cần phải hạn chế các yêu cầu HTTP của tôi đến một bộ điều hợp mạng cụ thể, tôi không thể chắc chắn rằng các yêu cầu HTTP của tôi chỉ được gửi qua bộ điều hợp mong muốn. Tôi có chính xác trong sự hiểu biết của tôi về cách HttpURLConnection hoạt động tức là nó dựa trên hệ điều hành để chọn bộ thích ứng mạng thích hợp để sử dụng không?

+2

http://stackoverflow.com/questions/1008781/is-it-possible-to-specify-which-network-interface-for-a-jvm-or-ide-to-use –

Trả lời

7

Với Java thuần túy, bạn sẽ chỉ có thể liên kết Socket với NetworkInterface được chọn.

Nếu bạn cần hỗ trợ giao thức HTTP với khả năng kiểm soát giao diện mạng nào để kết nối từ bạn cần sử dụng Apache HTTP Client.

Bạn cần cung cấp thông số ConnRoutePNames.LOCAL_ADDRESS cho nó, xem chi tiết tại đây: http://hc.apache.org/httpcomponents-client-ga/tutorial/html/connmgmt.html.

UPDATE:

Kể từ 4,3 ConnRoutePNames bị phản đối, hãy sử dụng RequestConfigRequestConfig.Builder của nó để thay thế.

+0

Rất hữu ích, cảm ơn bạn Qwe! – Kerry

+0

Cảm ơn! Không Qwe nữa :) –