public void ping() {
	new Thread() {
	    public void run() {
		try {
		    pinging = true;
		    ping = -1;
		    Socket s = new Socket();
		    s.connect(getAddress(), 2000);
		    Server server = new Server(s);
		    Client.instance.remotes.add(server);
		    final long start = System.currentTimeMillis();
		    server.addPacketListener(new PacketListener() {
		        
		        @Override
		        public void handlePacket(Remote r, Packet p, boolean in) {
		    		if(in) {
		    		    if(p instanceof PacketHello) {
		    			r.leave("");
		    			ping = (int) (System.currentTimeMillis() - start);
		    		    }
		    		}
		        }
		    });
		    PacketHello hello = new PacketHello(server);
		    hello.serverHello = false;
		    hello.ping = true;
		    hello.send();
		    try {
			Thread.sleep(2000);
		    } catch (InterruptedException e) {
		    }
		    if(pinging && ping < 0) {
			ping = 0;
			pinging = false;
			System.err.println("[ServerList] " + name + "(" + ip + "): " + Client.instance.translation.translate("protocol.timeout"));
			server.leave("");
		    }
		    if(!server.left())
			server.leave("");
		} catch (IOException e) {
		    System.err.println("[ServerList] " + name + "(" + ip + "): " + e.getMessage());
		    ping = 0;
		    pinging = false;
		}
		
	    }
	}.start();
    }