问题:基本上说两个客户,服务器先显示来自第一个客户的消息,然后依次显示第二个客户,而不显示来自第一个客户的多个消息,然后显示来自第二个客户的一个消息。

预期结果:能够在一个客户端上发送尽可能多的消息,然后在第二个客户端上发送不同数量的消息。

为解决问题而采取的步骤:


看着僵局上的几个站点,不确定这是否是同一回事。
尝试将客户端更改为首先获取输入流,然后获取输出流,然后改为服务器
看着摆脱lambda语法上的.filter


重现问题的步骤:


加载服务器
加载客户端1
加载客户端2
客户端1上的消息
客户端1上的消息
客户端2上的消息
结果,每个客户端仅显示一条消息




public class PrintLine extends Thread {

    private ArrayList<ClientThread> al;
    private Integer count;

    public PrintLine(ArrayList<ClientThread> al, Integer count) {
        this.al = al;
        this.count = count;
    }

    @Override
    public void run() {
        boolean done = false;
        List<ClientThread> lines = new ArrayList<ClientThread>();
        while (!done) {
            al.stream().filter(x -> x.sInput == x.sInput).map(x -> x.getSInput()).forEach(sInput -> {
                try {
                    System.out.println(sInput.readUTF());
                } catch (IOException ex) {
                    Logger.getLogger(PrintLine.class.getName()).log(Level.SEVERE, null, ex);
                }
            });
        }
    }
}


项目的GitHub链接:https://github.com/Runite618/ChatRoomVers2/commits/multiThreading

感谢您的阅读和任何答案。

马修。

最佳答案

发布此信息以防其他人使用。

我通过根据PrintLine类为每个客户端创建单独的执行线程来解决问题,现在可以从每个客户端彼此独立地执行消息。

马特

09-09 22:58
查看更多