Je rencontre des problèmes avec cette question en ce moment. Pour cette question, je dois:Compresser et décompresser des données via des sockets
côté client: compresser chaque ligne d'entrée de la console, l'envoyer au serveur et décompressez chaque message du serveur
côté serveur: décomprimer les données du client, changer la partie inférieure -mettre les lettres en majuscules, les compresser et les renvoyer au client
Le mieux que je puisse faire est de faire tout ce qui précède avec une seule ligne.
côté client:
/* SOCKET CONNECTING STUFF UP HERE */
/*PROBLEMS START AROUND HERE */
String line;
BufferedReader bis = new BufferedReader(new InputStreamReader(System.in));
DeflaterOutputStream compress = new DeflaterOutputStream(socket.getOutputStream(), true);
InflaterInputStream decompress = new InflaterInputStream(socket.getInputStream());
BufferedReader fromClient = new BufferedReader(new InputStreamReader(decompress));
line = bis.readLine();
line = line + "\n";
compress.write(line.getBytes(), 0, line.length());
compress.finish();
System.out.println("Message sent: " + line);
System.out.println("Message Returned : " +fromClient.readLine());
/* closing the streams here */
bis.close();
decompress.close();
compress.close();
fromClient.close();
socket.close();
}
}
côté serveur:
String line = "";
OutputStream outstream = new FileOutputStream("compessserver.txt");
InflaterInputStream decompress = new InflaterInputStream(clientsocket.getInputStream());
BufferedReader fromClient = new BufferedReader(new InputStreamReader(decompress));
DeflaterOutputStream compress = new DeflaterOutputStream(clientsocket.getOutputStream());
while ((line = fromClient.readLine()) != null) {
String upperLine = line.toUpperCase();
System.out.println("Message received and converted: " + upperLine);
System.out.println();
upperLine = upperLine + "\n";
byte[] input = upperLine.getBytes();
outstream.write(input);
outstream.write("\r\n".getBytes());
compress.write(input);
System.out.println("Message returned : " + upperLine);
compress.finish();
if (upperLine.equalsIgnoreCase("x")) {
break;
}
}
decompress.close();
compress.close();
fromClient.close();
outstream.close();
socket.close();
}
}
J'ai vraiment besoin d'aide dans ce s'il vous plaît. Si j'essaye de faire ces entrées multiples à la place, le code entier gâche juste. Été à cela pendant des jours.
EDIT: J'ai oublié de le mentionner. Ce que je suis supposé faire est d'entrer une ligne, de la compresser, de l'envoyer au serveur, de la décompresser par le serveur et des majuscules, de la compresser, de la renvoyer au client. Et puis-je supposé entrée plusieurs lignes jusqu'à ce que je mets dans une seule lettre comme « Q » qui, en cas, se termine le programme
J'ai essayé le code suivant pour le faire fonctionner pour plusieurs lignes
Deuxième essai côté client :
String line;
BufferedReader bis = new BufferedReader(new InputStreamReader(System.in));
DeflaterOutputStream compress = new DeflaterOutputStream(socket.getOutputStream(), true);
InflaterInputStream decompress = new InflaterInputStream(socket.getInputStream());
BufferedReader fromClient = new BufferedReader(new InputStreamReader(decompress));
line = bis.readLine();
while ((!line.equalsIgnoreCase("x"))) {
compress.write(line.getBytes(), 0, line.length());
System.out.println("Message sent: " + line);
System.out.println("Message returned:" +fromClient.readLine());
line = bis.readLine();
}
bis.close();
fromClient.close();
socket.close();
}
}
côté Deuxième essai du serveur:
OutputStream outstream = new FileOutputStream("compessserver.txt");
InflaterInputStream decompress = new InflaterInputStream(clientsocket.getInputStream());
BufferedReader fromClient = new BufferedReader(new InputStreamReader(decompress));
DeflaterOutputStream compress = new DeflaterOutputStream(clientsocket.getOutputStream());
while ((line = fromClient.readLine()) != null) {
String upperLine = line.toUpperCase();
System.out.println("Message received and converted: " + upperLine);
System.out.println();
upperLine = upperLine + "\n";
byte[] input = upperLine.getBytes();
outstream.write(input);
outstream.write("\r\n".getBytes());
compress.write(input);
System.out.println("Message returned : " + upperLine);
if (upperLine.equalsIgnoreCase("x")) {
break;
}
}
decompress.close();
fromClient.close();
outstream.close();
socket.close();
}
}
Quel est le problème? Qu'attendez-vous qu'il se passe? Qu'est-ce qui se passe à la – cubrr
Eh bien, je ne peux le faire fonctionner que si je saisis une seule ligne sur la console. Ce que je suis supposé faire est d'entrer une ligne, de la compresser, de l'envoyer au serveur, de la décompresser par le serveur et des majuscules, de la compresser, de la renvoyer au client. Et puis je devais entrer plus de lignes jusqu'à ce que je mette une seule lettre comme "Q" – BeyondDays
Que se passe-t-il lorsque vous essayez avec deux lignes? Est-ce que vous tapez quelque chose, appuyez sur Entrée, la demande est exécutée, le serveur renvoie la réponse appropriée, puis le programme client se termine? Pouvez-vous indiquer la ligne de code qui, selon vous, devrait amener le programme à demander une deuxième ligne? –