2015-07-12 84 views
1

我正在構建一個簡單的代理服務器。它不直接連接到互聯網,而是通過其他代理服務器使用某種算法動態選擇最合適的服務器。並且該代理服務器連接到Internet。這是一個要求。 所以它看起來像這樣:通過另一個代理從代理連接到Internet

Client ---> My Main Proxy ---> Proxy1 ----> Internet 

Client ---> My Main Proxy ---> Proxy2 ----> Internet 

Client ---> My Main Proxy ---> Proxy3 ----> Internet 

我知道如何建立一個代理是My Main Proxy。但是,如何將My Main Proxy連接到ProxyX? 或者更確切地說,我如何通過ProxyXMy Main Proxy連接到互聯網(並將結果返回到Client)?

回答

3

它取決於代理服務器的類型(Socket或HTTP),但SocketURL類都有設置代理服務器的方法(將它們設置爲通過代理創建連接)。

例如:

Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("proxy.host", 8080)); 
HttpURLConnection httpConnection = (HttpURLConnection)url.openConnection(proxy); 

而對於一個TCP套接字連接

Proxy proxy = new Proxy(Proxy.Type.SOCKS, new InetSocketAddress("proxy.host", 80)); 
Socket socket = new Socket(proxy); 
InetSocketAddress socketAddress = new InetSocketAddress(address, port); 
socket.connect(socketAddress, 1000); 
+0

什麼'新的InetSocketAddress(地址,端口);在第二個例子中的3號線'?如果我們連接到代理服務器,爲什麼還需要一對地址和端口? –

+0

@AlexanderSupertramp這是目標地址和端口,您需要告訴代理將哪個地址轉發給您的連接。 – Titus

+0

請看看這個http://stackoverflow.com/questions/31533150/unable-to-make-a-request-via-proxy –