gpt4 book ai didi

java - 客户端线程和服务器,服务器显示客户端 1's message, then client 2' s 消息,然后 1 等

转载 作者:太空宇宙 更新时间:2023-11-04 11:31:22 25 4
gpt4 key购买 nike

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

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

尝试解决问题所采取的步骤:

  1. 查看了几个有关死锁的网站,不确定这是否是同一件事。
  2. 尝试将客户端更改为首先获取输入流,然后再获取输出流,服务器则相反
  3. 考虑摆脱 lambda 语法中的 .filter

重现问题的步骤:

  1. 加载服务器
  2. 加载客户端 1
  3. 加载客户端 2
  4. 客户端 1 上的消息
  5. 客户端 1 上的消息
  6. 客户端 2 上的消息
  7. 因此,每个客户端仅显示一条消息

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 类为每个客户端创建单独的执行线程来解决这个问题,现在可以从每个客户端彼此独立地执行消息。

马特。

关于java - 客户端线程和服务器,服务器显示客户端 1's message, then client 2' s 消息,然后 1 等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43742675/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com