【问题标题】:Java Socks Proxy Socket ErrorJava Socks 代理套接字错误
【发布时间】:2012-09-29 15:15:22
【问题描述】:

我正在尝试通过 Java 中的 SOCKS (v4 / v5) 代理创建 http 请求。在 WikiPedia 上阅读 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 上尝试过代理,它运行良好。所以...问题出在我的应用程序中。

谁能帮帮我? 谢谢!

【问题讨论】:

  • 为什么? Java 已经支持 SOCKS 代理。你不必自己写。请参阅 Javadoc/特性/网络指南。
  • 是的...它已经支持 SOCKS,但它在整个 VM 上。我需要在不同的代理服务器上同时建立多个连接。

标签: java sockets proxy socks


【解决方案1】:

你不觉得你连接的服务器只支持 Socks v5 协议吗?

您的连接请求一切正常。如果服务器启用了 v4,您的代码应该可以正常工作。我使用非常相似的实现绝对成功。

您还应该看看这个Socket() 构造函数——它可能足以满足您的需要。它存在于 JRE 1.6 和 JRE 1.7 中

【讨论】:

  • 这真的很奇怪。你试过 Sun 的实施吗?
  • 您能检查一下代码开头的endpoint.getPort() 和endpoint.getAddress().getAddress() 的实际值吗?
  • 还有一件事。 endpoint.getAddress().getAddress() 是否返回 ipv4 地址?
  • 我用数据包嗅探器检查了输出。在实际 http 请求之前发送的所有数据都是相同的(我的意思是在我的应用程序和 Firefox 之间)。
  • @IonutUngureanu 服务器的响应如何?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-16
  • 1970-01-01
  • 1970-01-01
  • 2020-02-09
  • 1970-01-01
相关资源
最近更新 更多