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 __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 __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)
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
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)
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