通常,您有一个绑定的tcp端口和几个连接.至少通常有更多连接作为绑定端口.我的情况不同:我想绑定很多端口,通常没有(或至少很少)连接.
所以我想使用NIO来接受传入的连接.
但是,我需要将接受的连接传递给现有的jsch ssh库.这需要IO套接字而不是NIO套接字,它会为每个连接产生一个(或两个)线程.但这对我来说没问题.
现在,我认为以下几行会产生相同的结果:
Socket a = serverSocketChannel.accept().socket();
Socket b = serverSocketChannel.socket().accept();
SocketChannel channel = serverSocketChannel.accept();
channel.configureBlocking( true );
Socket c = channel.socket();
Socket d = serverSocket.accept();
但是,返回的套接字的getInputStream()和getOutputStream()函数似乎工作不同.只有在使用最后一次调用接受套接字时,jsch才能使用它.在前三个案例中,它失败了(我很抱歉:我不知道为什么).
那么有没有办法转换这样的套接字?
最佳答案 从SocketChannel获得的套接字返回的输入和输出流在某些点在通道内部同步.因此,您不能将它们用于SSH等全双工协议,因为系统会锁定.同样适用于通过Channels类从通道转换的流(这是第一种情况相当).