Я бы Udp использовал только для определения текущего сервера, а передачу данных делал бы по Tcp.
Прога посылает широковещательный запрос в сеть на определенный порт, в поисках отклика. Если никто не отозвался, то открывается порт для прослушки Udp - становится сервером (+ все что нужно для сервера чата). Если есть отклик, то читаем адрес и порт по которому нас приглашают и выступаем в роли клиента.
Если сервер отвалится, то первый кто это обнаружит, занимает его место по такому же алгоритму.
|