Сервер:
- есть коннект.
- посылаем 1 байт
- записываем время отправки
...
- пришел 1 байт
- записываем время получения и снова отправляем 1 байт
...
- так несколько раз (50 - 100, где-то так)
Клиент:
- есть коннект
- ждем когда придет 1 байт
- как только байт пришел - отправляем его обратно
...
Теперь на сервере у нас есть массив времён отправки и времён получения
можем вычислить средний пинг клиента. Зная пинг - отправляем клиенту примерно такое:

Код:
system.getTyme() + client.getPing()
Когда такое сообщение дойдет до клиента, на сервере как раз будет именно такое время. Ну или почти такое.
Далее клиент записывает это время и дату получения этого времени.
Дальше и у клиента и у сервера "на борту" одно и то же время