def start(self): self.tcp_sock.listen(5) while True: (cs, addr) = self.tcp_sock.accept() print("Client connected from " + str(addr[0])) data = cs.recv(1024) data = data.decode() # expected to receive a string try: ci = ClientInput(data) if ci.t == 'E': print("Client requesting evaluation") ans = polynomials.evaluate(ci.arg1, ci.arguments) msg = "E" + str(ans) if ci.t == 'S': print("Client requesting bisection") print("a: " + str(ci.arg1)) print("b: " + str(ci.arg2)) print("tol: " + str(ci.tol)) print("arguments: " + str(ci.arguments)) ans = polynomials.bisection(ci.arg1, ci.arg2, ci.arguments, ci.tol) msg = "S" + str(ans) #print (ans) except Exception: print("Client sent invalid data") msg = "XError parsing data" cs.sendall(msg.encode())
def Evaluate(Identifier, DataArray): DataArray = DataArray.replace(Identifier,"") print('Received data: '+ DataArray) DataArray = DataArray.split(' ') print('After spliting: ') print(DataArray) Xvalue = float(DataArray[0]) newValues = [] for s in range(len(DataArray)-1): newValues.append(DataArray[s+1]) print('In an int array: ') print(newValues) print("\nX-value: ") print(Xvalue) newValues = map(int, newValues) result = str(polynomials.evaluate(Xvalue,newValues)) clientsocket.send("E"+result)
logging.info("all data received: " + data_string) response = 'response was not properly set' values = data_string.split(' ') logging.info("values: {}".format(values)) logging.info("Peter test: {}, number of values: {}".format(values[0][0], len(values))) if len(values) <= 1 or values[0][0] not in ACCEPTABLE_REQUEST_TYPES: logging.error("Invalid request syntax |{}|".format(data_string)) response = 'XInvalid request syntax, Your request either did not start with an E or S,' \ ' or you had too few arguments' else: if values[0][0] == ACCEPTABLE_REQUEST_TYPES[0]: try: x = float(values[0][1:]) poly = [float(x) for x in values[1:]] result = polynomials.evaluate(x, poly) logging.info("Evaluating {} for {}".format(x, poly)) print("Result: ", result) response = "E" + str(result) except: response = 'Xinvalid numeric format' elif values[0][0] == ACCEPTABLE_REQUEST_TYPES[1]: try: a = float(values[0][1:]) b = float(values[1]) poly = [float(x) for x in values[2:len(values) - 1]] tolerance = float(values[len(values) - 1]) logging.info("Bisection with a:{}, b{}, poly{}, tolerance{}".format(a, b, poly, tolerance)) result = polynomials.bisection(a, b, poly, tolerance) response = "S" + str(result) except:
if len(request) == 0: message = "XEmpty request" logging.error(" response " + message) sock.sendall(message.encode()) sock.shutdown(1) else: request_code = request[0] # assuming the message has at least one character if request_code == "E": try: parameters = request[1:].split(' ') args = [float(x) for x in parameters] x = args[0] poly = args[1:] value = polynomials.evaluate(x, poly) message = "E" + str(value) logging.info("response " + message) sock.sendall(message.encode()) sock.shutdown(1) except Exception as ex: logging.error("Input value conversion error " + request[1:]) logging.error(str(ex)) message = "X Invalid format numeric data: " + request[1:] logging.error("response " + message) sock.sendall(message.encode()) sock.shutdown(1) elif request_code == "S": try:
tol = float(tokens[len(tokens) - 1]) poly = [] for i in range(2, len(tokens) - 1): poly.append(float(tokens[i])) reply = "S" + str(bisection(a, b, poly, tol)) except ValueError: reply = "Xinvalid format numeric data" elif message[0] == "E": tokens = message[1:].split() if len(tokens) < 1: reply = "Wrong number of fields in request" else: try: x = float(tokens[0]) poly = [] for i in range(1, len(tokens)): poly.append(float(tokens[i])) reply = "E" + str(evaluate(x, poly)) except ValueError: reply = "Xinvalid format numeric data" else: reply = "Invalid Operator:" + str(message[0]) print("Sending result: " + reply) received = reply.encode() socket.sendall(received) socket.shutdown(1) socket.close() check.close()
message = "XEmpty request" logging.error(" response " + message) sock.sendall(message.encode()) sock.shutdown(1) else: request_code = request[ 0] # assuming the message has at least one character if request_code == "E": try: parameters = request[1:].split(' ') args = [float(x) for x in parameters] x = args[0] poly = args[1:] value = polynomials.evaluate(x, poly) message = "E" + str(value) logging.info("response " + message) sock.sendall(message.encode()) sock.shutdown(1) except Exception as ex: logging.error("Input value conversion error " + request[1:]) logging.error(str(ex)) message = "X Invalid format numeric data: " + request[1:] logging.error("response " + message) sock.sendall(message.encode()) sock.shutdown(1) elif request_code == "S": try:
from polynomials import evaluate, bisection poly = [-945, 1689, -950, 230, -25, 1] x = 1.0 a = 0 b = 2 tol = 1e-15 v = evaluate(x, poly) print(v) r = bisection(a, b, poly, tol) print(r)
if len(list_of_parts) < 2: raise Exception("Too few arguments" ) # Caught if there aren't enough arguments # If we are sending an polynomials.evaluate request, it will start with E # followed by the value of x # i.e. E1.0 is evaluate given polynomial where 1.0 is the value of x for i in range(1, len(list_of_parts)): list_of_parts[i] = int(list_of_parts[i]) print("Printing the list of parts after converting") print(list_of_parts) print("xval is: " + list_of_parts[0][1:] + " poly is: " + str(list_of_parts[1:])) result = evaluate(float(list_of_parts[0][1:]), list_of_parts[1:]) print("result " + str(result)) response_status = 'E' response_message = str(result) elif client_data[0] == "S": if len(list_of_parts) < 4: raise Exception("Too few arguments" ) # Caught if there aren't enough arguments if float(list_of_parts[len(list_of_parts) - 1]) < 0: raise Exception( "Invalid tolerance" ) # According to polynomials.py, tolerances should be greater than 0 elif float(list_of_parts[len(list_of_parts) - 1]) == 0: raise Exception("Invalid tolerance"
result = too_few_args_error() end_connection(response_tag="X", result=result, sock=sock) # data[0] = float(data[0].replace("E","")) data.pop(0) i = 0 while i < len(data): try: data[i] = float(data[i]) except: result = string_to_float_error(data[i]) end_connection(response_tag="X", result=result, sock=sock) exit(0) i += 1 try: result = polynomials.evaluate(x, data) except: break elif "S" in data[0]: response_tag = "S" try: a = float(data[0].replace("S", "")) data[0] = a except: result = string_to_float_error(data[0].replace("S", "")) end_connection(response_tag="X", result=result, sock=sock) try: b = data[1] except:
from polynomials import evaluate, bisection # Evaluate print("=========== Evaluate ===========") message = "E1.0 -945 1689 -950 230 -25 1" argsStr = message[1:].split(' ') args = [float(x) for x in argsStr] x = args[0] poly = args[1:] result = evaluate(x, poly) print("Evaluation: " + str(result)) print("===============================\n") # Bisection print("========== Bisection ==========") message = "S0 2 -945 1689 -950 230 -25 1 1e-15" argsStr = message[1:].split(' ') args = [float(x) for x in argsStr] a = args[0] b = args[1] poly = args[2:8] tol = args[8] print('a: ' + str(a)) print('b: ' + str(b))
client_data = "" # get data from the client while len(bytes) > 0: client_data += bytes.decode() bytes = sock.recv(2048) # parse and process the data from the client if client_data[0] == 'E': try: print("Received Data Before Splitting: " + client_data) list_of_parts = client_data.split(' ') print("Data After Split: " + str(list_of_parts)) xVal = float(list_of_parts[0][1:]) poly = list(map(int, list_of_parts[1:])) result = polynomials.evaluate(xVal, poly) print("Evaluate Polynomial Calculation Completed: " + str(result)) except: # signal an error # error response response_status = 'X:' response_message = ' Invalid Format Numeric Data to Evaluate!' logging.error(response_message) elif client_data[0] == 'S': try: print("Received Data Before Splitting: " + client_data) list_of_parts = client_data.split(' ') print("Data After Split: " + str(list_of_parts)) aVal = int(list_of_parts[0][1:]) bVal = int(list_of_parts[1]) polyBisec = list(map(int, list_of_parts[2:-1]))
and non integer Polynomials. ''' if (len(request) < 4 or len(request) > 4): error = ['X', "Missing arguments."] err(error) print("Shutting down server.") c.close() elif not (all(isinstance(item, int) for item in request[3])): error = ['X', "Invalid number format."] err(error) print("Shutting down server.") c.close() else: x = request[1] poly = request[3] temp = polynomials.evaluate(x, poly) success = ['E', temp] #c.send(success) eval(success) print("Server finished. Shutting down.") c.close() elif request[0] == 'S': ''' Error checking for request type 'X'. I've tested for missing arguments and non integer polynomials. ''' if (len(request) < 8 or len(request) > 8): error = ['X', "Missing Arguments"] #c.send(error) err(error)
test_string = data.decode() print("Server received: " + test_string) try: # Evaluate expression if test_string.split(' ').pop(0)[0] is 'E': try: if len(test_string.split(' ')) is 1: conn.sendall(str.encode("XToo few arguments ")) else: x = float(test_string.split(' ').pop(0)[1:]) poly = list(map(int, test_string[5:].split(' '))) result = str(polynomials.evaluate(x, poly)) print("Sending back to client... E" + result) conn.sendall(str.encode("E" + result)) except: conn.sendall( str.encode("Could not convert string to float")) #evaluate bisection if test_string.split(' ').pop(0)[0] is 'S': try: if len(test_string.split(' ')) is 1: conn.sendall(str.encode("XToo few arguments "))