library.py
208 lines
| 5.9 KiB
| text/x-python
|
PythonLexer
r41 | #import tftpy | ||
|
r19 | import socket | |
r25 | |||
|
r19 | class UDPComm: | |
__HEADER = "ABS" | |||
r27 | def __init__(self, ipSource, ipDestino, portDestino, asServer=False): | ||
|
r19 | ||
self.ipSource = ipSource | |||
self.ipDestino = ipDestino | |||
self.portDestino = portDestino | |||
r27 | self.addr = (ipDestino,portDestino) | ||
r60 | self.answer = "none" #test | ||
r54 | self.mode = "none" | ||
r92 | |||
|
r19 | ||
self.openSocket(asServer) | |||
def openSocket(self, asServer): | |||
r27 | #self.socket_c = socket.socket(AF_INET,SOCK_DGRAM) | ||
self.socket_c = socket.socket(socket.AF_INET, socket.SOCK_DGRAM,0) | |||
# self.socket_c.connect((self.ipDestino, self.portDestino)) | |||
|
r19 | ||
if asServer: | |||
self.configAsServer() | |||
r54 | self.mode = "server" | ||
|
r19 | else: | |
self.configAsClient() | |||
r54 | self.mode = "client" | ||
|
r19 | ||
def configAsClient(self): | |||
r27 | #Configurar broadcast | ||
self.socket_c.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) | |||
|
r19 | ||
def configAsServer(self): | |||
r27 | self.socket_c.bind(self.addr) | ||
print "\nServer initialized" | |||
|
r19 | ||
r46 | def waitData(self, nbytes = 16384): | ||
|
r19 | ||
r46 | print "\nWaiting some data" | ||
trama_rx, self.answer = self.socket_c.recvfrom(nbytes) | |||
r55 | print "\nThis socket has received some data from:" | ||
r54 | print self.answer | ||
|
r19 | ipSource, ipDestino, cmd, data = self.__getTrama(trama_rx) | |
return ipSource, ipDestino, cmd, data | |||
r27 | |||
r46 | def sendData(self, cmd, data): | ||
r27 | |||
r54 | if self.portDestino == 7000: | ||
trama_tx = self.__HEADER + ":" + str(self.ipSource) + ":" + str(self.ipDestino) + ":" + str(cmd) + ":" + str(data) + ":" | |||
else: | |||
trama_tx = data | |||
r27 | |||
r54 | if self.mode == "client": | ||
destiny = self.addr | |||
else: | |||
destiny = self.answer | |||
r46 | # Send messages | ||
r54 | if(self.socket_c.sendto(trama_tx, destiny)): | ||
r55 | print "Sending message:[" + trama_tx + "] to " + str(destiny) | ||
|
r19 | ||
def __getTrama(self, trama): | |||
r27 | FrameList = trama.split(':') | ||
header = FrameList[0] | |||
ipSource = FrameList[1] | |||
ipDestino = FrameList[2] | |||
cmd = FrameList[3] | |||
data = FrameList[4] | |||
trash = FrameList[5] | |||
|
r19 | ||
return ipSource, ipDestino, cmd, data | |||
r61 | class TCPComm: | ||
r92 | __HEADER = "JRO" | ||
__TYPE = "ABS" | |||
r61 | |||
def __init__(self, ipSource, ipDestino, portDestino, asServer=False): | |||
self.ipSource = ipSource | |||
self.ipDestino = ipDestino | |||
self.portDestino = portDestino | |||
self.addr = (ipDestino,portDestino) | |||
r63 | |||
self.sc = "none" | |||
r61 | self.answer = "none" #test | ||
self.mode = "none" | |||
r92 | self.len = 0 | ||
self.crc = 0 | |||
r61 | |||
self.openSocket(asServer) | |||
def openSocket(self, asServer): | |||
#self.socket_c = socket.socket(AF_INET,SOCK_DGRAM) | |||
r92 | # self.socket_c = socket.socket() | ||
r61 | # self.socket_c.connect((self.ipDestino, self.portDestino)) | ||
if asServer: | |||
r92 | self.socket_c = socket.socket() | ||
# self.configAsServer() | |||
self.socket_c.bind(self.addr) | |||
r61 | self.mode = "server" | ||
else: | |||
r92 | # self.configAsClient() | ||
self.mode = "client" #Socket is opened at the sendData function | |||
r61 | |||
r92 | # def configAsClient(self): | ||
r61 | #Buscar broadcast TCP | ||
# self.socket_c.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) | |||
r92 | # self.socket_c.connect(self.addr) | ||
# pass | |||
r61 | |||
r92 | # def configAsServer(self): | ||
# | |||
# self.socket_c.bind(self.addr) | |||
r61 | |||
r70 | def waitData(self, nbytes = 1024): | ||
r61 | |||
r70 | print "\nWaiting some client." | ||
r61 | if self.mode == "client": | ||
r70 | # Short data through ethernet | ||
r63 | trama_rx = self.socket_c.recv(nbytes) | ||
r61 | else: | ||
r70 | 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 | |||
r61 | |||
r92 | print "\nThis socket has received some data." | ||
r61 | |||
ipSource, ipDestino, cmd, data = self.__getTrama(trama_rx) | |||
return ipSource, ipDestino, cmd, data | |||
r92 | def sendData(self, cmd, data, id): | ||
r61 | |||
r92 | trama_tx = self.__HEADER + ":" + self.__TYPE + ":" + str(self.ipSource) + ":" + str(self.ipDestino) + ":" + str(self.len) + ":" + str(cmd) + ":" + str(data) + ":" + str(self.crc) | ||
r61 | if self.portDestino == 7000: | ||
r92 | trama_tx = trama_tx + ":" + "quit" | ||
r61 | # Send messages | ||
if self.mode == "client": | |||
r92 | host = "192.168.1." + str(id) | ||
self.socket_c.connect((host, self.portDestino)) | |||
r61 | self.socket_c.send(trama_tx) | ||
else: | |||
r70 | self.sc.send(trama_tx) | ||
r61 | print "Sending message:[" + trama_tx + "]" | ||
def __getTrama(self, trama): | |||
FrameList = trama.split(':') | |||
header = FrameList[0] | |||
r92 | TypeOfInstrument = FrameList[1] | ||
ipSource = FrameList[2] | |||
ipDestino = FrameList[3] | |||
len = FrameList[4] | |||
cmd = FrameList[5] | |||
data = FrameList[6] | |||
crc = FrameList[7] | |||
trash = FrameList[8] | |||
r61 | |||
return ipSource, ipDestino, cmd, data | |||
r70 | def close_socket(self): | ||
r63 | self.socket_c.close() | ||
r92 | def open_socket(self): | ||
self.socket_c = socket.socket() | |||
r41 | #class FTPComm: | ||
# | |||
# ftp_servidor = 'ftp.servidor.com' | |||
# ftp_usuario = 'miusuario' | |||
# ftp_clave = 'miclave' | |||
# ftp_raiz = '/public_html' | |||
# | |||
# def __init__(self): | |||
# | |||
# self.client = tftpy.TftpClient(self.ftp_servidor, '69') | |||
# | |||
# | |||
# def sendFile(self, filename): | |||
# | |||
# self.client.upload(filename) | |||
# | |||
#if __name__ == '__main__': | |||
# | |||
# obj = FTPComm() | |||
|
r19 | ||
r25 | |||
|
r19 |