Почему моя простая программа java-чата успешно улавливает только некоторые из полученных сообщений?

#java #networking

Вопрос:

Я создал простую программу для обмена зашифрованными сообщениями на java, которая имеет 2 programs . A server , которая передает сообщения, и client программа, которая отправляет и получает сообщения с сервера. Теперь моя проблема в том, как клиентская программа прослушивает входящие сообщения, я полагаю. Отправка сообщений не имеет проблем и была протестирована, но когда приходит сообщение, вероятность того, что прослушиватель действительно правильно расшифрует сообщения без ошибок, составляет 1 к 3.

Мы с моим другом потратили некоторое время, пытаясь понять, почему это так, я верю, что это результат того, как мы создали листнера. Я свяжу код листнера ниже. Он запускается на thred и зацикливается на цикле while, в котором выполняется код, который расшифрует сообщение и отобразит его пользователю.

 
package openmsgc1;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.nio.charset.Charset;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.crypto.BadPaddingException;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;


public class ClientReceiver implements Runnable{
    private Socket client;
    public BufferedReader in;
    public PrintWriter out;
    public Encryption e;
    
    public ClientReceiver(Socket clientSocket) throws IOException {
        this.client = clientSocket;
    }
    
    @Override
    public void run(){
        in = null;
        out = null;
        String request = null;
        try {
            
            this.in = new BufferedReader(new InputStreamReader(client.getInputStream()));
            this.out = new PrintWriter(client.getOutputStream());
            
            while(true){
                request = in.readLine();
                String DecryptedMSG = "";
                
                
                if(request!=null){
                    System.out.println("Got to the if statement"); 
                    byte[] decodedmsg = request.getBytes(Charset.forName("ISO-8859-1")); // decodes message
                    try {
                        System.out.println(request);
                        DecryptedMSG = e.decrypt(decodedmsg, e.privateKey); // decrypts message with users private key
                        System.out.println("Past line 55 on thread");
                    } catch (InvalidKeyException | NoSuchAlgorithmException | NoSuchPaddingException | BadPaddingException | IllegalBlockSizeException ex) {
                        Logger.getLogger(ClientReceiver.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }else{
                    System.out.println("No request");
                }
                if(DecryptedMSG.equals(null)==false){
                System.out.println(DecryptedMSG);
                // Outputs message to user
                }
                
                
                
                // System.out.println(request);
            }
        } catch (IOException ex) {
            Logger.getLogger(ClientReceiver.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

 

Если вам нужно, чтобы я что-нибудь прояснил, просто дайте мне знать.