Я пытаюсь создать многопоточный чат, к которому могут присоединиться несколько человек.Цель состоит в том, чтобы, когда один человек отправлял сообщение, оно печаталось на экране всех остальных.Вот код сервера:
package edu.fcps.ab;
import java.io.*;
import java.net.*;
import java.util.*;
public class TestServer implements Runnable{
private int port;
public static ServerSocket serverSock;
public static Vector<PrintWriter> outputs = new Vector<PrintWriter>();
public PrintWriter output;
public BufferedReader input;
public TestServer(int p) {
port = p;
}
public static void main (String args[]) {
Scanner scan = new Scanner(System.in);
System.out.println("Enter port number");
int port = scan.nextInt();
TestServer ts = new TestServer(port);
Thread t = new Thread(ts);
t.start();
}
@Override
public void run() {
try {
if(serverSock == null)
serverSock = new ServerSocket(port);
Socket sock = serverSock.accept();
TestServer ts = new TestServer(port);
Thread t = new Thread(ts);
t.start();
output = new PrintWriter(sock.getOutputStream(), false);
outputs.add(output);
input = new BufferedReader(new InputStreamReader(sock.getInputStream()));
while(t.isAlive()) {
String message = input.readLine();
if(message != null) {
System.out.println(message);
for(PrintWriter w : outputs) {
w.println(message);
w.flush();
}
}
}
} catch(Exception e) {
System.out.println("An error occurred");
e.printStackTrace();
}
}
public PrintWriter getOutput() {
return output;
}
}
Вот код клиента:
package edu.fcps.ab;
import java.io.*;
import java.net.*;
import java.util.*;
public class TestClient implements Runnable{
private String username;
public PrintWriter out;
public static void main (String args[]) {
TestClient tc = new TestClient();
Thread t = new Thread(tc);
t.start();
}
@Override
public void run() {
Scanner s = new Scanner(System.in);
System.out.println("Enter port");
int port = s.nextInt();
String ip = "127.0.0.1";
try {
Socket sock = new Socket(ip, port);
System.out.println("Successfully connected");
System.out.println("Enter username");
username = s.next();
System.out.println("Welcome " + username);
out = new PrintWriter(sock.getOutputStream(), true);
out.println(username + " connected");
InputStream stream = sock.getInputStream();
Scanner input = new Scanner(stream);
BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
String sent;
while(true) {
if(stream.available() > 0) {
if(input.hasNextLine()) {
String message = input.nextLine();
String[] split = message.split(" ");
if(!(split[0].contains(username)))
System.out.println(message);
}
}
sent = stdin.readLine();
if(sent != null) {
out.println(username + ": " + sent);
}
}
} catch(Exception e) {
out.println(username + " disconnected");
}
}
}
В настоящее время к нему могут присоединиться несколько человек, и он распечатывает все сообщения на стороне сервера, носообщения не распечатываются на всех клиентах.Почему это происходит?