I/O ストリームの各ペアが同時に異なるデータを送信できるように、サーバーのソケットとクライアントのソケットの多くの独立した I/O ストリームを並列に接続できますか?
サーバーとクライアント間のソケット数を増やさずに Java でこのような接続を実現するにはどうすればよいですか?
I/O ストリームの各ペアが同時に異なるデータを送信できるように、サーバーのソケットとクライアントのソケットの多くの独立した I/O ストリームを並列に接続できますか?
サーバーとクライアント間のソケット数を増やさずに Java でこのような接続を実現するにはどうすればよいですか?
入力用に 1 つのストリームと出力用に 1 つのストリームが常に存在するため、それ以上ストリームを追加することはできません。
ただし、sje397がコメントしたように、同じストリームを使用して「異なる」データを送信できます。受信側でチャネルを区別する方法を考え出すだけで、データを適切に再構築できます。これはプロトコルの設計上の問題です。
編集:あなたの例では、パケットのタイプ(またはチャネル)、データの長さ、および必要に応じてファイルパケットの追加情報を伝えるヘッダーを持つパケット構造を持つことができます。長さフィールドが 1 バイトであると仮定すると、最大パケット サイズ (文字列パケットの場合) は1 + 1 + 255 = 257 bytes
.
サーバーがバイトを読み取るとき、最初のバイトでパケットのタイプをチェックします。String パケットであると判断した後、長さを読み取り、次にペイロードを読み取ります。その後、プロセスが繰り返されます。
ファイル データの場合、追加のヘッダー情報が必要になる可能性が高くなります。そうしないと、文字列以外のパケットは単なるバイトの集まりになります。
これは、プロトコルがパケットベースになることを意味するため、一度に 1 パケットずつデータを書き込む必要があります。データ パケットの最大サイズが 64K であると仮定すると、次の方法でデータを送信できます (ネットワーク パイプであると想像してください)。
Client -> 257(S) -> 64K(D) -> 257(S) -> 64K(D) -> 257(S) -> Server
1 つのネットワーク接続で 2 つの異なる種類のデータをインターリーブできます。