У меня есть довольно простая многопоточная программа чата, где сервер получает данные от нескольких клиентов, а затем должен передавать сообщения всем клиентам.
Хотя сервер действительно получает все свои данные должным образом, я не могу заставить клиентов получать возвращенные значения.
Я прочитал множество кода и предложений как с StackOverflow, так и с других форумов, но, похоже, не могу найти проблему.
ServerThread имеет PrintWriter "out", объявленный и захваченный как таковой:
private PrintWriter out;
public PrintWriter getWriter(){
return out;
}
public void run() {
try{
out = new PrintWriter(socket.getOutputStream(), true);
in = new BufferedReader (new InputStreamReader(socket.getInputStream()));
Этот метод в ServerThread должен передавать данные вместе:
if(input != null){
//Loggs message to file:
loggMessage(input);
//Loggs message to Server GUI
setOutput(input);
//Prints message to Output
System.out.println(input);
//Sends message to other clients:
for(ServerThread c : UserList){
System.out.println("Client discovered");
PrintWriter clientwriter = c.getWriter();
clientwriter.write(input);
System.out.print(input + " <-- was written to client");
}
}
Консоль (и файл) получают все сообщения, как и ожидалось, а клиенты - нет. Насколько я могу судить, это вызвано тем, что в этой партии кода что-то не так с этой строкой, или что-то не так на стороне клиента
на стороне клиента:
in = new BufferedReader (new InputStreamReader(socket.getInputStream()));
"in" объявляется так за несколько строк до следующего фрагмента кода:
if(in.ready()){
String serverin = in.readLine();
System.out.println(serverin);
setOutput(serverin);
}
Этот system.out.print ничего не печатает. Это заставляет меня верить, что что-то не так уже в if, но я не уверен, что это будет.
Итак, клиенты не будут получать сообщения, и я не уверен, почему.
Когда программа запущена, сервер показывает, что все клиенты были найдены и сообщения соответственно, но они ничего не получат.
Есть идеи?