Ste*_*eil 5 java io nio blocking
通常,您有一个绑定的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();
Run Code Online (Sandbox Code Playgroud)
但是,返回的套接字的getInputStream()和getOutputStream()功能似乎不同。仅当使用上一次调用接受套接字时,jsch才能使用它。在前三个案例中,它失败了(很抱歉:我不知道为什么)。
那么有没有办法转换这样的套接字?
Ale*_*yak -1
此序列适用于我们的生产环境:
final SocketAddress serverAddr =
new InetSocketAddress(
bind_address,
server_port
);
final ServerSocketChannel serverChannel = ServerSocketChannel.open( );
serverChannel.socket( ).bind(
serverAddr,
backlog
);
final SocketChannel socketChannel = serverChannel.accept( );
final Socket socket = socketChannel.socket( );
final OutputStream out = socket.getOutputStream( );
final InputStream in = socket.getInputStream( );
Run Code Online (Sandbox Code Playgroud)
默认情况下,所有通道均处于blocking模式。
请注意,我没有显示任何清理/异常处理代码。
另外,还有一些与 NIO 和套接字流相关的错误
| 归档时间: |
|
| 查看次数: |
1415 次 |
| 最近记录: |