public class Main {
+ private static void main1() {
+ SocketClient client = new SocketClient();
+
+ try {
+ client.sendMsg("Line 1 Line 2");
+ String msg = client.receiveMsg();
+ System.out.println(msg);
+ }
+ catch (Exception e) {
+ System.err.println("Exception: " + e);
+ }
+ finally {
+ client.closeRWIO();
+ }
+ }
- public static void main (String[] args) {
-
- ClientSimplifie client = new ClientSimplifie();
- client.sendMsg("Line 1 Line 2");
- String msg = client.receiveMsg();
- System.out.println(msg);
+ public static void main (String[] args) {
- client.closeRWIO();
+ try {
+ SocketClient client = new SocketClient();
+ ThreadClientSend thCS = new ThreadClientSend(client);
+ thCS.setMsg("Line1 Line2");
+ Thread thS = new Thread(thCS);
+ Thread thR = new Thread(new ThreadClientReceive(client));
+ thS.setName("thS");
+ thS.start();
+ thR.setName("thR");
+ thR.start();
+ }
+ catch (Exception e) {
+ System.err.println("Exception: " + e);
+ }
+ finally {
+ client.closeRWIO();
+ }
}
--- /dev/null
+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
+ Socket sock; // le socket client
+
+ public SocketClient() {
+ // établie une connexion au serveur par un appel
+ // à connexionServeur()
+ connexionServeur("localhost", 5000);
+ }
+
+ public SocketClient(String adresseIPServeur, int portServeur) {
+ // établie une connexion au serveur par un appel
+ // à connexionServeur()
+ connexionServeur(adresseIPServeur, portServeur);
+ }
+
+ private void connexionServeur(String adresseIPServeur, int portServeur) {
+ // 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
+ try {
+ sock = new Socket(adresseIPServeur, portServeur);
+ }
+ catch (IOException e) {
+ System.err.println("IOException: " + e);
+ }
+ InputStream IStream = null;
+ try {
+ IStream = sock.getInputStream();
+ }
+ catch (IOException e) {
+ System.err.println("IOException: " + e);
+ }
+ InputStreamReader IMesg = new InputStreamReader(IStream);
+ lecture = new BufferedReader(IMesg);
+
+ OutputStream OStream = null;
+ try {
+ OStream = sock.getOutputStream();
+ }
+ catch (IOException e) {
+ System.err.println("IOException: " + e);
+ }
+ ecriture = new PrintWriter(OStream);
+ }
+
+ /**
+ * Send a message on the opened client socket
+ * @param msg a string containing the message to send
+ */
+ public synchronized void sendMsg(String msg) {
+ while (msg.isEmpty()) {
+ try {
+ wait();
+ }
+ catch (InterruptedException e) {
+ System.err.println("InterruptedException: " + e);
+ }
+ }
+ ecriture.println(msg);
+ ecriture.flush();
+ notifyAll();
+ }
+
+ /**
+ * Receive a message sent on the opened client socket
+ * @return a string containing the received message
+ */
+ public String receiveMsg() {
+ String line = new String();
+ try {
+ //FIXME: read only the line before the ending newline
+ line = lecture.readLine();
+ }
+ catch (IOException e) {
+ System.err.println("IOException: " + e);
+ }
+ return line;
+ }
+
+ /**
+ * Close all opened I/O streams attached to this object instance
+ */
+ public void closeRWIO() {
+ ecriture.close();
+ try {
+ lecture.close();
+ }
+ catch (IOException e) {
+ System.err.println("IOException: " + e);
+ }
+ }
+
+} // fin classe SocketClient
--- /dev/null
+import java.util.concurrent.ThreadLocalRandom;
+
+public class ThreadClientReceive implements Runnable {
+ private SocketClient client;
+ private String msg = new String();
+
+ ThreadClientReceive(SocketClient c) {
+ client = c;
+ }
+
+ /**
+ * @return the msg
+ */
+ public String getMsg() {
+ return msg;
+ }
+
+ public void run() {
+ while (true) {
+ try {
+ msg = client.receiveMsg();
+ System.out.println (Thread.currentThread().getName() + " a recu " + msg);
+ try {
+ Thread.sleep(ThreadLocalRandom.current().nextInt(101));
+ }
+ catch (InterruptedException e) {
+ System.err.println("InterruptedException: " + e);
+ }
+ }
+ catch (Exception e) {
+ System.err.println("Exception: " + e);
+ }
+ //finally {
+ // client.closeRWIO();
+ //}
+ }
+ }
+}
--- /dev/null
+import java.util.concurrent.ThreadLocalRandom;
+
+public class ThreadClientSend implements Runnable {
+ private SocketClient client;
+ private String msg = new String();
+
+ ThreadClientSend(SocketClient c) {
+ client = c;
+ }
+
+ /**
+ * [setMsg description]
+ * @param m [description]
+ */
+ public void setMsg(String m) {
+ msg = m;
+ }
+
+ public void run() {
+ while (true) {
+ try {
+ client.sendMsg(msg);
+ System.out.println (Thread.currentThread().getName() + " a envoye " + msg);
+ try {
+ Thread.sleep(ThreadLocalRandom.current().nextInt(101));
+ }
+ catch (InterruptedException e) {
+ System.err.println("InterruptedException: " + e);
+ }
+ }
+ catch (Exception e) {
+ System.err.println("Exception: " + e);
+ }
+ //finally {
+ // client.closeRWIO();
+ //}
+ }
+ }
+}