問題タブ [socketchannel]
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.
sockets - netty を使用して、ソケット サービスで大きなバイト ストリーム (画像など) を送信する方法
私のサーバーは、クライアントにソケット サービスを提供します。私のサーバーDecoderHandler
はFrameDecoder
. クライアントが小さなデータ (約 1024 バイト未満) をサーバーに送信すると、サーバーはそれを正常にデコードしますが、クライアントが画像のコンテンツをサーバーに書き込もうとすると、index-out-bound-exception が発生します。 .
デコーダーによって選択されたバッファーには、サイズの制限が必要だと思います。そこで、パラメーター — バッファーのクラスを出力しました。
次のようになりました。
class org.jboss.netty.buffer.BigEndianHeapChannelBuffer
質問したいのですが、ソケットで画像を送信できるように、バッファのタイプを から に変更できますかBigEndianHeapChannelBuffer
。DynamicChannelBuffer
または、「netty を使用してソケットを介してビッグデータを送信する」問題を解決するのに役立つ他の有効な方法を提供できる人はいますか。
私は本当にあなたの意見が必要です.ありがとうございました!
サーバーからのスタックトレース:
クライアントからのスタックトレース:
java - キーを明示的にキャンセルせずに java.nio.channels.CancelledKeyException を取得する
私はからjava.nio.channels.CancelledKeyException
投げ出されています:
ただし、java.nio.channels.SelectionKey.cancel()
明示的に呼び出しているわけではありません。
重要な情報は、これが EC2 で実行されている私のテスト環境で発生しており、複数のマシン間で通信が行われており、通信のターゲットであるマシンのプロセスを突然強制終了することです。ただし、この例外の出現時間と、開始されたプロセスの終了を関連付けることはできませんでした。これは、基になるソケットが切断されているか、ネットワーク接続の問題がある場合に発生する可能性がありますか?
ありがとう
java - Android クライアント アプリは、socketChannel を使用して通常の複数スレッド サーバーと通信します
通常の TCP サーバーソケット (マルチスレッド) を使用してサードパーティのサーバーと通信する Android JAVA アプリケーションがあります。Android アプリで socketChannel クライアントを使用すると機能しますか? アプリはソケットクライアントを使用していましたが、通常の状態で実行されている場合は問題なく動作しますが、ルーターまたはネットワークに QOS コントロールがあり、送信ビットレートが実際よりも大きい場合 (実際のスループットを自動的に検出しようとしています)後で送信 bps よりもはるかに高い QOS を変更したとしても、クライアント ソケットの書き込みには、1K または 2K のデータでも 1000 ミリ秒または 2000 ミリ秒以上かかるため、かなり長い時間が経過してもパフォーマンスが非常に悪くなります。
サーバーを変更せずに、socketchannel がクライアント側にとって良い解決策であるかどうか疑問に思っています。
ありがとう :)
java - NIO サーバー/クライアントの画像送信の問題
こんにちは、私は NIO サーバー/クライアント プログラムを作成しようとしています。私の問題は、サーバーが 14 バイトしか送信せず、それ以上送信しないことです。私はこれで長い間座っていたので、もう何も見えないので、ここにいる誰かが問題を見ることができるかどうかを確認することにしました
サーバーコード:
クライアント:
java - クライアントがクライアントを閉じた後、SocketChannel を介してクライアントにデータを送信する
私は、ユーザーがクライアントウィンドウを閉じてクライアントプログラムを終了したことを知らせるデータのバイトをクライアントが送信するクライアントとサーバーアプリケーションを持っています。問題は、サーバーがそのクライアントを破棄する前に、最後の通知をそのクライアントに送信する可能性があることです。サーバーがブロッキング モードで SocketChannel の書き込みメソッドを使用する場合、それは無期限にブロックされますか、それとも単に無視されますか? クライアントが切断される前に「切断確認」を待つ必要がありますか?
c++ - クライアントサーバーアプリケーションのチャネル
windsockを使用してデータを転送するためのクライアントサーバープログラムがありますが、クライアント-チャネル-サーバーのようなものが必要です。このプログラムでは、チャネルがクリネットからリクエストを取得するか、サーバーがそれを処理し、チャネルがビジー状態のときにそのリクエストを保存します。キューに入れます。別のアプリケーションとしてチャネルが必要です。私はこれについて少し考えています:
別のアプリケーションまたはdllファイルとして作成することを考えましたが、dllファイルでそれを行う方法がわかりません。ソケットで行う場合は、クライアントやサーバーと同じになります。それで、それを始めるより良い方法またはどこかで始めることができますか?boost:asioやその他のライブラリについては知っていますが、c++の標準ライブラリに何かが必要です。
java - java nio socketchannel: クライアントから複数のサーバーへ
私のプロジェクトは実際にはかなり基本的なものですが、適切な情報を見つけることができません (つまり、複数のクライアントを受け入れるサーバーを作成する方法しか見つけることができません)。
アイデアは非常に単純です。
複数のサーバーに接続し、それらからクエリを実行し、自律メッセージを待機するクライアントを作成したいと考えています。
大まかに言うと、複数のサーバーへの SSH 接続を作成し (Jsch を使用)、ログインを行い、毎分 1 つのコマンドを送信してサーバー上のすべてのアラームを取得することにより、複数のサーバーを監視する単純なプログラムを作成したいと考えています。また、サーバーは、表示されるとすぐにアラームも送信します。
私の質問は次のとおりです。続行する方法の例はありますか? チュートリアルはありますか?(Google はあまり役に立ちませんでしたが、私の努力が足りなかったのかもしれません)。
注:スレッドで通常のソケットを使用して同じことを既に実行できますが、何千ものサーバーをポーリングしたいので、同じ数のスレッド+ソケットを開くのは悪い考えだと言われました...
java - ソケットチャネルでセレクターの登録を解除する方法はありますか
これは非常に簡単な質問ですが、Java用のソケットチャネルを見下ろすセレクターの登録を解除する必要があることがわかりました。
プログラムの後半で次のようなものを呼び出すことができます
また、セレクターはそのソケットチャネルのデータキーをキャッチしなくなります。これにより、サーバー/クライアントの設計を考えると、作業がはるかに楽になります。
java - SocketChannel: 開いているすべてのチャネルを閉じる割り込み
次のシナリオがあります。
- サーバーは ServerSocketChannel を開き、クライアント接続を受け入れます。
- すべての接続 (socketA) は新しいスレッドで処理されます。
- スレッド内で、別のサーバーに接続する新しい SocketChannel (socketB) を開きます。
- この時点で、元のクライアント接続 (socketA) はアイドル状態です。
- 新しい SocketChannel は、サーバーからデータを読み取ります (ブロック)。
今、私はスレッドを中断します。私は、socketB が中断されて閉じられ、socketA が引き続き機能することを期待していました。残念ながら、socketA も中断されます。
何が問題なのですか?
動作を再現するために、次のテスト方法を使用します。