private Object pushDataToOnlineClient(final DataPacket dp, final int timeout) throws ConnectionException {
        Object response = dummy;
        Socket s = null;
        try {
            s = new Socket(address, port);
            s.setSoTimeout(timeout);

            final ObjectOutputStream out = new ObjectOutputStream(s.getOutputStream());
            out.writeObject(dp);
            out.flush();

            ObjectInputStream in = null;
            try {
                in = new ObjectInputStream(s.getInputStream());
                response = in.readObject();
                LOG.log(Level.FINE, "Received reply from client - " + response);
            } catch (IOException ex) {
                LOG.log(Level.WARNING, "Error receiving response from output socket.");
                LOG.log(Level.FINE, "Error receiving response from output socket.", ex);
            } catch (ClassNotFoundException ex) {
                LOG.log(Level.WARNING, "Unknown class object received.");
                LOG.log(Level.FINE, "Unknown class object received.", ex);
                response = GenericResponses.ILLEGAL_DATA;
            } finally {
                if (in != null) {
                    in.close();
                }
            }
        } catch (SocketTimeoutException ex) {
            throw new ConnectionException(ConnectionExceptionCause.TIMEOUT);
        } catch (NotSerializableException ex) {
            throw new IllegalArgumentException("Data for sending (and all of its members) must be serializable (eg. implement Serializable or Externalizable interface.)");
        } catch (IOException ex) {
            LOG.log(Level.WARNING, "Cannot write to output socket.");
            LOG.log(Level.FINE, "Cannot write to output socket.", ex);
            setStatus(Status.OFFLINE);
            throw new ConnectionException(ConnectionExceptionCause.TARGET_OFFLINE);
        } finally {
            if (s != null) {
                try {
                    s.close();
                } catch (IOException ex) {
                    LOG.warning("Error closing socket.");
                    LOG.log(Level.FINE, "Error closing socket.", ex);
                }
            }
        }
        return response;
    }