# Echo server program import socket import sys import os import string from time import sleep class ServerHandler: def __init__(self,p): self.port = p self.host = None #symbolic name meaning all available interfaces self.s = None self.connected = 0 self.address = "127.0.0.1" #address of the main controller self.onceConnected = 0 self.error = 'No error' def openSocket(self): self.error = 'No error' for res in socket.getaddrinfo(self.host, self.port, socket.AF_UNSPEC, socket.SOCK_STREAM, 0, socket.AI_PASSIVE): af, socktype, proto, canonname, sa = res try: self.s = socket.socket(af, socktype, proto) self.s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) #this resolves the bug with live packets except socket.error, msg: self.s = None self.connected = 0 self.error = str(msg) continue try: self.s.bind(sa) self.s.listen(1) except socket.error, msg: self.s.close() self.s = None self.connected = 0 self.error = str(msg) continue break if self.s is None: self.connected = 0 return 0 else: #accept the connection self.connection, self.address = self.s.accept() self.connected = 1 self.onceConnected = 1 return 1 def connectedTo(self): return self.address def receiveData(self): if self.connected == 1: while 1: data = self.connection.recv(1024) if not data: return 'NO DATA' else: return data else: return 0 def sendData(self, data): if self.connected == 1: self.connection.send(data) return 1 else: return 0 def closeConnection(self): if self.onceConnected == 1: self.connection.close() return 1 else: return 0 def killPort(self): killResult = os.popen('lsof -i tcp:' + str(self.port) + ' | grep "python " | awk -F" " ' + "'{print $2}'").read() killResult = killResult.replace('\n','') print killResult if killResult!='': print killResult killPort = os.popen("kill -9 " + killResult).read() return 1 return 0