我试图用异步连接实现客户端应用程序。我想知道在连接到服务器失败后是否可以重用SocketChannel
对象。
SocketChannel channel = SocketChannel.open();
channel.configureBlocking(false);
InetSocketAddress addr = new InetSocketAddress(host, port);
SelectionKey key = channel.register(select, SelectionKey.OP_READ, connection);
channel.connect(addr);
在这之后是select循环,我的套接字最终被选中,因为连接失败了。我想在该频道上排队另一次连接尝试,我似乎没有做任何事情。 channel.isConnectionPending()
方法始终返回true(即使我尝试完成连接)
是摆脱这个SocketChannel
并创建一个新解决方案的唯一解决方案吗?
答案 0 :(得分:1)
Sun已根据GPL发布了Java 6.0源代码。 "Read the source Luke"
我对代码的阅读是你不能第二次打电话给连接。
答案 1 :(得分:0)
您应该发布更多代码,包括选择循环。
答案 2 :(得分:0)
试试看?
我不是百分百肯定,但我怀疑你可以一旦调用并且返回了完成连接,或者抛出一个异常就可以了。
在连接周围放置一个try / catch块,当发现异常时,再次调用channel.connect方法可能是安全的。
如果它不起作用那么答案可能是否定的。