0

私は現在、1 つのサーバーで複数のクライアント システムに取り組んでいます。サーバーがPrintWriterを介して1つのコマンドを送信できるように、それを取得しようとしています。これは、そのソケットに接続されているすべてのクライアントに送信されます。ただし、実際には、コマンドは 1 つのクライアントにのみ送信されます。すべてのクライアントは 1 つのソケットで作成され、すべて同じスキャナーを使用します。私がやろうとしていることは可能ですか?

いくつかのコード(役立つ場合)

ソケットの作成:

serverSocketRefresh = new ServerSocket(PORTREFRESH);
refresh = serverSocketRefresh.accept();
Creation of the Print Writer and the Scanner:

networkOutputRefresh = new PrintWriter(refresh.getOutputStream(), true);
networkInput = new Scanner(refresh.getInputStream());

クライアントの提供:

do
{
    // Wait for client...

    client = serverSocket.accept();
    System.out.println("\nNew client accepted.\n");
    handler = new ClientHandler(client,networkOutputRefresh, itemArray, bidderArray);
    handler.start();
} while (true);

すべてのクライアントに送信しようとしているコマンド:

public static void updatePrice()
{   
    networkOutputRefresh.println("1");
}
4

2 に答える 2

0

コードを正しく理解しているかどうかはわかりませんが、クライアントの単一の参照を使用しているようです。また、クライアント参照は最後のクライアント参照を保持するため、printwrite はそのクライアントに対してのみ書き込みます。理想的には、すべてのクライアントに何かを公開したい場合は、クライアント参照のコレクションが必要です。サーバー ソケットで受け入れを取得するたびに、新しいクライアント参照をコレクションに追加します。そして、すべてのクライアントに発行する必要があるときはいつでも、クライアント コレクションを繰り返し処理し、関連するプリントライターを使用して発行します。

于 2013-05-01T04:34:58.320 に答える
0

BufferedReader と BufferedWriter を使用して、クライアントを受け入れるたびに新しいものを作成しないのはなぜですか?

編集:または、その「1」がそのソケットを介して送信する唯一のものである場合は、ソケットを介してバイトとして直接送信します。メソッドは のようなものsocket.write(new byte[] { 1 }, 0, 1)で、もう一方の端で読み取る のようなものだと思いますsocket.read(buffer, 0, 1)。ここで、バッファは長さ 1 のバイト配列です。

于 2013-05-01T03:47:17.507 に答える