From bb1a7f21f96ff5405ef777a639fcb276944a99c2 Mon Sep 17 00:00:00 2001 From: Bastian Schroll Date: Thu, 24 Oct 2019 18:46:22 +0200 Subject: [PATCH] fix server/client encoding --- boswatch/network/client.py | 23 +++++++++++++---------- boswatch/network/server.py | 15 +++++++-------- 2 files changed, 20 insertions(+), 18 deletions(-) diff --git a/boswatch/network/client.py b/boswatch/network/client.py index 185631b..b8f04f8 100644 --- a/boswatch/network/client.py +++ b/boswatch/network/client.py @@ -17,7 +17,6 @@ import logging import socket import select -from pprint import pformat logging.debug("- %s loaded", __name__) @@ -74,9 +73,10 @@ class TCPClient: @param data: data to send to the server @return True or False""" try: - logging.debug("transmitting:\n%s", pformat(data)) - header = str(len(data)).ljust(HEADERSIZE) - self._sock.sendall(bytes(header + data, "utf-8")) + logging.debug("transmitting:\n%s", data) + data = data.encode("utf-8") + header = str(len(data)).ljust(HEADERSIZE).encode("utf-8") + self._sock.sendall(header + data) logging.debug("transmitted...") return True except socket.error as e: @@ -92,12 +92,15 @@ class TCPClient: read, _, _ = select.select([self._sock], [], [], timeout) if not read: # check if there is something to read return False - header = self._sock.recv(HEADERSIZE) + + header = self._sock.recv(HEADERSIZE).decode("utf-8") if not len(header): # check if there data return False - logging.debug("recv header: %s", header) - length = int(header.decode("utf-8").strip()) + + length = int(header.strip()) received = self._sock.recv(length).decode("utf-8") + + logging.debug("recv header: '%s'", header) logging.debug("received %d bytes: %s", len(received), received) return received except socket.error as e: @@ -111,9 +114,9 @@ class TCPClient: if self._sock: _, write, _ = select.select([], [self._sock], [], 0.1) if write: - data = "" - header = str(len(data)).ljust(HEADERSIZE) - self._sock.sendall(bytes(header + data, "utf-8")) + data = "".encode("utf-8") + header = str(len(data)).ljust(HEADERSIZE).encode("utf-8") + self._sock.sendall(header + data) return True return False except socket.error as e: diff --git a/boswatch/network/server.py b/boswatch/network/server.py index 3aedd88..eda41fc 100644 --- a/boswatch/network/server.py +++ b/boswatch/network/server.py @@ -20,7 +20,6 @@ import socketserver import threading import time import select -from pprint import pformat logging.debug("- %s loaded", __name__) @@ -47,18 +46,18 @@ class _ThreadedTCPRequestHandler(socketserver.BaseRequestHandler): if not read: continue # nothing to read on the socket - header = self.request.recv(HEADERSIZE) + header = self.request.recv(HEADERSIZE).decode("utf-8") if not len(header): break # empty data -> socked closed - length = int(header.decode("utf-8").strip()) + length = int(header.strip()) data = self.request.recv(length).decode("utf-8") if data == "": continue - logging.debug("%s recv header: %s", req_name, header) - logging.debug("%s recv %d bytes:\n%s", req_name, len(data), pformat(data)) + logging.debug("%s recv header: '%s'", req_name, header) + logging.debug("%s recv %d bytes:\n%s", req_name, len(data), data) # add a new entry and the decoded data dict as an string in utf-8 and an timestamp self.server.alarmQueue.put_nowait((self.client_address[0], data, time.time())) # queue is threadsafe @@ -66,9 +65,9 @@ class _ThreadedTCPRequestHandler(socketserver.BaseRequestHandler): logging.debug("%s send: [ack]", req_name) - data = "[ack]" - header = str(len(data)).ljust(HEADERSIZE) - self.request.sendall(bytes(header + data, "utf-8")) + data = "[ack]".encode("utf-8") + header = str(len(data)).ljust(HEADERSIZE).encode("utf-8") + self.request.sendall(header + data) except socket.error as e: logging.error(e)