首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java中同时创建几个传出连接

在Java中同时创建几个传出连接
EN

Stack Overflow用户
提问于 2016-08-27 10:28:54
回答 1查看 84关注 0票数 0

我使用Java作为对等协议,需要创建许多同时连接,其中许多连接将失败。不幸的是,在创建下一个连接之前,我似乎需要等待建立一个连接,否则我将得到一个"BindException:无法分配请求的地址:连接“。有谁知道怎么解决这个问题吗?

代码语言:javascript
复制
for (NetworkAddress address : addresses) {
    if (isConnectedTo(address)) {
        continue;
    }
    try {
        SocketChannel channel = SocketChannel.open();
        channel.configureBlocking(false);
        channel.connect(new InetSocketAddress(address.toInetAddress(), address.getPort()));
        // admittedly, 20 seconds is quite long
        long timeout = System.currentTimeMillis() + 20_000;
        while (!channel.finishConnect() && System.currentTimeMillis() < timeout) {
            // Without this loop, I get said exception
        }
        if (!channel.finishConnect()) {
            channel.close();
            continue;
        }
        ConnectionInfo connection = new ConnectionInfo(ctx, CLIENT,
            address,
            listener,
            requestedObjects, 0
        );
        connections.put(
            connection,
            channel.register(selector, OP_READ | OP_WRITE, connection)
        );
    } catch (NoRouteToHostException | AsynchronousCloseException ignore) {
    } catch (IOException e) {
        LOG.error(e.getMessage(), e);
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-28 00:22:29

无法在连接完成之前使用该连接,但可以有任意数量的挂起连接

你可以

  • 轮询连接连接,查看它们是否已连接,或
  • 通过注册OP_CONNECT将连接添加到选择器。

在这两种情况下,我建议调用finishConnect()以确保它已准备好使用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39180086

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档