Java BufferedReader未通过套接字接收消息
这种情况是有4个“Helper”线程,每个线程都有一个到所有Helper(包括自身)的连接。我真的很高兴。下面,this.id是一个int,用于标识运行代码的助手。在调试过程中,我看到helper 0(通过所有连接发送)向自己发送消息,但当它应该接收消息时(通过连接0),它的行为就像它的BufferedReader有一个空缓冲区一样 解决:呜呜,我有一个设计缺陷。我确保每个助手只为每个助手保留一个它需要与之通信的套接字,但当助手连接到自身时,这是不正确的。在这种情况下,仅保留一个套接字意味着(与自身)通信的另一个端点丢失 我的程序在这里永远旋转(必须是空缓冲区): 此处的信息为“广播”: 在上述步骤之前设置的插槽IO在此处完成:Java BufferedReader未通过套接字接收消息,java,sockets,io,Java,Sockets,Io,这种情况是有4个“Helper”线程,每个线程都有一个到所有Helper(包括自身)的连接。我真的很高兴。下面,this.id是一个int,用于标识运行代码的助手。在调试过程中,我看到helper 0(通过所有连接发送)向自己发送消息,但当它应该接收消息时(通过连接0),它的行为就像它的BufferedReader有一个空缓冲区一样 解决:呜呜,我有一个设计缺陷。我确保每个助手只为每个助手保留一个它需要与之通信的套接字,但当助手连接到自身时,这是不正确的。在这种情况下,仅保留一个套接字意味着(与
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);
}
如果需要插座设置代码,请告诉我,我会添加它。您的打印机是否启用了自动刷新功能?如果没有,在广播循环结束时使用一个简单的out.flush()可能已经可以了。是的,我可以。好的建议,但不是设置自动冲洗让我几次之前。
for (PrintWriter out : this.helperOuts) {
out.println(this.id + "," + kind + "," + this.clock.getTime());
}
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);
}