首页 > 解决方案 > 如何在 Java 中使用 SOCKS4 而不是 SOCKS5?

问题描述

我正在创建一个使用 SOCKS 代理连接到 TCP 服务器的应用程序。

        SocketAddress sa = InetSocketAddress.createUnresolved(proxyHost, proxyPort);

        Proxy proxy = new Proxy(Proxy.Type.SOCKS, sa);
        try (Socket socket = new Socket(proxy)) {
            SocketAddress sockaddr = new InetSocketAddress(hostname, port);
            socket.connect(sockaddr);
            OutputStream os = socket.getOutputStream();

            os.write(/*write some stuff*/);
            // some more stuff...

        } catch (UnknownHostException ex) {
            System.out.println("Server not found: " + ex.getMessage());
        } catch (IOException ex) {
            System.out.println("I/O error: " + ex.getMessage());
        }

Proxy.Type.SOCKS应该支持 SOCKS4 和 SOCKS5 代理。当我尝试使用 SOCKS4 代理时,我收到一条错误消息:malformed reply from socks server. 当我使用 SOCKS5 代理时,一切正常。如何更改我的代码以支持 SOCKS4?我正在使用 Java 16。

标签: javaservertcpproxysocks

解决方案


推荐阅读