##// END OF EJS Templates

File last commit:

r165:166
r223:224
Show More
library2.py
164 lines | 5.0 KiB | text/x-python | PythonLexer
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()