From 94100fad648207608148d78fd178f2526339bdb9 Mon Sep 17 00:00:00 2001 From: moukhlis Date: Fri, 4 Dec 2020 15:37:18 +0100 Subject: [PATCH] Ajout de la prise en compte de l'adresse de broadcast --- Implementation/src/ChatApp.class | Bin 3878 -> 3667 bytes Implementation/src/ChatApp.java | 47 +++++++++++++++++------ Implementation/src/Runner.class | Bin 371 -> 371 bytes Implementation/src/RunnerUDP.class | Bin 4012 -> 4016 bytes Implementation/src/UDPEchange.class | Bin 2800 -> 4892 bytes Implementation/src/UDPEchange.java | 56 +++++++++++++++++++++++++--- 6 files changed, 85 insertions(+), 18 deletions(-) diff --git a/Implementation/src/ChatApp.class b/Implementation/src/ChatApp.class index ce9ebb74650f7742f54773e18dd611f0a2bbcf06..ca1a25191b526f8f429f4c0da48b33b2c417d15b 100644 GIT binary patch delta 1629 zcmah~?ORi282_E^Y-c+=K$}oNjxw>3fio*p;JUgH3`s@^36g0|cZ9*%XbeO`XOvlK zkv^J8rI`6bZwT6$5Za5M`s7u8?`wZW_B-1OuB)y(=Q{Uu?w99x?)!dz_jbAHm*whD zf6Uziun~8r)diEw+2tSbdqe(khqpc)(>wI2n2}dGHlapAt%l8bR{Uz-{ooc2^;j># z7K^mRqQP*73lg?!glP~yx!kc;MHQac(1dN`h`h>XLW>3mUJ$>@<=L%hQ?NrrJ6@Eq zO!$>$RtaW*ARwm9`Efg5!Y&27HN1>hB;2={P|Jb7nBK$CNPkR1UPHz|dD!BD8O$I6UBNyL9q8nD{v}$1(rfGug$Y-Z#uMXmma|nw7rGUMH1vSZB5}*& z7Il`|wY?Io&Hdr99#s)R)F`S?f>zQ{)9H^@_x4tPgZ*6=z;#E`kzTZK0@9Kl=cC$nkwhx&C^S+cs`!js{p+*R=|jwv{< z;XS-BhOEWX2jaYS<%UtXZ4k_9b)>f@O0k z7>TK96)t5#x+v}{P12-TVH?VxRxyL?3T_x@_>Gvf-H~QR*zT^oDZx<_VZnpJNLZC@ zn3s@MtM6TETA;}n2|w%)MD@Nty+UF~>Wv=Ng#6U|6nrOc+e_sij810T9}u$Y@r|=E z6F%beC?4axo%hH1g!(yZ%gHC>l4l@Y<0|1ir8Q-J1nIpK)W|8yb7EL+jvEoBP$}0y zh8H<_98Nq*Mm&vtJcUB6XWuuX92MArN?c%M0ZjMklogm1e5#;IVYsBA(D)Slm`P_7 z86`8kD2cVc(gaEpc)~MBTr`%IJ7pwMnT(@)njz^-U8(Ro%6hms25xM_XY|VS5Az`( zGSJn8Hq+xKbVC}tZVt}@K2KQ&`Jcc$3ABsF1=uJ(0~}8yU-}AiQG%%{X`yI zlCm9_aV4Fyq{G4+n3{*Fz0|y}R9=@vW1LNxMRNmB%qjm&C4ud2hT=#rQF10SN)oxg z8SE@ez(0pQKmvQ6=HHVDHkQvL((akXt2Yrdq0N)P&=sf^a)F${A!=-XJb^cyITI7` z=Hh4)?->4gD&U02buxidi{`(qXK0;frvp6HZl1vi-o`PEVvKydz}1vu*dCGr^ycCq zR^Sks6em*-;~5TXBaUJ_cLg|%ogBn&?(e~IM7eteC*pLSqUj`Eg7P$>&k%f^@ME}$ zv$#sSf6X_8c*Rie5rM?Jn&Mub!k-NiZ`is+!Kk&-5SAtVmq=|7iDL|ho2xM%meLz2 z{(CxHnen(p-{<(kh!qpr_YW)%&LnL3lJrQUtYpc?<(Nln`z+30hqTDw^rRKAUtclA i#I&cl7Lpv-xIK}Q$&{Q+$!}r&i>UP7#`pLU1%CqPV^Hw` delta 1902 zcmbW1>vI!T7{;HIY`W=Y1zQV4fYxCsk|r%ha8M~TPARw23#CA5ivpop+SHJgWK+t` zP%3u?=?W;`5ET?ruBM?CyrCcb)oIUS3@B8lWJm)>< zyUAxtw6AXs-vID9zPhAccUV)D@hNxMG~z)s78e-rE35Ag_694HW;jw=n;Wn4U_NS8 zEYPtKiv$Y)?joRe1rv=%pDEziUBN5E~yR+#Z{w6hQb>vSrx-rDV~@T}8NhYlSf7}l_Jn!662I=T?H zesoOpIPkO%4vwhAn2$81F{C0RmAz&SxNnLPYe|0bBi98yH8IN3C)Xj|_(b5o1xCl6 zA&OHg<*JDU6A2@s;&bbKzF)a1P-0zhmsr2%mo~i4)j9A6{|{k0`}zEx!ke^D)0)gJ zm5*{6;v(MyZ?Vm@M<*d0`!+4^B-_(gSZhv64?i@v)1knJv9tnP%VReUiKCXe2TicF0U)=-jK%flhDd5ysivZoxT12C8l%Ot15xY{u5-b zMj=nxOw`cgxx``~wu3wfwR?ZMPH(nw>|>XfuRnVcn!v8QrIf%B&fdK$_{(AyRmLf#QJ$f11$KdS@-^vo&#(Q-qv!v*?o3p#H zg}Jt~!1}R=IrlT`UL0cY2oB&Fj@nvIfqI(>oGBIO?PIh<9-slGRmGsvC>z&3rRqmO z9$7LK^DU3L%YPN6qffcTsSk1CA6)Mr?Ro-kT*P`k=R1`Pmyc%z^V){++7$>{#dlvJ kEK_7F`!cR@u88(kdJNm`$98*z2N=9g1U|zT_!8bf0MUGu6951J 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 8d6625f3d375d584311b99d1269d3640b89ceff3..43f0a2a8beec5e9c55494c8e3af811ede68cd935 100644 GIT binary patch delta 37 tcmey&^qFac9wX-_1{Q|R44e#GCYv+r^6y|^XV}HS$RNSMz`(>H2>`##2dw}A delta 37 tcmey&^qFac9wX;m1{Q{S44e$}Cz~_s@-Jp!XIRR>$RNSMz`(>H2>`c(2Sfk> diff --git a/Implementation/src/RunnerUDP.class b/Implementation/src/RunnerUDP.class index 6429c55e40608c3b640fa12e0df13c184d8acda1..f96af0f83c4c88b752c07544196c4bf09243965c 100644 GIT binary patch delta 325 zcmWO1Jt)L+0EhAC`$KoSI3-1f`x`_CWie8u*w_tncfvv)qSOsi7UgAB=e@ifu8t@o zFC}@4l!QZh4SC68@N&!3XMKXMkSmmF&nPMOTJGA0x>n2MwHkfiW>16V^)*?Z&5n)9 z`e?#M_MDi69%AVwo<0)k54SnSj6Z;#L0k-x#W1;ykk2TEOi{`-wP^lcr;#k>SD342(`H9HQ zm0Gw~CpYTmP6IqDz`cfe&^S+;;91MOXpL8G^QIF%b;`TW_)vr|J@TUue)TPzF^V_I ma+pjdn0zIg0y#~oQcZ=@OpVgn0IEs)i(bUpu-p36oxT6XVqmlY delta 321 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 JD#RSbo&n0ONWlOA literal 2800 zcmcImS$h*z7=EWsI%yav4P_}%NTEPdC{a+51i`Kn>;~x~RJ7CN*bYr+;w+_g-}ik* z{Q+Egp%*EF4?jTvh(E$de9uhNrrL66@;tMg^KI|@EoXlJ`_4T8XYgYbHK`2_MslJ{ z#rE}l4(ox>o!F(KS;KDZQP8v!T9)y377Dg-XeUOK{gzdlqRz_Vu0*nbJ@HHwE!d}G zzlJzk6*R7Lk~Lj1Eo{bUnC_Tf^n_1KHi{-3loYlpXh}?TW!E>HmGD&@)^G#~qH}~< zP_Q?#DqSHo0GA2m+cg}O$qDC+mLuxXf#WJt8Xm&KYYAL*TrtOpERSq&53CwiYM8vb zWLM~OnFvlQXlq~n4UiyxTEvApZ!L<|_4X(p#VHl1H9Uqh3by$ythJ^_7VS4F!1W&FdpbGNZ$0)M6sNyLN{TNWN&nLihjbbX# zz&zU)rkmRX2oT6_+$z zMvlyO&**Mvsl>Ficn4T$4J2)p?hQwGg=bS?6l}RHxFgWy?BP!}W3n zQ(47?tk`E{m$5KaJgZ>WN0c&~6}Sm5JQedAZeW3#e_$4ub3q7>H#KLFy_41DCd1IDiXyW? zO8Y$5vqeV5iwdHQwl_b+NlHdS-Bv+nu-`Dnpf@)q>=9{)$XH6ISRlg+&Q;;5nqHaz z7I)Q3C7;PLx?EwC)mSg`90P(;a1JM`2qD9M?gsRdAB2jx71T_0QB2MNW7IT)aUIQB zo}Cwch77b}70z)!ktV&R7Mfp$;EL@ew{&@ri8XPb+NueQD74tVjhD zfZfQ>?$h(^oJ9pUt4UrK42)jT%|cN)Z5-aSUg^P9tWg|UEQxi*C#t9m4!BA#tAp&; zi^ZJb3Qo(jw=y-Nt*ok5}V6k`I;@(>vJ7hTI*rJ@wQ&DA>IOLw7OSwj6_N2rYG(K5EALwC`1r8(3bx_28pj+L=@2?x^Q zj^=O~hdRng{(@t%6J}tS4BeRVf_n<9#)%Q`k)ZEr?(r zpY~%L&)x)~9mfHjz(J(Z#&LXzqwX*!d3;WD*FqAnQA@%$i05^@!6)KTcK9>^^GbhX z?Vq=CVL$?7e1m0-_!zGC-$G=N0G?|M;kU?O5Pq=DsHgm>CG?JtdrQctLr0rQ$@8}m zO@}4+SqY&?2*>WiBtPW1^edbijNiKd2U)Gh9wNDhix@_Z(bf3ecVR2zJ;k@vlsH3~ zvy@5`Z-y8jC!TZscT%gHdVSRF;gIjeRa{_5SvcHz)3*@5Pep#X4XIF7jyOfdwa{PK zt>Ufw9L3?49WJO`;J#5upYN>X{HNud8EB| zaz=3yW9Y&-F3D4k|4D+M!9-P}Yw<3%Yw#Z4=e-HF_<(8u%)fr&U%$dP+=+7aTinDC GX#NLmn!XzV 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])); } } + + + + }