J'essaye d'écrire un programme Java simple et basique où un client envoie une chaîne au serveur et le serveur est supposé répondre avec une chaîne inversée. Je suis sûr que j'ai la structure et le flux de programme corrects mais mon serveur n'est pas lu la chaîne de mon client. J'ai réduit le problème à cette ligne sur le côté serveur: string = inputStream.readLine();
Voici mon code. Quel pourrait être le problème?Communication client-serveur en Java en utilisant des sockets
Server1.java
import java.io.*;
import java.net.*;
class Server1 {
public static void main(String[] args) throws Exception {
String string = null;
ServerSocket myServerSocket = new ServerSocket(4000); //Create Socket
System.out.println("Server Running...");
Socket clientSocket = myServerSocket.accept();
DataInputStream inputStream = new DataInputStream(clientSocket.getInputStream());
PrintStream outputStream = new PrintStream(clientSocket.getOutputStream());
do {
string = inputStream.readLine();
if(string!=null){
//using StringBuilder method to reverse string
StringBuilder input = new StringBuilder();
// append a string into StringBuilder input1
input.append(input);
// reverse StringBuilder input1
input = input.reverse();
// print reversed String
for (int i = 0; i < input.length(); i++) {
outputStream.println(input.charAt(i));
}
}
} while (true);
/*outputStream.println("exit");
outputStream.close();
inputStream.close();
myServerSocket.close();
System.out.println("Server Closed!");*/
}
}
Client1.java
import java.io.*;
import java.net.*;
import java.util.Scanner;
class Client1 {
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in); //Object to read keyboard input
String string = null, response = null; //Variable to store string
Socket mySocket = new Socket("127.0.0.1", 4000); //Create Socket
DataOutputStream outputStream = new DataOutputStream(mySocket.getOutputStream());
DataInputStream inputStream = new DataInputStream(mySocket.getInputStream());
System.out.println("Client Running...");
do {
System.out.println("Type in a string and Press Enter...");
string = sc.next();
outputStream.writeBytes(string);
response = inputStream.readLine();
if (response != null) {
System.out.println("Server Response: " + response);
}
} while (true);
}
}
N'a pas essayé le code, mais '' 'Scanner.next''' met pas de saut de ligne à la fin de la chaîne, et donc le serveur va attendre un saut de ligne indéfiniment. Si le reste du code est correct, envoyez juste une combinaison de '' '\ n''' et/ou' '' \ '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' Note latérale: '' 'Scanner.next''' fournit un jeton,' '' Scanner.nextLine''' fournirait une ligne entière (toujours sans saut de ligne). Side note 2: pour un fonctionnement plus rapide, vous pouvez vouloir '' '' flush''' flux de sortie après l'écriture. – tevemadar