как начать разговор с клиентом Bonjour, зная его имя @ host: port? - PullRequest
4 голосов
/ 12 октября 2011


Я работаю над проектом мессенджера P2P, например, ichat, но только для локальной сети.
Я использую библиотеку jmdns для обнаружения сервисов, тестирую с помощью pidgin и авторизируюсь как пользователь Bonjour.до сих пор, сервис _presence._tcp.local.хорошо обнаружено,
тогда мы знаем информацию пользователя в локальной сети, такую ​​как name @ host: port, так как начать разговор с клиентом Bonjour?
Я посмотрел в XMPP, но он не поддерживает P2P, но я могувряд ли найти библиотеку для расширения Jingle, которая поддерживает P2P.
Может быть, я должен использовать SIP для разговора?а формат пакета совместим с Bonjour?или я должен изучить структуру обмена пакетами?
Может кто-нибудь объяснить немного, как работает ichat для локальной сети?
Большое спасибо за вашу помощь!

Ответы [ 3 ]

4 голосов
/ 12 октября 2011

Я думаю, вы немного смущены.

Bonjour - это механизм поиска услуги. Это не для общения с сервисом. Как только вы нашли имя @ host: port information, вы покончили с Bonjour.

На следующем шаге вам потребуется сообщить протокол, который понимает служба. Маркер _presence в служебной строке указывает, что это служба XMPP. Вам нужно будет поговорить с ним по XMPP. Вы не можете говорить SIP с ним. Вы пытались открыть XMPP-соединение с найденным хостом и портом?

Вы говорите о SIP и Jingle. Они используются для настройки аудио или видео звонка. Если вы пишете программу обмена мгновенными сообщениями, вам не нужно это делать. Достаточно только XMPP.

Если вы хотите поддерживать аудио или видео, вам понадобится один из этих протоколов. Поскольку служба, которую вы нашли, является службой XMPP, вам нужно будет использовать Jingle. Если у вас нет библиотеки, которая говорит на джингле, вам придется написать код самостоятельно. В информации Bonjour нет ничего, что идентифицирует службу SIP, поэтому вы не можете использовать SIP - если вы не можете сделать другой запрос Bonjour и найти службу SIP.

Я предполагаю, что вы работаете на Java. Наиболее популярной библиотекой XMPP для Java является Smack .

2 голосов
/ 14 октября 2011

Спасибо всем за внимание, теперь я что-то нашел.XMPP не поддерживает режим P2P, поддерживает только клиенты-сервер-клиенты.но есть и другой стандарт «XEP-0174: передача сообщений без сервера», который подходит для чата p2p в локальной сети.DNS-SD + XEP-0174, ichat работает таким образом.
, поскольку я использовал библиотеку smack, она не поддерживает p2P;но кто-то сделал некоторые изменения, вот ссылка http://issues.igniterealtime.org/browse/SMACK-262.
Я не пробовал эту XMPPLLConnection, я изучил исходный код smack, он основан на сокетном соединении.к сожалению, для XEP-1074 нет библиотеки Java, поэтому мне приходится работать с потоком xml через сокет.

0 голосов
/ 12 октября 2011

Вы можете использовать SIP для этого.MDNS будет вашим механизмом обнаружения, тогда вы будете использовать обычный SIP для вызова, тот, который вы узнали URI, который вы хотите набрать.

SIPSIMPLE SDK (http://sipsimpleclient.com) реализует эту функцию, воспользовавшись этим просроченным черновиком: http://tools.ietf.org/html/draft-lee-sip-dns-sd-uri-03 это может быть хорошим началом.

По сути, ваш клиент сгенерирует URI, такой как sip: random_stuff @ ip: port, а затем опубликует его вместе с отображаемым именем с помощью MDNS. Приложение также просматривает MDNS.для пиров в локальной сети: например, _sipuri._udp. Получив URI, вы можете просто набрать номер, используя SIP.

...