private void ReceiveCallback(IAsyncResult result)
        {
            var connection = (ConnectionInfo)result.AsyncState;

            try
            {
                int bytesRead = connection.Socket.EndReceive(result);
                if (0 != bytesRead)
                {
                    Console.WriteLine("Получен запрос от {0}:", connection.Socket.RemoteEndPoint);
                    String buffer = Encoding.Unicode.GetString(connection.Buffer);
                    buffer = buffer.Substring(0, buffer.IndexOf('\0'));
                    Request req = Serializator.DeserializeRequest(buffer);
                    Console.WriteLine("Запрос поставлен в очередь на обработку...");
                    TranslateRequest(req, connection);
                    connection.Buffer = new byte[512];
                    Console.WriteLine("Продолжаю приём от {0}...", connection.Socket.RemoteEndPoint);
                    connection.Socket.BeginReceive(connection.Buffer, 0, connection.Buffer.Length, SocketFlags.None,
                                                   ReceiveCallback, connection);
                }
            }
            catch (SocketException exc)
            {
                CloseConnection(connection);
                Console.WriteLine("Socket exception: " + exc.SocketErrorCode);
            }
            catch (Exception exc)
            {
                CloseConnection(connection);
                if (exc is ObjectDisposedException)
                {
                    Console.WriteLine("Клиент отсоединен");
                }
                else
                {
                    Console.WriteLine("Exception: " + exc.Message);
                }
            }
        }