問題タブ [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.
java - SocketChannel を介して受信したメッセージから正しい情報を抽出できません
DataOutput ストリームを使用してバイトに変換された文字列を送信しています
次に、SocketChannel を介してそれらを受信します。
受信したメッセージは常に「XXXX XXX」の形式で、X は 0 ~ 9 の任意の数字です。
次に、これらのメッセージを 2 つの部分に分けてみます。
問題は、bytebuffer から変換された文字列を出力すると、値が変わってしまうことがあるということです... 通常は "1234 210" のように正しいのですが、場合によっては 1 桁を切り取って "1234 21" と表示することがあります。しかし、それが正しい場合でも、一致しませんか? また、読み取られるバイト数が常に変化することもわかりました...
ここで何が問題なのか誰にもわかりませんか?
ご協力いただきありがとうございます。
java - java.nio.channels.Selector.select() はゼロを返します
セレクターが機能しない理由を見つけようとしています。コードは次のとおりです。
印刷される値はゼロです。これは、プログラム内の SocketChannel.register の唯一の呼び出しであるため、私が理解している限りでは、
a) 登録中に 1 つの新しい SelectionKey を作成する必要があります。
b) したがって、選択中に 1 つのキーの「ready-operation set」を更新する必要があります。つまり、このメソッドは 1 を返す必要があります。
期待どおりに動作しないのはなぜですか? 「誰の準備完了セットが更新されたか」とは正確にはどういう意味ですか?
java - SelectionKey iterator.remove() が UnsupportedOperationException と無限ループをスローする
接続を開き、サイトにクエリを実行し、ページ数を取得してから、NIO を使用してすべてのページを同時に取得するメソッドがあります。最初のクエリは を使用して実行されURLConnection
、完全に正常に動作します。NIO セレクターとチャンネルを使用しようとすると、次の 2 つの問題が発生します。
1) イテレータからキーを削除しないsize()
と、クエリの印刷と送信が無限ループで実行されます。キーを削除しようとすると、UnsupportedOperationsException が発生します。ばっ!
2) ソケットに書き込んだ後、OP_WRITE からチャネルを登録解除する必要がありますか? もしそうならchannel.register(selector, SelectionKey.OP_READ)
、書面への関心を取り除くために電話することはできますか?
java - SocketChannel.close() もソケットを閉じますか?
サーバーのシャットダウン時に残っているすべての接続を閉じる必要があるサーバー プログラムがあります。私は電話する必要があることを知っていますSocketChannel.close()
。私の質問は、関連付けられているソケットも閉じる必要があるSocketChannel
かどうか、またはSocketChannel.close()
自動的に閉じる必要があるかどうかです。
java - connect() での Android のブロック
認証サーバーに接続して、別のサーバー プログラムを実行している別の Android デバイスの IP アドレスとポートを取得する Android アプリを作成しています。認証サーバーは、リクエストの送信時に正しい接続情報を送信します。問題は、クライアント デバイスが Android サーバーに接続しようとするときです。クライアントは正しい情報を取得し、以前の接続を正常に閉じますが、新しい接続を作成しようとするとハングします。例外はスローされませんが、UI が応答せず、デバイスは最終的にアプリが応答していないと言います。クライアントデバイスとして機能するエミュレータと、サーバーとして機能する実際の電話があります。
以下は、スタックするクライアント コードの一部です。
ip はString
、サーバーの IP アドレスを含む です。port は、サーバーのポート番号です。Log.i()
プログラムがハングする場所を見つけるための 2 つの呼び出しがあります。最初の呼び出しは実行されますが、2 番目の呼び出しは実行されません。このコード セグメントが原因でアプリがフリーズする理由はありますか?
必要に応じてコードをさらに投稿できますが、問題は上記のセグメントにあると確信しています。
java - ServerSocketChannel で I/O ops をブロックする際のタイムアウトの設定が期待どおりに機能しない
私は Java で小さなグループの会話サーバーに取り組んでおり、現在ネットワーク コードをハッキングしていますが、I/O 操作をブロックする際に適切なタイムアウトを設定できないようです。Java の奇妙さ (または、単純に、javadocを誤解しています)。
したがって、これはクラスからの適切なコードですConversationServer
(すべてのセキュリティ チェックとロギングは簡単にするために取り除かれています)。
予想される動作は、最大でもクライアントを接続させるか、ミリ秒 (現在は)Settings.MAX_NUMBER_OF_PLAYERS
後にセットアップを終了させることです。Settings.AWAIT_PLAYER_MS
30000L
何が起こるかというと、Settings.MAX_NUMBER_OF_PLAYERS
クライアントを接続するとすべて問題for
ありませんが (条件により終了します)、そうしないと、SocketTimeoutException
期待どおりにスローされず、サーバーが永久にハングします。
私が正しく理解していればserver.socket().setSoTimeout((int) Settings.AWAIT_PLAYERS_MS);
、十分なはずですが、期待どおりの動作が得られません。
それで、誰でもここでエラーを見つけることができますか?
java - NIO SocketChannel の読み取りタイムアウト?
接続が確立された後、一定期間データが受信されない場合、タイムアウトを設定して NIO SocketChannel を閉じる最良の方法は何ですか?
java - Netty 4 ReadTimeoutHandler が OioEventLoopGroup をスローしない
私はネット初心者です。これは予想される動作ですか?
もう少し詳しく:
これは単なるテストケースなので、少し間違っているかもしれませんが、パイプラインは私の実際のパイプラインに十分に似ています。
基本的に、他に何も触れずにEventLoopGroup
初期化を からに変更NioEventLoopGroup
しOioEventLoopGroup
、ブートストラップ チャネルの設定を からbootstrap.channel(NioSocketChannel.class)
に変更すると、 のスローが停止します。bootstrap.channel(OioSocketChannel.class)
ReadTimeoutHandler
ReadTimeoutExceptions