httpsを使用し、ポート443で動作するサーバーがあります。サーバーからバイトを読み取る必要があります。 次のコードを使用しています。SocketChannelからデータを読み取ることができません
private void openAndConfigureChannel(Selector sel) throws IOException {
SSLSocketFactory factory =
(SSLSocketFactory) SSLSocketFactory.getDefault();
SSLSocket sslSocket =
(SSLSocket) factory.createSocket(address,port);
sslSocket.startHandshake();
SocketChannel channel = SocketChannel.open();
channel.connect(sslSocket.getRemoteSocketAddress());
channel.configureBlocking(false);
TCLog.i(TAG,"channel:"+channel);
//channel.configureBlocking(false);
channel.register(sel, channel.validOps());
}
、しばらく データ読み出し
private byte[] readData(SelectionKey key) throws Exception {
SocketChannel socketChannel = (SocketChannel) key.channel();
buf.clear();
if (socketChannel .read(buf) == -1) {
socketChannel .close();
Log.i(TAG, "Error during read operation");
}
buf.flip();
byte[] array = buf.array();
int toPosition = buf.limit();
byte[] subarray = ArrayUtils.subarray(array, 0, toPosition);
return subarray;
}
それは私Connection reset by peer
などの例外を提供します。オンラインsocketChannel .read()
。
イベント私はInetSocketAddress
で試しましたが、まだ運がありません 誰かがこれを行う方法を教えてもらえますか?
これは意味をなさない。あなたは既に 'SSLSocket'を持っています。そこから平文ソケットのチャンネルに接続するためのIPアドレスとポートを取得しています。平文ではなくSSLを話すことが実際には確実です。元の 'SSLSocket'を使ったのはどういうところでしたか? – EJP
@EJP:それ以上の解決策はありますか?私は様々な方法で試しましたが、解決策は見つかりませんでした。あなたが解決策を持っているなら、本当に役に立つでしょう。 – Rohit
あなたがしようとしていることは明確ではありません。 SSLSocketを使って読み書きをしているのはなぜですか? –