【问题标题】:Socket/Proxy problem in javajava中的套接字/代理问题
【发布时间】:2010-09-23 04:27:23
【问题描述】:

我有一个套接字连接到代理,然后连接到我指定的远程服务器。但是我想要从代理到删除服务器的多个连接。所以我想为同一个代理创建 4 个套接字,并从 4 个套接字连接到远程服务器。

当我这样做时它不起作用,它只连接到代理一次。

这是伪代码:

static Socket[] liveCon = new Socket[300];
// This is the class that assigns a proxy and connects
// it is a temporary thread that connects and ends.
sockClass sockets = new sockClass; 

class main {
    for (int i = 0; i < livecon.length; i++) {
        sockets[i].start(); // Thread ends after it is connected
    }
}

class sockClass{
   main.liveCon[index] = new Socket(proxy);
   main.liveCon[index].connect(ep);
   main.liveCon[index].setPerformancePreferences(1, 2, 0);
   if (main.liveCon[index].isConnected() == true) {
       myOutput = new PrintStream(main.liveCon[index].getOutputStream());
       main.liveCon[index].setKeepAlive(true);
   }
}

【问题讨论】:

    标签: java sockets proxy socks


    【解决方案1】:

    听起来您没有使用线程,而是尝试按顺序连接到代理。

    由于您不发布问题示例,因此很难解决问题。

    尝试运行您的程序 4 次,以查看问题是出在您的代码中还是在代理本身。

    我希望这会有所帮助。

    【讨论】:

    • 是的,我没有使用线程,我使用的是套接字数组。不是线程连接的问题吗?如果是这样,有什么方法可以在不使用线程的情况下修复它。
    • 使用不同的程序。问题是。您有一组套接字,对,第二个套接字仅在第一个完成后才连接,第三个仅在第二个完成后连接,依此类推。因此,当您想要并行连接时,您将按顺序连接它们。不是那么难(当你知道怎么做时:P 和任何事情一样)但是,这个(线程)是你遇到的主要问题。
    • 为什么要同时连接4个socket?
    • 哦,我明白了,忘记我说的话(虽然它是使用线程的一个很好的替代方案) 很可能您在第一个套接字连接和后续连接失败时断开连接。如果不查看源代码,几乎不可能回答您的问题。我希望你知道这一点。
    • 我的代码页面很长,哈哈,但基本上我正在做的是连接到数百个代理,在我遍历每个代理后,我再次遍历它们并创建另一个连接实例。我做了 4 次循环并保持每个套接字保持正常。但是,我每个连接到代理的套接字只有 1 个,这很奇怪。因此,在我为代理创建一个套接字大约 30 秒后,我使用相同的代理创建另一个套接字。我将尝试在明天发布一些代码并向您展示我在做什么,但我现在不想浏览所有代码。
    【解决方案2】:

    如果您不使用线程,除非您使用非阻塞 I/O,否则您无法正确执行此操作。

    【讨论】:

    • 我不明白为什么这是一个问题。我所有的套接字都尝试连接到单个代理,但只有 1 个连接成功。你能解释一下为什么会这样吗?
    • 没有看到你的代码。但这毫无意义。修复每个套接字使用一个线程,讨论有一些意义。
    • 那么“它不起作用”是什么意思?其他三个连接尝试会发生什么?并且您的套接字处理线程在连接时不应该完成,它们应该继续处理该套接字的所有 I/O。
    • 我有一个线程在维护所有套接字的 io。
    猜你喜欢
    • 1970-01-01
    • 2012-04-07
    • 1970-01-01
    • 2021-09-02
    • 2019-09-19
    • 1970-01-01
    • 2019-10-11
    • 2021-12-17
    • 1970-01-01
    相关资源
    最近更新 更多