2017-05-29 12 views
0

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で試しましたが、まだ運がありません 誰かがこれを行う方法を教えてもらえますか?

+0

これは意味をなさない。あなたは既に 'SSLSocket'を持っています。そこから平文ソケットのチャンネルに接続するためのIPアドレスとポートを取得しています。平文ではなくSSLを話すことが実際には確実です。元の 'SSLSocket'を使ったのはどういうところでしたか? – EJP

+0

@EJP:それ以上の解決策はありますか?私は様々な方法で試しましたが、解決策は見つかりませんでした。あなたが解決策を持っているなら、本当に役に立つでしょう。 – Rohit

+0

あなたがしようとしていることは明確ではありません。 SSLSocketを使って読み書きをしているのはなぜですか? –

答えて

1

私にはthisというリンクがあります。そして提案はEJPによって与えられる。

今すぐデータを接続して読み取ることができます。

+1

ありがとうございます。非常に便利です:) –

+0

あなたはEJPの提案に従っていますか? – EJP

関連する問題