diff --git a/Implementation/src/ChatApp.class b/Implementation/src/ChatApp.class index ce9ebb7..ca1a251 100644 Binary files a/Implementation/src/ChatApp.class and b/Implementation/src/ChatApp.class differ diff --git a/Implementation/src/ChatApp.java b/Implementation/src/ChatApp.java index f001f0a..e9ef5e8 100644 --- a/Implementation/src/ChatApp.java +++ b/Implementation/src/ChatApp.java @@ -1,7 +1,14 @@ import java.io.IOException; +import java.net.DatagramSocket; import java.net.InetAddress; +import java.net.InterfaceAddress; +import java.net.NetworkInterface; +import java.net.SocketException; import java.net.UnknownHostException; import java.util.ArrayList; +import java.util.Enumeration; +import java.util.List; +import java.util.Objects; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -41,6 +48,7 @@ public class ChatApp { // Recuperer adresse IP de l'utilisateur InetAddress ip = null ; try { + //ip = InetAddress.getByName("192.168.1.72"); ip = InetAddress.getLocalHost(); } catch (UnknownHostException e) { e.printStackTrace(); @@ -63,12 +71,13 @@ public class ChatApp { InetAddress broadcastAdress = InetAddress.getLoopbackAddress(); // A MODIFIER // Message que l'on envoie à tous les utilisateurs actifs String broadcastMessage = "Modification Pseudo\n" + this.getMe().getPseudo() + "\n" + nouveau + "\n"; - for(Integer p : ListPort ) { + /*for(Integer p : ListPort ) { if(!(p.equals(this.getMe().getPort()))) { UDPEchange.connexion(broadcastAdress,broadcastMessage, p); } - } + }*/ + UDPEchange.connexion(broadcastAdress,broadcastMessage, 1024); } @@ -82,12 +91,13 @@ public class ChatApp { InetAddress broadcastAdress = InetAddress.getLoopbackAddress(); // A MODIFIER // Message que l'on envoie à tous les utilisateurs actifs String broadcastMessage = "Connexion\n" + this.getMe().toString() ; - for(Integer p : ListPort ) { - if(!(p.equals(this.getMe().getPort()))) - { - UDPEchange.connexion(broadcastAdress,broadcastMessage, p); - } + /*for(Integer p : ListPort ) { + if(!(p.equals(this.getMe().getPort()))) + { + UDPEchange.connexion(broadcastAdress,broadcastMessage, p); } + }*/ + UDPEchange.connexion(broadcastAdress,broadcastMessage, 1024); } /** @@ -100,12 +110,13 @@ public class ChatApp { InetAddress broadcastAdress = InetAddress.getLoopbackAddress(); // A MODIFIER // Message que l'on envoie à tous les utilisateurs actifs String broadcastMessage = "Deconnexion\n" + this.getMe().toString() ; - for(Integer p : ListPort ) { - if( !(p.equals(this.getMe().getPort()))) - { - UDPEchange.connexion(broadcastAdress,broadcastMessage, p); - } + /*for(Integer p : ListPort ) { + if(!(p.equals(this.getMe().getPort()))) + { + UDPEchange.connexion(broadcastAdress,broadcastMessage, p); } + }*/ + UDPEchange.connexion(broadcastAdress,broadcastMessage, 1024); } public static void main (String[] args) throws IOException { @@ -114,6 +125,13 @@ public class ChatApp { ListPort.add(1234); ListPort.add(3000); ListPort.add(4000); + InetAddress localHost = InetAddress.getLocalHost(); + System.out.println("Mon adresse:" + localHost.toString()); + /*for(InetAddress broadcastAddr : UDPEchange.listAllBroadcastAddresses()) { + System.out.println("Broadcast sent with address " + broadcastAddr.toString()); + }*/ + //InetAddress broadcastAddress = InterfaceAddress.getBroadcast(); + //System.out.println("Mon adresse:" + localHost.toString()); ExecutorService exec = Executors.newFixedThreadPool(1000); exec.submit(new Runner(app)); try { @@ -151,7 +169,10 @@ public class ChatApp { return actifUsers; } + + } + class Runner implements Runnable { ChatApp app ; public Runner(ChatApp app) { @@ -165,3 +186,5 @@ class Runner implements Runnable { } } + + diff --git a/Implementation/src/Runner.class b/Implementation/src/Runner.class index 8d6625f..43f0a2a 100644 Binary files a/Implementation/src/Runner.class and b/Implementation/src/Runner.class differ diff --git a/Implementation/src/RunnerUDP.class b/Implementation/src/RunnerUDP.class index 6429c55..f96af0f 100644 Binary files a/Implementation/src/RunnerUDP.class and b/Implementation/src/RunnerUDP.class differ diff --git a/Implementation/src/UDPEchange.class b/Implementation/src/UDPEchange.class index 64e2d0b..a1eed64 100644 Binary files a/Implementation/src/UDPEchange.class and b/Implementation/src/UDPEchange.class differ diff --git a/Implementation/src/UDPEchange.java b/Implementation/src/UDPEchange.java index 14e5905..b3d01a1 100644 --- a/Implementation/src/UDPEchange.java +++ b/Implementation/src/UDPEchange.java @@ -2,7 +2,12 @@ import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; +import java.net.NetworkInterface; import java.net.SocketException; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.List; +import java.util.Objects; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** @@ -26,12 +31,24 @@ public class UDPEchange { */ public static void connexion( InetAddress broadcastAdress , String broadcastMessage , Integer port) throws IOException { // Envoie en broadcast à tous les utilsateurs - DatagramSocket socket = new DatagramSocket(); - socket.setBroadcast(true); - byte[]buffer = broadcastMessage.getBytes(); - DatagramPacket packet = new DatagramPacket( buffer, buffer.length, InetAddress.getLoopbackAddress(), port ); - socket.send(packet); - socket.close(); + for (InetAddress broadcastAddr : listAllBroadcastAddresses()) { + DatagramSocket socket = new DatagramSocket(); + socket.setBroadcast(true); + byte[]buffer = broadcastMessage.getBytes(); + DatagramPacket packet = new DatagramPacket( buffer, buffer.length, broadcastAddr, port ); + socket.send(packet); + socket.close(); + System.out.println("Broadcast sent with address " + broadcastAddr.toString()); + } + /* + DatagramSocket socket = new DatagramSocket(); + socket.setBroadcast(true); + byte[]buffer = broadcastMessage.getBytes(); + DatagramPacket packet = new DatagramPacket( buffer, buffer.length, broadcastAdress, port ); + socket.send(packet); + socket.close(); + */ + System.out.println("***********Message envoye***********"); System.out.println("Dest Ip: " + broadcastAdress.toString()); System.out.println("Dest port: " + port.toString()); @@ -89,8 +106,31 @@ public class UDPEchange { System.out.println(broadcastMessage); System.out.println("************************************"); } + + + static List listAllBroadcastAddresses() throws SocketException { + List broadcastList = new ArrayList<>(); + Enumeration interfaces + = NetworkInterface.getNetworkInterfaces(); + while (interfaces.hasMoreElements()) { + NetworkInterface networkInterface = interfaces.nextElement(); + + if (networkInterface.isLoopback() || !networkInterface.isUp()) { + continue; + } + + networkInterface.getInterfaceAddresses().stream() + .map(a -> a.getBroadcast()) + .filter(Objects::nonNull) + .forEach(broadcastList::add); + } + return broadcastList; + } + } + + /** *

* Classe implémentant l'interface Runnable. @@ -241,4 +281,8 @@ class RunnerUDP implements Runnable { ( app.getActifUsers() ).supprimerList(Utilisateur.stringToUtilisateur(received.split("\n")[1])); } } + + + + }