@Override
	public void run() {
		try {
			// Opening the socket
			socket = new DatagramSocket(serverUDPPort);
			
			
			/* Registering to the Registry Server */
			registerRegistryServer();

			getOtherServers();

			// Listen to articles and pings
			byte buffer[] = new byte[1024];
			DatagramPacket pkg = new DatagramPacket(buffer, 1024, null, 0);

			while (!done) {

				pkg.setLength(1024);
				socket.receive(pkg);
				if (pkg.getData()[0] != 'h') { // List of server :)

					String list = new String(pkg.getData(), pkg.getOffset(),
							pkg.getLength(), "UTF-8").trim();
					System.out.println("Servers list: " + list);

					parseOtherServersList(list);
				} else { // Respond with a pong!
					try {
						InetAddress registryServerIp;

						registryServerIp = InetAddress
								.getByName(registryServerName);

						DatagramPacket outPkg = new DatagramPacket(
								pkg.getData(), pkg.getData().length,
								registryServerIp, pkg.getPort());

						socket.send(outPkg);

					} catch (UnknownHostException e) {
						System.out.println("Could not send pong");
					} catch (UnsupportedEncodingException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}

			}

			socket.close();

		} catch (UnknownHostException e) {
			System.out.println("ERROR unknown host: " + registryServerName);
		} catch (SocketException e) {
			System.out
					.println("ERROR opening the socket with the Registry Server");
			return;
		} catch (IOException e) {
			System.out.println("ERROR sending UDP package");
		}

	}