input: Write a python function to create a socket server that handles multiple clients concurrently.
  assert isinstance(server, SocketServer)
  assert server.host == "localhost"
  assert server.port == 8080
output: import socket
  import threading
  
  class SocketServer:
      def __init__(self, host='localhost', port=8080):
          self.host = host
          self.port = port
          self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
          self.server_socket.bind((self.host, self.port))
          self.server_socket.listen(5)
          print(f"Server started at {self.host}:{self.port}")
  
      def handle_client(self, client_socket, client_address):
          print(f"Connection from {client_address}")
          while True:
              try:
                  message = client_socket.recv(1024).decode('utf-8')
                  if not message:
                      break
                  print(f"Received from {client_address}: {message}")
                  client_socket.send(f"Echo: {message}".encode('utf-8'))
              except ConnectionResetError:
                  break
          print(f"Connection closed from {client_address}")
          client_socket.close()
  
      def start(self):
          print("Server is running and waiting for connections...")
          while True:
              client_socket, client_address = self.server_socket.accept()
              client_handler = threading.Thread(target=self.handle_client, args=(client_socket, client_address))
              client_handler.start()
  
  def create_server():
      server = SocketServer()
      server.start()
  
  server = SocketServer()