客户端线程和服务器,服务器显示客户端1的消息,然后是客户端2的消息,然后是1等

时间:2017-05-02 16:14:30

标签: java multithreading server client

问题:基本上对于说两个客户端,服务器连续显示来自第一个客户端的消息,然后是第二个客户端,而不显示从第一个客户端输入的多个消息,然后说出来自第二个客户端的一条消息。

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

尝试解决问题的步骤:

  1. 看了几个关于死锁的网站,不确定这是不是一回事。
  2. 尝试将客户端更改为首先获取输入流,然后尝试更改输出流,然后将服务器改为输入流
  3. 看看在lambda语法
  4. 上摆脱.filter

    重现问题的步骤:

    1. 加载服务器
    2. 加载客户端1
    3. 加载客户端2
    4. 客户端1上的消息
    5. 客户端1上的消息
    6. 客户2上的消息
    7. 因此,每个客户端只显示一条消息
    8. 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

      感谢阅读和任何答案。

      马修。

1 个答案:

答案 0 :(得分:0)

发布此信息以防其他人帮助。

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