Ситуация такова, что существует 4 «вспомогательных» потока, каждый из которых связан со всеми помощниками (включая самого себя).Я действительно автозапуск.Ниже this.id - это int, используемый для идентификации помощника, выполняющего код.В отладке я наблюдал, как помощник 0 отправлял сообщение самому себе (отправляя по всем соединениям), но когда он должен получить сообщение (по соединению 0), он действует так, как будто его BufferedReader имеет пустой буфер.
Решено: Woops У меня был недостаток дизайна.Я удостоверился, что каждый помощник сохранил только один сокет на каждого помощника, с которым он должен общаться, но это неправильно, когда помощник соединяется с собой.В этом случае сохранение только одного сокета означает, что другая конечная точка связи (с самим собой) потеряна.
Моя программа вращается здесь вечно (должен быть пустой буфер):
boolean clientStreamReady = false;
boolean helperStreamReady = false;
while (!(clientStreamReady || helperStreamReady)) {
clientStreamReady = this.inFromClient.ready();
helperStreamReady = this.helperIns.get(this.id).ready();
if (clientStreamReady) {
message = this.inFromClient.readLine();
}
else if (helperStreamReady){
message = this.helperIns.get(this.id).readLine();
}
}
здесь сообщение «широковещательно»:
for (PrintWriter out : this.helperOuts) {
out.println(this.id + "," + kind + "," + this.clock.getTime());
}
IO из сокетов, настроенный до того, как было сделано выше, выполняется здесь:
for (Socket socket : this.helperSockets) {
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
this.helperOuts.add(out);
this.helperIns.add(in);
}
Если необходим код установки сокета, сообщитея и я добавлю это.