問題タブ [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.

0 投票する
1 に答える
276 参照

java - java socketchannel を使用して c ベースの TCP サーバーと通信できますか

c++ ベースの TCP サーバーと通信するために socketchannel を使用できますか

0 投票する
2 に答える
601 参照

java - char配列をjavasocketchannelに書き込む方法

char配列をjavasocketchannelに書き込む方法。ByteBufferを使用するため、charデータをsocketchannelに書き込むことができません。

0 投票する
1 に答える
1302 参照

java - Java NIO SocketChannel 読み取り事前定義バイト数

Java NIO ソケット サーバーがあります。

サーバーはJSONObjectsリモート クライアントから取得しています。SocketChannel.read(ByteBuffer)チャネルから読み取るためにメソッドを使用しています。各メッセージは、現在のメッセージの終わりを示す '\n' で終わります。

私の問題は、メソッドがより多くのバイトを読み取り、「\ n」の後に到達することがあることです.. 「\ n」が見つかるまでのread()みから読み取る方法はありますか? SocketChannelたぶんバイトごとに読むことを考えました(実装方法に関するドキュメントが見つかりませんでした..)?

他の解決策はありますか?

0 投票する
2 に答える
536 参照

java - スレッドによる Java オーバーヘッド。ソケットまたはソケットチャネルを使用する必要がありますか?

Java で作成しているインスタント メッセージ プログラムの 2 つの設計があります。

最初のアイデアは、2 つの別々のスレッドを使用します。最初のスレッドは GUI を無視し、ブロッキング ソケットへの書き込みを通じてインスタント メッセージ データを送信します。2 番目のスレッドは、別のブロッキング ソケットを使用して、フレンドからの受信パケットを監視します。スレッドを使用することがこの問題に対処するための最良の方法であるかどうかはわかりませんが、ノンブロッキング ソケットチャネルを使用するよりも処理が簡単であることがわかりました。

私が持っている 2 番目の設計は、非ブロッキング ソケット チャネルを 1 つのスレッドで使用することです。これは、着信データまたは発信データがあるかどうかを時折チェックします。この設計の良いところは、スレッド間のリソース共有について心配する必要がないことですが、より効率的かどうかはわかりません。

正直なところ、私が本当に気にかけているのは、スムーズかつ効率的に実行されるプログラムを作成することだけです。より効率的で簡単に構築できる設計は何だと思いますか? 私はただ遊んでいるだけなので、私の感覚が教えてくれる以外に、効率的で強力なクライアント/サーバー プログラムを構築した経験はありません。

0 投票する
3 に答える
1745 参照

java - Java nio read() return -1

この問題を理解しようとするのは初めてではありませんが、これが最後になることを願っています:

背景:

Java SocketChannel NIOサーバーがノンブロッキング モードで動作しています。

このサーバーには、メッセージを送受信する複数のクライアントがあります。

"keepalive"各クライアントは時々メッセージでサーバーへの接続を維持します。サーバーの主なアイデアは、クライアントが「常に」接続を維持し、「プッシュ」モードでサーバーからメッセージを受信することです。

今私の質問に:

Java NIOread()関数では、read() が -1 を返す場合、その EOS を意味します。

ここで尋ねた質問で、ソケットが現在のストリームを終了し、閉じる必要がないことを意味することに気付きました..

これについてGoogleでもう少し検索すると、接続が反対側で閉じられていることを意味することがわかりました..

  1. 「ストリーム」という言葉は正確には何を意味しますか? クライアントから送信されている現在のメッセージですか?もうメッセージを送信するクライアント側接続の機能ですか?

  2. SocketChannelクライアントが閉じるように言わなかった場合、クライアント側でa が閉じられるのはなぜですか?

  3. read()return -1 とピア I/O エラーによる接続リセットの違いは何ですか?

これは私が読む方法ですSocketChannel

0 投票する
3 に答える
44689 参照

java - ソケットとソケットチャネル

私はSocketChannelsNIO全般を理解しようとしています。私は、通常のソケットを操作する方法と、(通常のブロッキングソケットを使用して)単純なクライアントサーバーごとのスレッドを作成する方法を知っています。

だから私の質問:

  • SocketChannelとは何ですか?
  • Socketの代わりにSocketChannelを使用するときに得られる追加の機能は何ですか。
  • チャネルとバッファの関係は何ですか?
  • セレクターとは何ですか?
  • ドキュメントの最初の文はA selectable channel for stream-oriented connecting sockets.です。どういう意味ですか?

私もこのドキュメントを読みましたが、どういうわけか私はそれを取得していません...

0 投票する
1 に答える
244 参照

java - クライアント側のプログラミングでセレクターの概念を使用できますか

実行時に複数の TCP ベースのサーバーと通信する必要がある Android アプリケーションを開発しています。現在、Java ソケットを使用して通信し、スレッドを使用して複数のクライアントを処理しています。しかし、アプリケーションには、実行時により多くのサーバーと通信する必要があるという要件があります。そのため、一度に複数のサーバーを処理するために、Java NIO の概念とセレクターを使用しています。しかし、現在私が直面している問題は、どのサーバーとも通信できないことです。したがって、クライアント側でセレクターを使用できるかどうかを提案してください。

0 投票する
1 に答える
1103 参照

java - IO 多重化を使用する Java エコー サーバー クライアント

私はクライアントサーバーとJavaプログラミングの両方に比較的慣れていません。やるべき課題があり、Javaでエコークライアントとサーバーを書くためにこのプログラムに行き詰まっています。私はいつもここで答えを見つけていたので、もう一度スタックオーバーフローに頼っています。

これはサーバーです:

}

これはクライアントです:

}

エラーは、次のエラーが原因でサーバーが終了していることです: Exception in thread "main" java.lang.ClassCastException: sun.nio.ch.Util$2 cannot be cast to java.util.ArrayList at Server_select.main(Server_select.ジャワ:40)

残りが大丈夫かどうか知りたかっただけですか?これに関して私が持っている他のいくつかの疑問を明確にしたいと思いました。前もって感謝します :)

0 投票する
1 に答える
4084 参照

java - ソケットチャネルのブロッキングモードを切り替える方法は?

SocketChannelクライアント側のサーバーからTCPストリームを受信するために使用します。例えば:

次に、このselector.select()メソッドを使用して読み取りの問題を処理できます。

具体的なハンドルで、サーバー側からtcpストリームを受信するためにInputStream(ストリームラインを読みたい)を使用したいことを考えると、2つの方法があります.1つは使用する方法channel.socket()、もう1つはチャネルを使用する方法です。ここではchannel.socket()、たとえば、を使用します。

OK、これでtcpストリームの読み取りが1回終了しました。セレクターを引き続き使用するには、チャネルブロックモードをfalseに設定する必要があります。

問題は、チャンネルとセレクターを組み合わせたキーがキャンセルされたということです。チャンネルを再度登録したいのですが、どうすればよいですか?①で再度使用するmychannel.register(selector, SelectionKey.OP_READ)とスローするようExceptionです。

私のrun()メソッドコードは次のとおりです。

スローされる例外は次のとおりです。