0
情况是有4个'Helper'线程,每个线程都有一个连接到所有helpers(包括它自己)的线程。我确实是自动翻版。下面,this.id是一个int值,用于标识运行代码的助手。在调试中,我看过帮助程序0向自己发送消息(通过发送所有连接),但是当它应该接收消息(通过连接0)时,它的行为就像它的BufferedReader有一个空缓冲区。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);
}
如果需要插槽设置密码告诉我,我会添加它。
是的,我愿意。好的建议,但不设置自动冲洗让我几次之前。 – Rooster