Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java BufferedReader未通过套接字接收消息_Java_Sockets_Io - Fatal编程技术网

Java BufferedReader未通过套接字接收消息

Java BufferedReader未通过套接字接收消息,java,sockets,io,Java,Sockets,Io,这种情况是有4个“Helper”线程,每个线程都有一个到所有Helper(包括自身)的连接。我真的很高兴。下面,this.id是一个int,用于标识运行代码的助手。在调试过程中,我看到helper 0(通过所有连接发送)向自己发送消息,但当它应该接收消息时(通过连接0),它的行为就像它的BufferedReader有一个空缓冲区一样 解决:呜呜,我有一个设计缺陷。我确保每个助手只为每个助手保留一个它需要与之通信的套接字,但当助手连接到自身时,这是不正确的。在这种情况下,仅保留一个套接字意味着(与

这种情况是有4个“Helper”线程,每个线程都有一个到所有Helper(包括自身)的连接。我真的很高兴。下面,this.id是一个int,用于标识运行代码的助手。在调试过程中,我看到helper 0(通过所有连接发送)向自己发送消息,但当它应该接收消息时(通过连接0),它的行为就像它的BufferedReader有一个空缓冲区一样

解决:呜呜,我有一个设计缺陷。我确保每个助手只为每个助手保留一个它需要与之通信的套接字,但当助手连接到自身时,这是不正确的。在这种情况下,仅保留一个套接字意味着(与自身)通信的另一个端点丢失

我的程序在这里永远旋转(必须是空缓冲区):

此处的信息为“广播”:

在上述步骤之前设置的插槽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);
    }

如果需要插座设置代码,请告诉我,我会添加它。

您的打印机是否启用了自动刷新功能?如果没有,在广播循环结束时使用一个简单的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);
    }