Advertisement
Guest User

Untitled

a guest
May 27th, 2019
190
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.88 KB | None | 0 0
  1. package es.uma.informatica.rsd.chat.impl;
  2.  
  3. import java.io.IOException;
  4. import java.io.UnsupportedEncodingException;
  5. import java.net.DatagramPacket;
  6. import java.net.DatagramSocket;
  7. import java.net.InetAddress;
  8. import java.net.InetSocketAddress;
  9. import java.net.MulticastSocket;
  10. import java.net.NetworkInterface;
  11. import java.net.SocketAddress;
  12. import java.net.SocketException;
  13. import java.net.UnknownHostException;
  14. import java.util.NoSuchElementException;
  15. import java.util.Scanner;
  16. import java.util.StringTokenizer;
  17.  
  18. import es.uma.informatica.rsd.chat.ifaces.Comunicacion;
  19. import es.uma.informatica.rsd.chat.ifaces.Controlador;
  20. import es.uma.informatica.rsd.chat.impl.DialogoPuerto.PuertoAlias;
  21.  
  22. // Clase a implementar
  23. public class ComunicacionImpl implements Comunicacion {
  24. //239.194.17.132
  25. //192.168.164.49 ip del pc del lab
  26. private Controlador c;
  27. private String alias;
  28. private int puerto;
  29. private MulticastSocket socketM;
  30. private InetAddress multiAddr;
  31. private String miIp="192.168.238.109";
  32.  
  33. @Override
  34. public void crearSocket(PuertoAlias pa) {
  35. try {
  36. puerto=pa.puerto;
  37. socketM=new MulticastSocket(new InetSocketAddress(miIp,pa.puerto));
  38. alias=pa.alias;
  39. } catch (SocketException e) {
  40. e.printStackTrace();
  41. } catch(IOException ee) {
  42. ee.printStackTrace();
  43. }
  44. }
  45.  
  46. @Override
  47. public void setControlador(Controlador c) {
  48. this.c=c;
  49. }
  50.  
  51. @Override
  52. public void runReceptor() {
  53. while(true) {
  54. try {
  55. byte [] data = new byte[1000];
  56. DatagramPacket dpR = new DatagramPacket(data, data.length);
  57. //socket.receive(dpR);
  58. //multicast
  59. socketM.receive(dpR);
  60. SocketAddress sa=dpR.getSocketAddress();
  61. if(!sa.equals(socketM.getLocalSocketAddress())) {//descartamos los mensajes propios
  62. String msg=new String(dpR.getData(),"UTF-8");
  63. String[] partes=new String[3];
  64. StringBuilder sb=new StringBuilder();
  65.  
  66. Scanner sc=new Scanner(msg);
  67. sc.useDelimiter("[>]");
  68. InetAddress dir = InetAddress.getByName(sc.next());
  69. partes[0]=dir.getHostAddress();
  70. partes[1]=sc.next();
  71. while(sc.hasNext()) {//para que no afecte que el mensaje tenga ">"
  72. sb.append(sc.next());
  73. }
  74. partes[2]=sb.toString();
  75. sc.close();
  76.  
  77. if(dir.isMulticastAddress()) {
  78. InetSocketAddress isa= new InetSocketAddress(dir, dpR.getPort());
  79. c.mostrarMensaje(isa, partes[1], partes[2]);
  80. } else {
  81. InetSocketAddress isa= new InetSocketAddress(dpR.getAddress(), dpR.getPort());
  82. c.mostrarMensaje(isa, partes[1], partes[2]);
  83. }
  84. System.out.println( partes[0]+">"+partes[1]+">"+ partes[2]);
  85. }
  86.  
  87. } catch (UnsupportedEncodingException e) {
  88. e.printStackTrace();
  89. }catch (IOException e) {
  90. e.printStackTrace();
  91. }catch (NoSuchElementException e) {//para formato no valido
  92. e.printStackTrace();
  93. }
  94. }
  95.  
  96. }
  97.  
  98. @Override
  99. public void envia(InetSocketAddress sa, String mensaje) {
  100. String ip;
  101. ip=sa.getHostName();
  102.  
  103. String msg=ip+">"+alias+">"+mensaje;
  104.  
  105. System.out.println(msg);
  106. InetAddress serverAddress = sa.getAddress();
  107. DatagramPacket dp=new DatagramPacket(msg.getBytes(), msg.getBytes().length, serverAddress, sa.getPort());
  108. try {
  109. socketM.send(dp);
  110. } catch (IOException e) {
  111. e.printStackTrace();
  112. }
  113.  
  114. }
  115.  
  116. @Override
  117. public void joinGroup(InetAddress multi) {
  118. try {
  119. multiAddr = multi;
  120. System.out.println(multiAddr.getHostAddress());
  121. SocketAddress sa=new InetSocketAddress(multi, puerto); // socketM.getPort()
  122. socketM.joinGroup(sa,NetworkInterface.getByName(miIp));
  123. } catch (IOException e) {
  124. e.printStackTrace();
  125. }
  126. }
  127.  
  128. @Override
  129. public void leaveGroup(InetAddress multi) {
  130. try {
  131. SocketAddress sa=new InetSocketAddress(multi, puerto);
  132. socketM.leaveGroup(sa,NetworkInterface.getByName(miIp));
  133. } catch (IOException e) {
  134. e.printStackTrace();
  135. }
  136. }
  137.  
  138. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement