gpt4 book ai didi

java - Java中的并发问题

转载 作者:行者123 更新时间:2023-11-30 11:59:25 26 4
gpt4 key购买 nike

我正在用 Java 设计客户端-服务器聊天应用程序。这是一个安全的应用程序,其中使用加密算法交换消息。我有一台服务器,它可以支持许多客户端。我的问题是,当一个客户端登录服务器时它工作正常,但是当另一个用户登录系统时,服务器开始给我加密文本的错误填充异常。

我无法弄清楚问题所在,根据我的逻辑,当向服务器发出新的连接请求时,服务器会创建一个线程来监听客户端。是否有可能一旦创建了线程类的实例,它就会为第一个客户端正确执行所有处理,但对第二个客户端则不能,因为服务器监听器线程类中的变量已经有一些先前的值,因此加密文本是没有正确解密?

请告诉我如何让这个过程更健壮,这样客户端的数量就不会影响服务器的功能。

你好,代码是这样的:

服务器启动时:

Socket in= serverSocket.accept();

Receive rlt = new Receive(in);
Thread receiveReq = new Thread(rlt);
receiveLoginReq.start();

现在接收线程等待传入消息并根据消息类型进行处理。当调用多个客户端时,服务器工作正常,当一个客户端终止然后再次尝试重新连接时,问题就开始了。服务器总是给出以下模式的错误:

  1. 第一次出现第二个客户端的 HAsh 不匹配错误
  2. 第二次 javax.crypto.BadPaddingException: Given final block not properly padded 错误

发生这种情况时,我需要重新启动服务器并重新启动两个客户端,然后两个客户端才能正常工作。但如果一个客户端终止连接并再次尝试重新连接,同样的 2 个错误将以相同的方式发生。然后再次重启服务器。

任何建议将不胜感激。谢谢

最佳答案

不要与线程共享可变数据。使用函数式风格——没有对象状态。如果您确实需要与线程共享一些数据,请使用消息传递。

检查您是否以正确的方式关闭连接。

你可以使用像Jetty这样的真实服务器非常容易安装。

关于java - Java中的并发问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2616227/

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