import socket class TCPComm: __HEADER = "JRO" __TYPE = "ABS" def __init__(self, ipSource, ipDestino, portDestino, asServer=False): self.ipSource = ipSource self.ipDestino = ipDestino self.portDestino = portDestino self.addr = (ipDestino,portDestino) self.sc = "none" self.answer = "none" #test self.asServer = False self.len = 0 self.crc = 0 self.openSocket(asServer) def openSocket(self, asServer): #self.socket_c = socket.socket(AF_INET,SOCK_DGRAM) # self.socket_c = socket.socket() # self.socket_c.connect((self.ipDestino, self.portDestino)) if asServer: self.socket_c = socket.socket() # self.configAsServer() self.socket_c.bind(self.addr) self.asServer = True else: # self.configAsClient() self.asServer = False #Socket is opened at the sendData function # def configAsClient(self): #Buscar broadcast TCP # self.socket_c.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) # self.socket_c.connect(self.addr) # pass # def configAsServer(self): # # self.socket_c.bind(self.addr) def waitData(self, nbytes = 1024): print "\nWaiting some client." if self.asServer == False: # Short data through ethernet trama_rx = self.socket_c.recv(nbytes) else: self.socket_c.listen(1) sc, addr = self.socket_c.accept() self.sc = sc self.answer = addr # Big data through ethernet trama_rx = "" while True: tmp = self.sc.recv(nbytes) trama_rx = trama_rx + tmp if trama_rx[-4:] == "quit": break print "\nThis socket has received some data." ipSource, ipDestino, cmd, data = self.__getTrama(trama_rx) return ipSource, ipDestino, cmd, data def waitServer(self, nbytes = 1024): print "\nWaiting some client." self.socket_c.listen(1) sc, addr = self.socket_c.accept() self.sc = sc self.answer = addr # Big data through ethernet trama_rx = "" while True: tmp = self.sc.recv(nbytes) trama_rx = trama_rx + tmp if trama_rx[-4:] == "quit": break print "\nThis socket has received some data from: " + str(self.answer) ipSource, ipDestino, cmd, data = self.__getTrama(trama_rx) return ipSource, ipDestino, cmd, data def waitClient(self, nbytes = 1024): print "\nWaiting the server." # Short data through ethernet trama_rx = self.socket_c.recv(nbytes) print "\nThis socket has received this data: " + str(trama_rx) ipSource, ipDestino, cmd, data = self.__getTrama(trama_rx) return ipSource, ipDestino, cmd, data def sendData(self, cmd, data, id): trama_tx = self.__HEADER + ":" + self.__TYPE + ":" + str(self.ipSource) + ":" + str(self.ipDestino) + \ ":" + str(self.len) + ":" + str(cmd) + ":" + str(data) + ":" + str(self.crc) if self.portDestino == 7000: trama_tx = trama_tx + ":" + "quit" # Send messages if self.asServer == False: host = "192.168.1." + str(id) self.socket_c.connect((host, self.portDestino)) self.socket_c.send(trama_tx) else: self.sc.send(trama_tx) print "Sending message:[" + trama_tx + "]" def sendData2(self, cmd, data, ipDestino): trama_tx = self.__HEADER + ":" + self.__TYPE + ":" + str(self.ipSource) + ":" + str(ipDestino) + \ ":" + str(self.len) + ":" + str(cmd) + ":" + str(data) + ":" + str(self.crc) + ":" + "quit" if self.asServer == True: self.SendAsServer(trama_tx) else: self.SendAsClient(ipDestino, trama_tx) def SendAsServer(self, trama_tx): self.sc.send(trama_tx) print "Sending message:[" + trama_tx + "] to: " + str(self.answer) def SendAsClient(self, ipDestino, trama_tx): self.socket_c.connect((ipDestino, self.portDestino)) self.socket_c.send(trama_tx) print "Sending message:[" + trama_tx + "] to: " + ipDestino def __getTrama(self, trama): FrameList = trama.split(':') header = FrameList[0] TypeOfInstrument = FrameList[1] ipSource = FrameList[2] ipDestino = FrameList[3] len = FrameList[4] cmd = FrameList[5] data = FrameList[6] crc = FrameList[7] trash = FrameList[8] return ipSource, ipDestino, cmd, data def close_socket(self): self.socket_c.close() def open_socket(self): self.socket_c = socket.socket()