私は非常に単純なソケット プログラムを作成しようとしています。基本的には、クライアントが while(true) ループでサーバーからの通信をリッスンし続けることです。今私はまた、クライアントがリッスンしている途中でサーバーにデータを送り返すことができるようにしたいと考えています。
私が考えることができる唯一の解決策は、読み取りと書き込み用のスレッドを作成し、書き込みを行う必要があるたびに読み取りスレッドを中断することです。
より良い解決策はありますか、それともこれが私ができる唯一の方法ですか
私は非常に単純なソケット プログラムを作成しようとしています。基本的には、クライアントが while(true) ループでサーバーからの通信をリッスンし続けることです。今私はまた、クライアントがリッスンしている途中でサーバーにデータを送り返すことができるようにしたいと考えています。
私が考えることができる唯一の解決策は、読み取りと書き込み用のスレッドを作成し、書き込みを行う必要があるたびに読み取りスレッドを中断することです。
より良い解決策はありますか、それともこれが私ができる唯一の方法ですか
2 つのスレッドを使用できます。1 つは読み取り用、もう 1 つは書き込み用です。このようにして、書き込みスレッドはいつでも書き込むことができます (読み取りを停止する必要はありません)。
これを行う別の方法は、setSoTimeout(timeoutMs)read を呼び出す前にソケットで使用することです。これによりSocketTimeoutException、読み取りに timeoutMs ミリ秒よりも時間がかかる場合に がスローされ、その後は好きなように書き込むことができます。
FTP プロトコルの仕様を見てみましょう。コマンド用とデータ用の 2 つのソケット/チャネルを使用して、意図したことを実行します。
リスニング用と書き込み用の 2 つの異なるポートを使用できます。異なるスレッドを使用して操作を実行すると、 while(true) ループで問題が発生することはありません。