• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Javaのネットワークに関して)

Javaのネットワーク通信で複数のクライアントにメッセージを送信する方法

このQ&Aのポイント
  • Javaのネットワーク通信で複数のクライアントにメッセージを送る方法を解説します。
  • クライアント側のプログラムは変更せずに、サーバー側のプログラムを改良することで、複数のクライアントとの通信を実現します。
  • ただし、現在の実装ではacceptが呼ばれるとループが停止するため、スレッドを使用しない方法が必要です。具体的な解決策について説明します。

質問者が選んだベストアンサー

  • ベストアンサー
  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.4

>ループが途中で止まっているみたいです。 わたしがなぜ簡略化して >for (int i = 0; i < num; i++) { >sc[i] = ssc.accept(); >} と書いてるか考えませんか? ServerSocket#acceptはクライアントからの接続要求を受けるまで待機するんですよね? で、クライアントは1つしか起動してないんですよね? まず最初に指定した数のクライアントからの接続要求を待つようにコーディングしてるんですから接続要求するクライアントが1つしかないなら2つ目以降のクライアントからの要求を待つのは当然ではないですか。

criminal1006
質問者

お礼

すみません。 新たにコンソールをクライアント数分用意し、それぞれクライアントを立ち上げたら、うまくいきました。 致命的なミスだったようです。 今までの回答ありがとうございました。

criminal1006
質問者

補足

それではプログラムは動かないんですが

その他の回答 (3)

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.3

>確かクライアントからの要求を待機するだった気がします では for (int i = 0; i < num; i++) { sc[i] = ssc.accept(); System.out.println("接続" + i + " : " + sc[i].getRemoteSocketAddress()); bw[i] = new BufferedWriter(new OutputStreamWriter(sc[i].getOutputStream())); } が、何をやってるかはわかるんでは? 簡略化して for (int i = 0; i < num; i++) { sc[i] = ssc.accept(); } でもいいですけど。 クライアント側のプログラムはいくつ起動してますか?

criminal1006
質問者

補足

1つです。 まずループ一回目で1つのクライアントと接続されますが、 要求待ちなので、次のループに行かず入力処理までに処理が行かないのが現状です。 ループが途中で止まっているみたいです。 Javaは並行して接続できないそうで、スレッドを使うのが普通なそうですが、使わないでやるそうなので。

  • teketon
  • ベストアンサー率65% (141/215)
回答No.2

一対多の通信が出来ればいいので、サーバ側は標準入力にこだわらなくてもいいと思うよ。

criminal1006
質問者

補足

どういうことですか?

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.1

ServerSocket#acceptは何をするのか理解していますか?

criminal1006
質問者

補足

確かクライアントからの要求を待機するだった気がします

関連するQ&A