Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package es.uma.informatica.rsd.chat.impl;
- import java.io.IOException;
- import java.io.UnsupportedEncodingException;
- import java.net.DatagramPacket;
- import java.net.DatagramSocket;
- import java.net.InetAddress;
- import java.net.InetSocketAddress;
- import java.net.MulticastSocket;
- import java.net.NetworkInterface;
- import java.net.SocketAddress;
- import java.net.SocketException;
- import java.net.UnknownHostException;
- import java.util.NoSuchElementException;
- import java.util.Scanner;
- import java.util.StringTokenizer;
- import es.uma.informatica.rsd.chat.ifaces.Comunicacion;
- import es.uma.informatica.rsd.chat.ifaces.Controlador;
- import es.uma.informatica.rsd.chat.impl.DialogoPuerto.PuertoAlias;
- // Clase a implementar
- public class ComunicacionImpl implements Comunicacion {
- //239.194.17.132
- //192.168.164.49 ip del pc del lab
- private Controlador c;
- private String alias;
- private int puerto;
- private MulticastSocket socketM;
- private InetAddress multiAddr;
- private String miIp="192.168.238.109";
- @Override
- public void crearSocket(PuertoAlias pa) {
- try {
- puerto=pa.puerto;
- socketM=new MulticastSocket(new InetSocketAddress(miIp,pa.puerto));
- alias=pa.alias;
- } catch (SocketException e) {
- e.printStackTrace();
- } catch(IOException ee) {
- ee.printStackTrace();
- }
- }
- @Override
- public void setControlador(Controlador c) {
- this.c=c;
- }
- @Override
- public void runReceptor() {
- while(true) {
- try {
- byte [] data = new byte[1000];
- DatagramPacket dpR = new DatagramPacket(data, data.length);
- //socket.receive(dpR);
- //multicast
- socketM.receive(dpR);
- SocketAddress sa=dpR.getSocketAddress();
- if(!sa.equals(socketM.getLocalSocketAddress())) {//descartamos los mensajes propios
- String msg=new String(dpR.getData(),"UTF-8");
- String[] partes=new String[3];
- StringBuilder sb=new StringBuilder();
- Scanner sc=new Scanner(msg);
- sc.useDelimiter("[>]");
- InetAddress dir = InetAddress.getByName(sc.next());
- partes[0]=dir.getHostAddress();
- partes[1]=sc.next();
- while(sc.hasNext()) {//para que no afecte que el mensaje tenga ">"
- sb.append(sc.next());
- }
- partes[2]=sb.toString();
- sc.close();
- if(dir.isMulticastAddress()) {
- InetSocketAddress isa= new InetSocketAddress(dir, dpR.getPort());
- c.mostrarMensaje(isa, partes[1], partes[2]);
- } else {
- InetSocketAddress isa= new InetSocketAddress(dpR.getAddress(), dpR.getPort());
- c.mostrarMensaje(isa, partes[1], partes[2]);
- }
- System.out.println( partes[0]+">"+partes[1]+">"+ partes[2]);
- }
- } catch (UnsupportedEncodingException e) {
- e.printStackTrace();
- }catch (IOException e) {
- e.printStackTrace();
- }catch (NoSuchElementException e) {//para formato no valido
- e.printStackTrace();
- }
- }
- }
- @Override
- public void envia(InetSocketAddress sa, String mensaje) {
- String ip;
- ip=sa.getHostName();
- String msg=ip+">"+alias+">"+mensaje;
- System.out.println(msg);
- InetAddress serverAddress = sa.getAddress();
- DatagramPacket dp=new DatagramPacket(msg.getBytes(), msg.getBytes().length, serverAddress, sa.getPort());
- try {
- socketM.send(dp);
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- @Override
- public void joinGroup(InetAddress multi) {
- try {
- multiAddr = multi;
- System.out.println(multiAddr.getHostAddress());
- SocketAddress sa=new InetSocketAddress(multi, puerto); // socketM.getPort()
- socketM.joinGroup(sa,NetworkInterface.getByName(miIp));
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- @Override
- public void leaveGroup(InetAddress multi) {
- try {
- SocketAddress sa=new InetSocketAddress(multi, puerto);
- socketM.leaveGroup(sa,NetworkInterface.getByName(miIp));
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement