2015-07-12 50 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 –