簡単なチャットアプリケーションを実装しています。サーバーは複数のクライアントをリッスンする必要があり、サーバーは1つのクライアントによって入力されたデータをこのサーバーに接続されているすべてのクライアントに送信する必要があります。私はこれを次のコードで実装しました。予期せず、java.net.SocketException:ソケットが閉じられました。誰かがこの例外を解決して、すべてのクライアントにデータを送信するためにコードを変更する必要がある場所を教えてもらえますか?
Client.java
import java.io.*;
import java.net.*;
import java.util.*;
class Client {
public static void main(String args[]) {
try {
InetAddress addr = InetAddress.getByName("172.26.45.132");
Socket skt = new Socket(addr, 1234);
PrintWriter out = new PrintWriter(skt.getOutputStream(),true);
BufferedReader br = new BufferedReader(new InputStreamReader(skt.getInputStream()));
Scanner sc = new Scanner(System.in);
String msg="";
while (msg!="exit") {
msg= sc.next();
out.println(msg);
System.out.println("from Server"+br.readLine());
}
br.close();
out.close();
}
catch(Exception e) {
System.out.print("Whoops! It didn't work!\n");
}
}
}
Server.java
import java.io.*;
import java.net.*;
class Server {
public static ListenClient clients[] = new ListenClient[3];
public static int clientCount = 0;
public static void main(String args[]) {
try {
ServerSocket srvr = new ServerSocket(1234);
Socket skt;
System.out.print("Server has connected!\n");
while(clientCount < 3){
skt = srvr.accept();
clients[clientCount] = new ListenClient(skt,clientCount);
Thread t = new Thread(clients[clientCount]);
clientCount++;
t.start();
}
}
catch(Exception e) {
System.out.println(e);
System.out.print("Whoops! It didn't work!\n");
}
}
}
class ListenClient extends Server implements Runnable{
Socket sc;
int id;
ListenClient(Socket sc, int id){
this.sc=sc;
this.id = id;
}
public void run(){
try{
BufferedReader br = new BufferedReader(new InputStreamReader(sc.getInputStream()));
String msg="";
while((msg=br.readLine())!=null)
{
PrintWriter clientsOut;
for(int j = 0 ; j<=clientCount-1; j++){
clientsOut = new PrintWriter(clients[j].sc.getOutputStream(),true);
clientsOut.println(msg);
clientsOut.close();
}
}
}
catch(Exception e){
System.out.println(e);
}
}
}