Сканирование портов - плохой выбор. Скорее всего, на компьютерах в сети вы будете запускать брандмауэры для отображения вашей машины как злоумышленника. Любые системы обнаружения вторжений в сети также могут быть запущены. Это много накладных расходов на то, что вам нужно.
Я бы порекомендовал сделать широковещательную передачу с использованием UDP или многоадресной рассылки для обнаружения других клиентов.
http://www.codeproject.com/Articles/1705/IP-Multicasting-in-C
Другим вариантом может быть наличие централизованного сервера, либо на веб-сервере (сценарий php, страница asp.net и т. Д.), Либо на веб-службе (REST), к которой клиент чата будет подключаться при запуске, POSTing своего прослушивания IP / Port, а затем, в свою очередь, получит список всех недавно объявленных IP / портов других клиентов в сети. Вы, вероятно, захотите, чтобы некоторые остались здесь, IE: клиент будет отправлять POST на страницу каждые 5 минут, если IP-адрес не будет POST в течение 10 минут, он будет удален из списка.
Чтобы получить публичный IP-адрес устройства, вы можете проверить эту страницу:
http://www.whatismyip.com/faq/automation.asp
Вам просто нужно отправить ему веб-запрос для получения IP-адреса. Если вы хотите получить не 0.0.0.0/127.0.0.1 IP локального интерфейса, вы можете проверить эти сообщения:
Получить локальный IP-адрес
Как получить IP-адрес локальной сети компьютера программно? (C #)