#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);
}
}
}
Если вам нужно, чтобы я что-нибудь прояснил, просто дайте мне знать.