提问人:seunggyu lee 提问时间:8/3/2023 最后编辑:Martin Prikrylseunggyu lee 更新时间:8/6/2023 访问量:42
当我使用 JSch 时,我可以将自定义 OutputStream 与套接字一起使用吗?
When I use JSch, can I use custom OutputStream with the socket?
问:
当我使用 JSch lib 时,我可以使用自定义吗?OutputStream
我想用 Google Proto 包装 JSch 消息。所以我必须使用自定义.OutputStream
我知道JSch可以设置自定义。所以我做了一个定制.SocketFactory
SocketFactory
但是当会话连接时,它被冻结了。它没有用。
我认为我的自定义中断了与SSH协议的通信。OutputStream
Session session = jSch.getSession( "root", "localhost", 55000 );
session.setPassword( "root" );
session.setConfig( "StrictHostKeyChecking","no" );
session.setSocketFactory( new SocketFactory() {
@Override
public Socket createSocket( String host, int port ) throws IOException, UnknownHostException {
return new Socket( host, port );
}
@Override
public InputStream getInputStream( Socket socket ) throws IOException {
return socket.getInputStream();
}
@Override
public OutputStream getOutputStream( Socket socket ) throws IOException {
return new CustomOutputStream();
}
} );
session.connect();
这是我的自定义流。
public class CustomOutputStream extends OutputStream {
@Override
public void write( int b ) throws IOException {
byte[] a = new byte[] { (byte) b };
write(a, 0, 1);
}
@Override
public void write( byte[] b, int off, int len ) throws IOException {
System.out.println( b.hashCode() );
// Todo
// JschProto.JschContents jschContents = // JschProto.JschContents.newBuilder().setContent( ByteString.copyFrom( b ) )
// .setType( "t" )
// .build();
super.write(b, off, len);
}
}
答:
2赞
Vivick
8/3/2023
#1
您不使用套接字。下面是一个示例,说明如何将其合并到您的设计中。CustomOutputStream
public class CustomOutputStream extends OutputStream {
private OutputStream innerStream;
public CustomOutputStream(Socket socket) {
this(socket.getOutputStream);
}
public CustomOutputStream(OutputStream delegate) {
this.innerStream = delegate;
}
//TODO: Override more methods to delegate to innerStream
@Override
public void write( int b ) throws IOException {
byte[] a = new byte[] { (byte) b };
write(a, 0, 1);
}
@Override
public void write( byte[] b, int off, int len ) throws IOException {
System.out.println( b.hashCode() );
// Todo
// JschProto.JschContents jschContents = // JschProto.JschContents.newBuilder().setContent( ByteString.copyFrom( b ) )
// .setType( "t" )
// .build();
innerStream.write(b, off, len);
}
}
评论
1赞
seunggyu lee
8/4/2023
非常感谢。我用你的解决方案解决了这个问题。
评论