0
私は単純なチャットクライアント/サーバーのペアを作成しようとしていて、壁に衝突しました。 1つのクライアントでメッセージを送信するとき以外は、基本的にはすべてが機能していますが、メッセージを送信したクライアントにのみ戻されます。ここで私のjavaチャットサーバープログラムは接続されている各ユーザーにブロードキャストされません
は、サーバーの私のコードです:
import java.io.*;
import java.net.*;
import java.util.*;
public class ChatServer
{
public static ServerSocket servSock;
public static int port;
protected List<ChatHandler> clients;
public static void main(String[] args) throws IOException
{
System.out.println("Applegate Chat Server is now starting.");
try
{
port = Integer.parseInt(args[0]);
servSock = new ServerSocket(port);
System.out.println("Now listening on port " + port + ".");
}
catch (ArrayIndexOutOfBoundsException e)
{
System.err.println("Usage: java ChatServer <port>");
System.exit(0);
}
ChatServer w = new ChatServer();
w.runServer();
}
public void runServer()
{
try
{
while (true)
{
Socket userSocket = servSock.accept();
InetAddress userIP = userSocket.getInetAddress();
System.out.println("Accepted connection from " + userIP.getHostName());
ChatHandler ch = new ChatHandler(userSocket, userIP);
clients = new ArrayList<>();
synchronized (clients)
{
clients.add(ch);
}
ch.start();
}
}
catch (IOException e)
{
System.out.println("IO Exception in runServer: " + e);
}
}
protected class ChatHandler extends Thread
{
protected Socket clientSock;
protected BufferedReader in;
protected PrintWriter out;
protected InetAddress clientIP;
protected String login;
public ChatHandler(Socket sock, InetAddress clnt) throws IOException
{
clientSock = sock;
clientIP = clnt;
in = new BufferedReader(new InputStreamReader(sock.getInputStream()));
out = new PrintWriter(sock.getOutputStream(), true);
}
public void run()
{
String line;
try
{
while((line = in.readLine()) != null)
{
out.println(line);
}
}
catch (IOException e)
{
System.out.println("IO Exception: " + e);
}
}
}
}
は、どのように私は、スレッドは、すべての人に受信したメッセージを送信することになるだろうか? –