Ejemplo n.º 1
0
    def __init__(self):
        self.MSGLEN = 1026
        self.TAM_BUFFER = 0
        self.TAM_CABECERA = 0

        self.listaPeers = []

        self.socketUDP = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        self.socketPerdidosUDP = socket.socket(socket.AF_INET,
                                               socket.SOCK_DGRAM)
        self.socketPerdidosUDP.bind(
            ('', 0))  #Puero 0 = el sistema operativo elige uno libre
        #self.puerto = self.socketUDP.getsockname()[1]
        print "SocketUDP enlazado"

        self.socketSourceTCP = socket.socket(socket.AF_INET,
                                             socket.SOCK_STREAM)

        self.socketPlayerTCP = socket.socket(
            socket.AF_INET,
            socket.SOCK_STREAM)  #Socket que espera conexion VLC
        self.socketPlayerTCP.bind(('', 0))

        self.socketPlayerTCP.listen(1)
        self.direccionPlayer = ''  #(ip, puerto) de haber hecho accept
        self.socketClientePlayer = None  #Socket para comunicarse con VLC, repuesta al hacer accept con socketPlayerTCP

        self.buffer = HashBuffer(512)
Ejemplo n.º 2
0
    def __init__(self):
        self.MSGLEN = 1026

        self.listaPeers = []

        self.socketUDP = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        self.socketPerdidosUDP = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        self.socketPerdidosUDP.bind(("", 0))  # Puero 0 = el sistema operativo elige uno libre
        # self.puerto = self.socketUDP.getsockname()[1]
        print "SocketUDP enlazado"

        self.socketSourceTCP = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

        self.socketPlayerTCP = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # Socket que espera conexion VLC
        self.socketPlayerTCP.bind(("", 0))

        self.socketPlayerTCP.listen(1)
        self.direccionPlayer = ""  # (ip, puerto) de haber hecho accept
        self.socketClientePlayer = None  # Socket para comunicarse con VLC, repuesta al hacer accept con socketPlayerTCP

        self.buffer = HashBuffer(512)
Ejemplo n.º 3
0
 def __init__(self):
     self.UMBRAL_QUEJAS = 1000
     
     self.MSGLEN = 1024
     
     self.PUERTO_POR_DEFECTO = 12000
     
     self.listaPeers = []
     self.indiceDirec = 0
     
     self.cabecera = ""
     self.socketIcecast = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
     
     self.socketServerTCP = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #socket TCP cabecera Ogg
     self.socketClientesUDP = socket.socket( socket.AF_INET, socket.SOCK_DGRAM )
     self.socketClientesUDP.bind(('', self.PUERTO_POR_DEFECTO ))
     self.socketServerTCP.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)#Para evitar la excepcion de puerto en uso
     
     self.socketServerTCP.bind(('', self.PUERTO_POR_DEFECTO ))
     self.socketServerTCP.listen(256)
     
     self.buffer = HashBuffer(512)
Ejemplo n.º 4
0
class Peer:
    def __init__(self):
        self.MSGLEN = 1026
        self.TAM_BUFFER = 0
        self.TAM_CABECERA = 0

        self.listaPeers = []

        self.socketUDP = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        self.socketPerdidosUDP = socket.socket(socket.AF_INET,
                                               socket.SOCK_DGRAM)
        self.socketPerdidosUDP.bind(
            ('', 0))  #Puero 0 = el sistema operativo elige uno libre
        #self.puerto = self.socketUDP.getsockname()[1]
        print "SocketUDP enlazado"

        self.socketSourceTCP = socket.socket(socket.AF_INET,
                                             socket.SOCK_STREAM)

        self.socketPlayerTCP = socket.socket(
            socket.AF_INET,
            socket.SOCK_STREAM)  #Socket que espera conexion VLC
        self.socketPlayerTCP.bind(('', 0))

        self.socketPlayerTCP.listen(1)
        self.direccionPlayer = ''  #(ip, puerto) de haber hecho accept
        self.socketClientePlayer = None  #Socket para comunicarse con VLC, repuesta al hacer accept con socketPlayerTCP

        self.buffer = HashBuffer(512)

    def aceptarConexionPlayerTCP(self):
        print "Esperando aceptar conexion TCP por parte del player VLC"
        thread.start_new(self.abrirVLC, ())
        (self.socketClientePlayer,
         self.direccionPlayer) = self.socketPlayerTCP.accept()
        print "Conexion con el player aceptada"
        print "Direccion player: ", self.direccionPlayer

    def conectarSourceTCP(self, ip, puerto):
        print "Esperando respuesta del servidor... "
        self.socketSourceTCP.connect((ip, puerto))
        self.socketUDP.bind(("", self.socketSourceTCP.getsockname()[1]))
        print "Conexion TCP establecida con ", (ip, puerto)

    #Recibe igual que el flujo UDP pero solo 10 veces y mediante el socketSourceTCP
    def recibirCabeceraOggTCP(self):
        self.recibirTamCabecera()

        i = 0
        cabecera = ''
        while i < self.TAM_CABECERA:
            (msg, dir) = self.leerSocket(self.socketSourceTCP, self.MSGLEN - 2)
            cabecera = cabecera + msg
            i += 1
            print "Recibido paquete de cabecera ", i
        return cabecera

    def bufferIn(self):
        i = 0
        while i < self.buffer.tam / 2:
            (msg, dir) = self.leerSocket(self.socketUDP,
                                         self.MSGLEN)  #Recibimos

            print "Bloque ", self.separarID(msg)[0], "de", dir, " encolado"

            self.comprobarPaqueteDir(msg, dir)

            (id, msg) = self.separarID(
                msg)  #Separamos el numero de bloque del mensaje
            self.buffer.push(id, (id, msg))  #"Encolamos"
            i += 1

    def comprobarPaqueteDir(
            self, paquete,
            dir):  #Comprueba si el paquete llega del source o de otro peer
        if dir == self.socketSourceTCP.getpeername(
        ):  #Si el paquete llega del source se reenvia
            self.reenviarPaqueteRestoPeers(paquete)
            dir = None

        if (dir != None) and (
                self.buscarDirecPeer(dir) < 0
        ):  #Si llega un paquete de un peer que no tenemos en la lista, append peer
            self.listaPeers.append((dir, 0))

    def buscarDirecPeer(self, dir):  #Busca un peer
        j = 0
        for i in self.listaPeers:
            if dir == i[0]:
                return j
            j += 1
        return -1

    def reenviarPaqueteRestoPeers(self, paquete):
        for i in self.listaPeers:
            self.socketUDP.sendto(paquete, i[0])

    def separarID(self, msg):
        return (unpack(">H", msg[:2])[0], msg[2:])

    def leerSocket(self, socket, tam):
        msg = ''
        while len(msg) < tam:
            (chunk, dir) = socket.recvfrom(tam - len(msg))
            if chunk == '':
                print RuntimeError("socket connection broken flujo Ogg")

            msg = msg + chunk
        return (msg, dir)

    def recibirTamBuffer(self):
        recv = self.socketSourceTCP.recv(2)
        self.TAM_BUFFER = unpack(">H", recv)[0]
        print "Tam buffer: ", self.TAM_BUFFER
        self.buffer = HashBuffer(self.TAM_BUFFER)

    def recibirPeersConectados(self):
        recv = self.socketSourceTCP.recv(2)
        numConect = unpack(">H", recv)[0]
        i = 0

        print "Peers conectados: ", numConect

        while i < numConect:
            bin = self.socketSourceTCP.recv(6)

            dir = self.desempaquetarDireccion(bin)

            self.listaPeers.append((dir, 0))

            i += 1

    def recibirTamCabecera(self):
        recv = self.socketSourceTCP.recv(2)
        self.TAM_CABECERA = unpack(">H", recv)[0]
        print "Tam Cabecera: ", self.TAM_CABECERA

    def empaquetarDireccion(self, (ip, puerto)):
        sep = ip.split(".")
        i = 0
        binario = ''
        for i in sep:
            binario += pack(">b", int(i))

        binario += pack(">H", puerto)

        return binario
Ejemplo n.º 5
0
 def recibirTamBuffer(self):
     recv = self.socketSourceTCP.recv(2)
     self.TAM_BUFFER = unpack(">H", recv)[0]
     print "Tam buffer: ", self.TAM_BUFFER
     self.buffer = HashBuffer(self.TAM_BUFFER)
Ejemplo n.º 6
0
class Peer:
    def __init__(self):
        self.MSGLEN = 1026

        self.listaPeers = []

        self.socketUDP = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        self.socketPerdidosUDP = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        self.socketPerdidosUDP.bind(("", 0))  # Puero 0 = el sistema operativo elige uno libre
        # self.puerto = self.socketUDP.getsockname()[1]
        print "SocketUDP enlazado"

        self.socketSourceTCP = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

        self.socketPlayerTCP = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # Socket que espera conexion VLC
        self.socketPlayerTCP.bind(("", 0))

        self.socketPlayerTCP.listen(1)
        self.direccionPlayer = ""  # (ip, puerto) de haber hecho accept
        self.socketClientePlayer = None  # Socket para comunicarse con VLC, repuesta al hacer accept con socketPlayerTCP

        self.buffer = HashBuffer(512)

    def aceptarConexionPlayerTCP(self):
        print "Esperando aceptar conexion TCP por parte del player VLC"
        thread.start_new(self.abrirVLC, ())
        (self.socketClientePlayer, self.direccionPlayer) = self.socketPlayerTCP.accept()
        print "Conexion con el player aceptada"
        print "Direccion player: ", self.direccionPlayer

    def conectarSourceTCP(self, ip, puerto):
        print "Esperando respuesta del servidor... "
        self.socketSourceTCP.connect((ip, puerto))
        self.socketUDP.bind(("", self.socketSourceTCP.getsockname()[1]))
        print "Conexion TCP establecida con ", (ip, puerto)

    # Recibe igual que el flujo UDP pero solo 10 veces y mediante el socketSourceTCP
    def recibirCabeceraOggTCP(self):
        i = 0
        cabecera = ""
        while i < 10:
            (msg, dir) = self.leerSocket(self.socketSourceTCP, self.MSGLEN - 2)
            cabecera = cabecera + msg
            i += 1
            print "Recibido paquete de cabecera ", i
        return cabecera

    def bufferIn(self):
        i = 0
        while i < self.buffer.tam / 2:
            (msg, dir) = self.leerSocket(self.socketUDP, self.MSGLEN)  # Recibimos

            print "Bloque ", self.separarID(msg)[0], "de", dir, " encolado"

            self.comprobarPaqueteDir(msg, dir)

            (id, msg) = self.separarID(msg)  # Separamos el numero de bloque del mensaje
            self.buffer.push(id, (id, msg))  # "Encolamos"
            i += 1

    def comprobarPaqueteDir(self, paquete, dir):  # Comprueba si el paquete llega del source o de otro peer
        if dir == self.socketSourceTCP.getpeername():  # Si el paquete llega del source se reenvia
            self.reenviarPaqueteRestoPeers(paquete)
            dir = None

        if (dir != None) and (
            self.buscarDirecPeer(dir) < 0
        ):  # Si llega un paquete de un peer que no tenemos en la lista, append peer
            self.listaPeers.append((dir, 0))

    def buscarDirecPeer(self, dir):  # Busca un peer
        j = 0
        for i in self.listaPeers:
            if dir == i[0]:
                return j
            j += 1
        return -1

    def reenviarPaqueteRestoPeers(self, paquete):
        for i in self.listaPeers:
            self.socketUDP.sendto(paquete, i[0])

    def separarID(self, msg):
        return (unpack(">H", msg[:2])[0], msg[2:])

    def leerSocket(self, socket, tam):
        msg = ""
        while len(msg) < tam:
            (chunk, dir) = socket.recvfrom(tam - len(msg))
            if chunk == "":
                print RuntimeError("socket connection broken flujo Ogg")

            msg = msg + chunk
        return (msg, dir)

    def recibirPeersConectados(self):
        recv = self.socketSourceTCP.recv(2)
        numConect = unpack(">H", recv)[0]
        i = 0

        print "Peers conectados: ", numConect

        while i < numConect:
            bin = self.socketSourceTCP.recv(6)

            dir = self.desempaquetarDireccion(bin)

            self.listaPeers.append((dir, 0))

            i += 1

    def empaquetarDireccion(self, (ip, puerto)):
        sep = ip.split(".")
        i = 0
        binario = ""
        for i in sep:
            binario += pack(">b", int(i))

        binario += pack(">H", puerto)

        return binario