2012-09-29 77 views
1

我試圖通過Java中的SOCKS(v4/v5)代理創建一個http請求。閱讀維基百科上的襪子通信協議後,我已經把togheter這段代碼:Java Socks代理套接字錯誤

Socket sock = new Socket(); 
InetSocketAddress remoteProxyAddress = new InetSocketAddress(proxy ip, proxy port); 
sock.connect(remoteProxyAddress, connTimeout); 

InputStream in = sock.getInputStream(); 
OutputStream out = sock.getOutputStream(); 

out.write(0x04); 
out.write(0x01); 
out.write((endpoint.getPort() >> 8) & 0xff); 
out.write((endpoint.getPort() >> 0) & 0xff); 
out.write(endpoint.getAddress().getAddress()); 
out.write(0x0); 
out.flush(); 

這裏來,我從代理服務器讀取的部分。問題是響應總是「-1」。

我試過Firefox上的代理,它的工作原理非常完美。所以...問題出在我的應用程序中。

任何人都可以幫助我嗎? 謝謝!

+0

爲什麼? Java已經支持SOCKS代理。你不必自己寫。請參閱Javadoc /功能/網絡指南。 – EJP

+0

是的......它已經支持SOCKS,但它在整個虛擬機上。我需要在不同代理服務器上同時進行多個連接 –

+0

所以看到java.net代理。 – EJP

回答

0

你不覺得你連接的服務器只支持Socks v5協議嗎?

有您的連接請求一切正常。只要服務器爲v4啓用,您的代碼應該可以正常工作。我使用非常類似的實現絕對成功。

你也應該看看這個Socket()構造函數 - 它可能已經足夠滿足你的需求。它存在於JRE1.6和JRE1.7中

+0

我也試過v5協議。同樣的結果。 –

+0

這真的很奇怪。你試過Sun的打擊嗎? – Serge

+0

你能檢查endpoint.getPort()和endpoint.getAddress()。getAddress()這個代碼的開頭的實際值嗎? – Serge