Direi che come soluzione potrebbe anche andare teoricamente ma hai dimenticato l'ipotesi che l'utenta possa chiudere il processo tramite il Task Manager con chiudi processo o il processo si chiuda a causa di un'eccezzione non gestita o di sistema ecc. ecc.. In quel caso l'utente non sarà più in linea ma alla richiesta di Ping rispondrebbe ugualemente. Forse allora meglio aggiungere un'altro campo di controllo come l'ora corrente.
Mi spiego meglio: l'utente si connette e registra sul Server, oltre che il suo User e IP sull'HasTable anche l'ora corrente del suo PC ad intervalli regolari (ad esempio ogni minuto, chiaramente l'ora deve essere la stessa su tutti i PC). Ora con un Timer o con una Classe creata ad hoc controlli che l'ora memorizzata dall'utente che risulta essere nell'HashTable sia compresa tra l'ora corrente è l'ora corrente meno 1 minuto, ora hai la certezza che il Client sia connesso. In questa caso la richiesta di Ping non ha piu senso.