class Server(Thread): def __init__(self, sockAddress): Thread.__init__(self) self.sock, self.address = sockAddress self.fsock = EncapFramedSock(sockAddress) def run(self): print("new thread handling connection from", self.address) while 1: try: print("try statement 1 ********") fileName, contents = self.fsock.receive() print("done **********") except: print("Error: File transfer was not successful!") self.fsock.sendStatus(0) self.fsock.close() sys.exit(1) # data not received if fileName is None or contents is None: print ("Client ", self.address, " has disconnected") sys.exit(0) print("writing *********") lock.acquire() # write the file fileName = fileName.decode() self.writeFile(fileName, contents) self.fsock.sendStatus(1) lock.release() print("release *********") def writeFile(self, fileName, contents): if fileName is None: raise TypeError if contents is None: raise TypeError try: # check if dir exists to receive files if not os.path.exists(PATH): os.makedirs(PATH) os.chdir(PATH) # create file to write writer = open(fileName, 'w+b') writer.write(contents) writer.close() print("File %s received from %s" % (fileName, self.address)) except FileNotFoundError: print("File Not Found Error: File %s not found" % fileName) self.fsock.Status(0) sys.exit(1)
class Server(Thread): def __init__(self, sockAddress): Thread.__init__(self) self.sock, self.address = sockAddress self.fsock = EncapFramedSock(sockAddress) def run(self): print("new thread handling connection from", self.address) while True: try: fileName, contents = self.fsock.receive(debug) except: print("Error: File transfer was not successful!") self.fsock.sendStatus(0, debug) self.fsock.close() sys.exit(1) if debug: print("Received", contents) # Data not received. Exit system. if fileName is None or contents is None: print("Client ", self.address, " has disconnected") sys.exit(0) lock.acquire() if debug: time.sleep(5) fileName = fileName.decode() self.writeFile(fileName, contents) self.fsock.sendStatus(1, debug) lock.release() def writeFile(self, fileName, contents): if fileName is None: raise TypeError if contents is None: raise TypeError try: # Check if there is a directory to receive files. if not os.path.exists(PATH): os.makedirs(PATH) os.chdir(PATH) # New file to open. writer = open(fileName, 'w+b') writer.write(contents) writer.close() print("File %s received from %s" % (fileName, self.address) ) # Prints output to ensure the file was received. except FileNotFoundError: print("File Not Found Error: File %s not found" % fileName) # File not found error. Exit. self.fsock.Status(0, debug) sys.exit(1)
def client(): switchesVarDefaults = ( (('1', '--server'), 'server', "127.0.0.1:50001"), (('?', '--usage'), 'usage', False), (('d', '--debug'), 'debug', False), ) parameterMap = params.parseParams(switchesVarDefaults) server, usage = parameterMap['server'], parameterMap['usage'] if usage: params.usage() try: serverHost, serverPort = re.split(":", server) serverPort = int(serverPort) except: print("Can't parse server:port from '%s'" % server) sys.exit(1) port = (serverHost, serverPort) # create socket listenSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) listenSocket.connect(port) encapSocket = EncapFramedSock((listenSocket, port)) while 1: fileName = input("Enter a filename > ") fileName.strip() if fileName == "exit": # terminate sys.exit(0) else: if not fileName: continue elif os.path.exists(PATH + fileName): f = open(PATH + fileName, "rb") contents = f.read() if len(contents) < 1: print("Error: File %s is empty" % fileName) continue print("encapSocket Before ********") encapSocket.send(fileName, contents) print("encapSocket After *********") # check if server captured and receive the file status = encapSocket.Status() status = int(status.decode()) if status: print("File %s received by server." % fileName) sys.exit(0) else: print( "File Transfer Error: File %s was not received by server." % fileName) sys.exit(1) else: print("File Not Found Error: File %s not found!" % fileName)