- в неті розміщена лише БД, з якою звязується серверна частина програми(далі сервер).
- при запусці проги, id коситувача помічаються як он, при закриті як офф
Тобто, статус користувача (онлайн/офлайн) зберігається в БД на сервері?
Користувач при запуску з'єднується з сервером, пише «я онлайн» і від'єднується, при закритті — так само, але пише «я офлайн»? (Добре, уявімо, комп'ютер користувача (який онлайн) несподівано вимкнувся, й програма не встигла повідомити сервер про вихід з мережі. Як діяти в такій ситуації?)
Або ж користувач з'єднується з сервером, і це з'єднання триває до завершення роботи користувача (і сервер вважає, що користувач онлайн, доки це з'єднання не буде закрито. Що теж не дуже бажано: кількість відкритих з'єднань — обмежений ресурс; втім, для невеликої кількості користувачів не критично).
Або ж користувач кожні n хвилин пише серверу «я онлайн» — якщо не з'явився протягом останніх n хвилин, значить, вже не в мережі? (Але можлива ситуація, коли користувач щойно вийшов з мережі, й n хвилин ще не минуло).
(Гадаю, можливі й інші варіанти чи їх комбінація).
- при запиті користувача, сервер перевіряє, чи необхідний користувач в онлайн.
- якщо так, забезпечує пряму передачу даних між двома компютерами через інтернет.
Центральний сервер інформує клієнта (2), як зв'язатися з клієнтом (1), після чого його місія завершена?
В принципі, щось подібне існує вже (взяти, для прикладу, торенти, де центральний сервер (торент-трекер) лише допомагає клієнтам знайти один один одного, а сам файлів не пересилає), тому не бачу, чому це неможливо.
В найпростішому випадку, кожен користувач одночасно є клієнтом та сервером (мається на увазі не центральний сервер, який зв'язує клієнтів між собою, а те, що користувач очікує з'єднання від іншого комп'ютера для обміну даними) - у цьому випадку, центральний сервер зберігатиме імена користувачів та їх IP-адреси, IP користувача має лишатися статичним у межах мережі (локалки чи інету), також на машинах користувачів має бути відкритий певний наперед обумовлений порт для прийому зовнішніх з'єднань від інших користувачів. Гугліть java.net.Socket, java.net.ServerSocket, також, імовірно, в програмі буде задіяно багатопотоковість (java.lang.Thread).