diff --git a/ur_py_ctl/client.py b/ur_py_ctl/client.py
new file mode 100644
index 0000000000000000000000000000000000000000..91992039ee0afdd7e0d47a583c2d188270d27acb
--- /dev/null
+++ b/ur_py_ctl/client.py
@@ -0,0 +1,38 @@
+"""Client for communication with UR robot over TCP socket."""
+import logging
+import socket
+
+
+class URClient:
+    """Client for communication with UR robot over TCP socket.
+
+    Parameters
+    ----------
+    hostname
+        hostname or ip for UR controller
+    port
+        TCP port on UR controller
+    timeout
+        Timeout for socket
+    """
+
+    def __init__(self, hostname: str, port=30003, timeout=2):
+        self.addr = (hostname, port)
+        self.send_sock = socket.socket()
+        self.send_sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
+        self.send_sock.settimeout(timeout)
+
+    def send_script(self, script: str) -> None:
+        """Send script to UR controller.
+
+        Parameters
+        ----------
+        script
+
+        Raises
+        ------
+        :py.exc:`TimeoutError`
+        """
+        logging.debug(f"Will send script:\n{script}")
+
+        self.send_sock.sendto(script.encode(), self.addr)