+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