Java ソケットの動作を取得しようとしています。問題は、ソケット Java API を使用している場合に同時に何ができるか、そしてデータの送信と読み取りに多少の遅延があるとどうなるかということです。
一度に読み書き。1 つのソケットクライアントが 1 つの spcket-server に接続されている場合、それらは同時に読み取りと書き込みの両方を行うことができますか? 私の知る限り、TCP プロトコルは全二重なので、理論的にはソケットは 1 つで読み書きできるはずですが、ボット クライアントとサーバー用に 2 つのスレッドを作成する必要があります。私は正しいですか?
一度に N 個のクライアントに書き込みます。複数のソケットクライアントが 1 つのソケットサーバーに接続されている場合、サーバーは一度に複数のクライアントを読み取ることができますか? サーバーは一度に複数のクライアントに書き込むことができますか? NetworkCard の最大物理速度が 1kbyte/sec で、クライアントを 5 台接続した場合、1 台のクライアントに書き込み可能な速度はどれくらいですか?
双方向でのデータの順次送信を実装するにはどうすればよいですか? つまり、サーバーからクライアントに N バイト、次にクライアントからサーバーに M バイト、次にサーバーからクライアントに N バイトを送信したいということです。問題は、両側のいずれかがチャネルに何かを書き込んだ場合、反対側が停止することです。そのデータを読み取る (read() == -1) のは、チャネルが閉じている場合のみです。つまり、チャネルを再利用することはできず、別の接続を開く必要があります。それとも、接続が閉じられるまで read() と write() で仕事をする別のスレッドにリーダーとライターを配置する必要がありますか?
write(); を呼び出す間に遅延があると想像してください。一方では flush() を、もう一方では read() を呼び出します。遅延中 - 書き込まれたデータはどこに保存されますか? 伝わるでしょうか?「間」のどこかに保存される「遅延」データの最大サイズはどれくらいですか?