Почему вы создаете 10 потоков только для одного сокетного соединения?Я думаю, что вы хотите создать один ClientThread для каждого входящего соединения с сервером чата.Затем добавьте этот единственный ClientThread в список активных чатов.Когда клиент чата завершает сеанс, удалите запись из этого списка.Вам не нужно передавать экземпляр Thread или массив ClientThreads в конструктор ClientThread, поскольку он сам по себе.Просто передайте экземпляр Socket в ClientThread и ссылку на ChatServer.Если вы пытаетесь создать чат.Затем разрешите серверу обрабатывать отправку сообщения всем остальным:
public class ChatServer {
List<ClientThread> activeParticipants;
public void say( ClientThread author, String message ) {
for( ClientThread current : activeParticipants ) {
if( current != author ) {
current.send( message ); // this method will send a message to that client
}
}
}
}
Вам нужно будет либо использовать два потока, либо использовать метод InputStream.available (), чтобы проверить, есть ли какой-либо вход для одного из них.System.in или входной поток вашего сокета.Это позволит вам читать входящие сообщения, а также позволять пользователю одновременно печатать сообщения.Блокировка метода read () будет означать, что вы не сможете видеть сообщения, пока не введете некоторые данные или не получите данные.
Также переместите приветственное сообщение в ClientThread, чтобы не вызывать Socket.getOutputStream () дважды, используядва разных объекта DataOutputStreams.