我正在用 Java 设计客户端-服务器聊天应用程序。这是一个安全的应用程序,其中使用加密算法交换消息。我有一台服务器,它可以支持许多客户端。我的问题是,当一个客户端登录服务器时它工作正常,但是当另一个用户登录系统时,服务器开始给我加密文本的错误填充异常。
我无法弄清楚问题所在,根据我的逻辑,当向服务器发出新的连接请求时,服务器会创建一个线程来监听客户端。是否有可能一旦创建了线程类的实例,它就会为第一个客户端正确执行所有处理,但对第二个客户端则不能,因为服务器监听器线程类中的变量已经有一些先前的值,因此加密文本是没有正确解密?
请告诉我如何让这个过程更健壮,这样客户端的数量就不会影响服务器的功能。
你好,代码是这样的:
服务器启动时:
Socket in= serverSocket.accept();
Receive rlt = new Receive(in);
Thread receiveReq = new Thread(rlt);
receiveLoginReq.start();
现在接收线程等待传入消息并根据消息类型进行处理。当调用多个客户端时,服务器工作正常,当一个客户端终止然后再次尝试重新连接时,问题就开始了。服务器总是给出以下模式的错误:
- 第一次出现第二个客户端的 HAsh 不匹配错误
- 第二次 javax.crypto.BadPaddingException: Given final block not properly padded 错误
发生这种情况时,我需要重新启动服务器并重新启动两个客户端,然后两个客户端才能正常工作。但如果一个客户端终止连接并再次尝试重新连接,同样的 2 个错误将以相同的方式发生。然后再次重启服务器。
任何建议将不胜感激。 谢谢
最佳答案
关于java - Java中的并发问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2616227/