public void run()
	{	
		/* Continue the probing untill there are no students, or end of an application */
		while( studentsList.size() > 0 )
		{
			/* In each iteration, go through the entire students list and delete their entries, if the students are not answering */
			java.util.Iterator<Student> iter = studentsList.iterator();
			
			while( iter.hasNext() )
			{	
				Student s = iter.next();
				//System.out.println("The student index is "+studentIndex+" and attempts = "+attempts.get(studentIndex).intValue());
				Packet probe_pack = new Packet(seq_no++,false,false,true,null);
				byte[] byte_buff = Utilities.serialize(probe_pack);
				DatagramPacket probe = new DatagramPacket(byte_buff, byte_buff.length, s.IP, clientProbePort);
				
				/* Clear the attempts to zero */
				attempts = 0;
				
				while( attempts <= 3 )
				{
					System.out.println("Started probing!");
					try
					{
						sock.send(probe);
						System.out.println("Probe sent!");
						byte[] buf = new byte[Utilities.MAX_BUFFER_SIZE];
						DatagramPacket recv_probe = new DatagramPacket(buf, buf.length);
						attempts++;
						
						
						sock.receive(recv_probe);
						Packet p = (Packet)Utilities.deserialize(buf);
						
						if( p.probe_packet == true )
						{
							break;
						}
						else
						{
							if( attempts >= 3 )
							{
								iter.remove();
								System.out.println("Unable to reach student! "+s.IP);
								break;
							}
						}
					} 
					catch (IOException e) 
					{
						if( attempts >= 3 )
						{
							iter.remove();
							System.out.println("Unable to reach student! "+s.IP);
							break;
						}
					}
				}
			}
		}
	}