Целью моей работы является внедрение совместной и распределенной вычислительной платформы. Действительно, идея состоит в том, чтобы позволить клиенту выполнять операцию одного из этих классов через сервер. Я использую для этого сериализацию. Все идет хорошо для передачи класса и когда я выполняю операцию, но когда я хочу вернуть результат клиенту, ничего не происходит, и я не понимаю, почему. Будет ли у кого-нибудь объяснение, чтобы дать мне? :)
спасибо,
public class Client {
public static void main(String[] zero) {
Socket socket;
try {
// on ouvre la connexion
System.out.println("Création du socket de la part du client");
socket = new Socket(InetAddress.getLocalHost(), 2009);
System.out.println("Début de la sérialization du client ");
ObjectOutputStream oos = null;
try {
// création du fichier avec la classe FileOutputStream
final FileOutputStream fichier = new FileOutputStream("calcul.ser");
// le résultat de la serialization est envoyé dans le fichier
oos = new ObjectOutputStream(fichier);
// création d'un objet à sérializer
Calcul calc = new Calcul("1", "6");
// sérialization de l'objet et envoi
oos.writeObject(calc);
// on vide le tampon
oos.flush();
} catch (final java.io.IOException e) {
e.printStackTrace();
} finally {
try {
if (oos != null) {
oos.flush();
oos.close();
}
} catch (final IOException ex) {
ex.printStackTrace();
}
}
BufferedReader inFromUser =
new BufferedReader(new InputStreamReader(System.in));
BufferedReader inFromServer =
new BufferedReader(new
InputStreamReader(socket.getInputStream()));
String resultat = inFromServer.readLine();
System.out.println("FROM SERVER: " + resultat);
socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public class Serveur {
public static void main(String[] zero) {
ServerSocket socketserver;
Socket socketduserveur;
String resultat = null;
try {
// connexion au client
socketserver = new ServerSocket(2009);
socketduserveur = socketserver.accept();
//on lance la deserialization
ObjectInputStream ois = null;
try {
// création du fichier avec FileInputStream
final FileInputStream fichier = new FileInputStream("calcul.ser");
// le résultat de la déserialization est envoyé dans le fichier
ois = new ObjectInputStream(fichier);
// on stock dans calcul l'objet deserializé
final Calcul calcul = (Calcul) ois.readObject();
//on additionne les deux nombre dans la classe calcul
resultat = String.valueOf(calcul.Addition());
System.out.println("le resultat de l'addition au niveau du serveur est :" + calcul.getResultat());
} catch (final java.io.IOException e) {
e.printStackTrace();
} catch (final ClassNotFoundException e) {
e.printStackTrace();
} finally {
try {
if (ois != null) {
ois.close();
}
} catch (final IOException ex) {
ex.printStackTrace();
}
}
DataOutputStream outToClient =
new DataOutputStream(socketduserveur.getOutputStream());
outToClient.writeBytes(resultat);
socketserver.close();
socketduserveur.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
import java.io.Serializable;
//création de notre classe sérializable
public class Calcul implements Serializable {
// les objets int sont sérializables pas de soucis
private String nombre1,nombre2;
private int resultat;
//création du constructeur
public Calcul (String nombre1, String nombre2) {
this.nombre1=nombre1;
this.nombre2=nombre2;
}
//création de la méthode addition qui va être exécutée sur le serveur
public int Addition() {
int x = Integer.parseInt(nombre1);
int y = Integer.parseInt(nombre2);
resultat = x+y;
return resultat;
}
public int getResultat() {
return resultat;
}
}