Bonjour,
Voila, je voudrais faire un serveur echo mais j'ai des problemes avec les ObjectInputStream et companie

:
J'ai essayé de remplacer les Object.... par des Data... et cela fonctionnait, mais je cherche à comprendre pourquoi cela ne fonctionne pas avec des Object.
Voici mon serveur qui ne pose pas de probleme
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class Serveur extends Thread {
ServerSocket socketEcoute;
public Serveur(int port) {
try { socketEcoute=new ServerSocket(port);}
catch (IOException e) {System.err.println("Erreur réseau"+e);
System.exit(-1);
}
this.start();
}
public void run() {
try{
while(true) { Socket socketClient=socketEcoute.accept();
Connexion c = new Connexion(socketClient);
}
}catch(IOException e) {System.err.println("Erreur réseau"+e);
System.exit(-1);
}
}
public static void main(String[] args) throws IOException {
new Serveur(9002) ;
new Client("127.0.0.1",9002);
}
}
Voici le client :
import java.io.DataInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.PrintStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
public class Client {
public Client(String adresseIP, int port) {
InetAddress ip = null;
try {
ip = InetAddress.getByName(adresseIP);
}catch(UnknownHostException e) {
System.err.println("Le serveur"+adresseIP+"n'existe pas");
System.exit(-1);
}
try {
Socket server=new Socket( ip ,port);
System.out.println("Connecte a"+adresseIP+"sur le port"+port);
communique(server);
}catch(IOException e) {System.err.println("Erreur réseau"+e);
System.exit(-1);
}
catch(ClassNotFoundException f) {}
}
public void communique(Socket server) throws IOException, ClassNotFoundException {
ObjectInputStream in=new ObjectInputStream(server.getInputStream());
ObjectOutputStream out=new ObjectOutputStream(server.getOutputStream());
DataInputStream stdin= new DataInputStream(System.in); //entree des donnee clavier
while(true) {
String requete= stdin.readLine();
if(requete==null) break;
out.writeUnshared(requete);
out.flush();
String reponse=(String)in.readObject();System.out.println("coouu");
if(reponse==null) {System.out.println("Connexion fermee par le serveur");
break;
}
else traiter(reponse);
}
}
public void traiter(String reponse){
System.out.println("Réponse du serveur :"+reponse);
}
}
Et voici la classe Connexion qui sert de lien entre le serveur et le client :
import java.io.DataInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.PrintStream;
import java.net.Socket;
public class Connexion extends Thread {
ObjectInputStream in;
ObjectOutputStream out;
public Connexion(Socket client) {
try {in=new ObjectInputStream(client.getInputStream());
out=new ObjectOutputStream(client.getOutputStream());
}catch(IOException e) {System.err.println("Erreur réseau"+e);
System.exit(-1);
}
this.start();
}
public void run() {
try {
for(;;) {
String requete=(String)in.readObject();
String reponse=traiter(requete);
out.writeUnshared(reponse);
out.flush();
}
}catch(IOException e){System.err.println("Erreur "+e);
System.exit(-1);
}catch(ClassNotFoundException f){System.out.println(f);}
}
private String traiter(String requete) {
return requete;
}
}