2011-12-30 3 views
3

Я хочу создать простое приложение чата, которое не использует явный сервер. Основное требование заключается в том, что пользователь может одновременно общаться со многими друзьями (например, по Skype и т. Д.). Я не имею в виду конференцию здесь, просто несколько отдельных чат-окон.C# P2P chat application design

В настоящее время я хочу только приложение для обмена сообщениями в локальной сети, но я был бы признателен, если бы дизайн был прост в распространении на интернет-соединения.

Интересно, какой дизайн подходит для такого приложения.

  • Что вы думаете о решении, где каждое приложение пользователь имеет TcpListener (неявный сервер) и мультипликатор TcpClient объектов - по одному для каждого друга, он/она разговаривает.
  • Как насчет аутентификации удаленных пользователей? Если в чате приложение генерировать сертификат (X509 или СТГ) или просто предположим, что пользователи в локальной сети будут доверять :)

сердечным приветом,

+0

Я думаю, что ваш ар прокси, поскольку соединения TCP идут, звучат. –

+2

Ваше «решение» относительно TcpListener и TcpClient не является жизнеспособным/масштабируемым из-за его недружественности межсетевого экрана/NAT. –

ответ

3

HttpListener + WebClient(or HttpWebRequest) может предоставить вам дополнительные инструменты для проверки подлинности /безопасность. Базовая аутентификация, Ntlm, встроенная проверка подлинности Windows, https и т. Д., И они более дружественны к брандмауэру.

+0

Чат через HTTP в порядке? Это похоже на WebService .. не приложение? – Queequeg

+0

Почему бы и нет? Просто текстовый протокол через TCP. HttpListener не сильно отличается от TcpListener и WebClient, чем TcpClient. Отправляйте любые данные двоичным/текстовым текстом с помощью WebCLient и читайте из HttpListener, только вы бы сделали с TcpListener. –

+0

Помимо изменения классов, множественность экземпляров в порядке? Значение одного HttpListener и многих HttpWebClients? – Queequeg