X-Git-Url: https://git.piment-noir.org/?p=TD_SR.git;a=blobdiff_plain;f=TD2%2FIHM%2FSocketClient.java;fp=TD2%2FIHM%2FSocketClient.java;h=92c7412113f3b2107c0edef45823691430405cd6;hp=0000000000000000000000000000000000000000;hb=15850b4cdcf949dae5a150a7c209bd1b95061121;hpb=957ecacec542117816ecc362cfb9966040d4577b diff --git a/TD2/IHM/SocketClient.java b/TD2/IHM/SocketClient.java new file mode 100644 index 0000000..92c7412 --- /dev/null +++ b/TD2/IHM/SocketClient.java @@ -0,0 +1,133 @@ +import java.io.*; +import java.net.*; +import java.util.*; + +public class SocketClient { + BufferedReader lecture; // pour le flot d'entrée venant du serveur + PrintWriter ecriture; // pour le flot de sortie vers le serveur + ObjectInput oLecture; + ObjectOutput oEcriture; + Socket sock; // le socket client + + public SocketClient() { + // établie une connexion au serveur par un appel + // à connexionServeur() + attributesInit(); + try { + connexionServeur("localhost", 5000); + } + catch (IOException e) { + System.err.println("IOException: " + e); + e.printStackTrace(); + closeRWIO(); + } + } + + public SocketClient(String adresseIPServeur, int portServeur) { + // établie une connexion au serveur par un appel + // à connexionServeur() + attributesInit(); + try { + connexionServeur(adresseIPServeur, portServeur); + } + catch (IOException e) { + System.err.println("IOException: " + e); + e.printStackTrace(); + closeRWIO(); + } + } + + private void connexionServeur(String adresseIPServeur, int portServeur, boolean hasoStream) throws IOException { + // créer un objet socket lié au socket serveur et l'affecte à sock + // puis établie les chaînages de flot nécessaires + // pour l'envoi et la reception de messages + sock = new Socket(adresseIPServeur, portServeur); + + OutputStream OStream = sock.getOutputStream(); + ecriture = new PrintWriter(OStream); + if (hasoStream) + oEcriture = new ObjectOutputStream(OStream); + + InputStream IStream = sock.getInputStream(); + InputStreamReader IMesg = new InputStreamReader(IStream); + lecture = new BufferedReader(IMesg); + if (hasoStream) + oLecture = new ObjectInputStream(IStream); + } + + private void connexionServeur(String adresseIPServeur, int portServeur) throws IOException { + // créer un objet socket lié au socket serveur et l'affecte à sock + // puis établie les chaînages de flot nécessaires + // pour l'envoi et la reception de messages + connexionServeur(adresseIPServeur, portServeur, false); + } + + private void attributesInit() { + sock = null; + lecture = null; + ecriture = null; + oLecture = null; + oEcriture = null; + } + + /** + * Send a message on the opened client socket + * @param msg a string containing the message to send + */ + public void sendMsg(String msg) { + ecriture.println(msg); + ecriture.flush(); + } + + /** + * Send an object message on the opened client socket + * @param msg a string containing the message to send + */ + public void sendoMsg(Message oMsg) throws IOException { + oEcriture.writeObject(oMsg); + oEcriture.flush(); + } + + /** + * Receive a message sent on the opened client socket + * @return a string containing the received message + */ + public String receiveMsg() throws IOException { + String line = new String(); + //FIXME?: read only the line before the ending newline + line = lecture.readLine(); + return line; + } + + /** + * Receive an object message sent on the opened client socket + * @return a string containing the received message + */ + public Message receiveoMsg() throws IOException, ClassNotFoundException { + return (Message)oLecture.readObject(); + } + + /** + * Close all opened I/O streams attached to this object instance + */ + public void closeRWIO() { + try { + if (sock != null) + sock.close(); + if (lecture != null) + lecture.close(); + if (ecriture != null) + ecriture.close(); + if (oLecture != null) + oLecture.close(); + if (oEcriture != null) { + oEcriture.close(); + } + } + catch (IOException e) { + System.err.println("IOException: " + e); + e.printStackTrace(); + } + } + +} // fin classe SocketClient