問題タブ [android-vpn-service]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - Android アプリのコールド スタートで、VPN が開始されるまでネットワーク リクエストを防止する
私たちのアプリには、独自にネットワーク リクエストを作成できるさまざまなモジュールがあります。アプリには、安全な接続のために VPN を使用するオプションがあります。VPN サービスは、アプリのネットワークのみを処理します。私の問題は、VPN機能が有効になっているアプリのコールドスタートで、VPNサービスが開始されるまでモジュールがネットワーク要求を行うのを防ぐ方法です。
java - Java でのパケット エンコーディングと C でのパケット デコードの失敗
こんにちは、Base64 でパケットをエンコードする関数が 2 つあります。しかし、クライアントはサーバーに接続できません。エンコードとデコードに問題がある可能性があります。これら 2 つのプログラムは、組み合わせて動作しない可能性があります。これは、Android Java Code から Base64 Encoding の後に TCP パケットを送信し、C で受信およびデコードするためのものです。
ToyVPN Android クライアントと ToyVPNServer を使用しています。リンクはこちら - https://github.com/LipiLee/ToyVpnとhttps://github.com/LipiLee/ToyVpnServer エンコーディング用の Java コードはこちら-
これはデコード用の C コードです。これは、Java Encoding Alphabet と同じデコード アルファベットを使用しています。
java - Java NIO FileChannel - Android TUN ネットワーク インターフェイスからの空の読み取り
コンテキスト:最近java.nio
、Android のVpnService
. 私の実装では、以下に示すように、 のメソッドFileDescriptor
によって返される を にラップしました。establish()
VpnService
java.nio.FileChannel
FileChannel
その後、無期限に読み取り、送信 IPv4 / IPv6 パケットを処理する kotlin コルーチンを作成しました。
問題:以下のスニペットは機能しますが、 から多くの空の読み取りが発生し、ループが不必要FileChannel
にスピンされます。while
私が探しているもの:実際には、それFileChannel
がブロッキング チャネルであることはわかっています。この場合、チャネルはネットワーク インターフェイスによってサポートされているため、読み取る準備ができているパケットがない可能性があります。FileChannel
貴重な CPU サイクルを無駄にすることなく、より効率的な実装につながるより良いアプローチがありますか? 私も新しいアイデアを受け入れています:)
java - Android の BufferedInputStream - 無効な引数エラー
現在、Android を使用するプロジェクトに取り組んでいますVpnService
。パフォーマンス テスト中に、返されたメソッドFileInputStream
に対して作成したからの読み取りが遅いことがわかりました。同じための私の作業コードスニペットは以下のとおりです。FileDescriptor
establish()
コードを最適化するために、他のすべてを同じに保ちながら、次のようにラップFileInputStream
しました。BufferedInputStream
しかし、今私の読み取りメソッドが機能しなくなり、ここにエラーが表示されます。
.txt
間違ったことをしていないことを確認するために、ファイルと aを使用してまったく同じ読み取りアプローチを試みたところBufferedInputStream
、魅力的に機能しました。実装をさらに調べると、以下に示すように、メソッドFileInputStream
の近くにいくつかのコメントが表示されます。available()
私には、Android は標準の JDK よりもわずかに変更されたバージョンを使用しているようです。
注:BufferedInputStream
私が持っているユース ケースは、Android の世界での使用例FileInputStream
ですFileDescriptor
。ここで、FileDescriptor
は仮想ネットワーク インターフェイス/dev/tun0
です。
質問:
BufferedInputStream
a を a の上にラップすることFileDescriptor
がまったく不可能な場合、私の理解にギャップはありますか? JVMで同じことを試したことはありません。- それとも、これは Android 固有のニュアンスですか? その場合、これを克服し、バッファリングされた読み取りを確実にする方法。
どんな助けでも大歓迎です!