Как сделать UDP без перенаправления портов

Я создаю приложение на С#, оно должно отправлять данные по UDP.

Все работает нормально, пока я не пытаюсь связаться с компьютером, который находится в Интернете за маршрутизатором.

Как мне исправить это, чтобы я мог использовать UDP без переадресации портов?


person igor    schedule 31.03.2010    source источник
comment
Я считаю, что ответ может быть UPnP. Я не знаю достаточно об этом, чтобы на самом деле знать, хотя.   -  person Earlz    schedule 01.04.2010
comment
Вам действительно нужно использовать UDP? UDP уродлив и опасен. Моя компания потеряла многотысячный контракт благодаря UDP (совместно с Log4Net).   -  person MusiGenesis    schedule 01.04.2010
comment
@Musi, хотя это и не ответ как таковой, я бы порекомендовал вам опубликовать полный ответ, в котором говорится, что в этом такого ужасного.   -  person Earlz    schedule 01.04.2010
comment
@Earlz: нет, потому что на самом деле это не отвечает на его вопрос. UDP в основном более низкоуровневый, чем, скажем, HTTP, поэтому он мощный, но с ним сложно работать безопасно. В моем случае UDP приводит к сбою ActiveSync (используемого для связи между ПК и устройством Windows Mobile) таким образом, что требуется перезагрузка ПК и полная перезагрузка устройства. Я узнал об этом во время демонстрационной демонстрации NetMeeting, потому что мой коллега включил приложение Log4Net UDP, не сказав мне (не то чтобы я имел какое-либо представление о том, насколько это плохо, если бы он сказал мне). В первый раз, когда приложение попыталось записать в журнал — БАМ!   -  person MusiGenesis    schedule 01.04.2010
comment
Мне потребовалось больше суток, чтобы понять, что произошло, к тому времени клиент уже искал в другом месте. Что особенно бесило, так это то, что в этом не было абсолютно никакой необходимости. Кому на Земле нужно использовать UDP для удаленного ведения журнала?   -  person MusiGenesis    schedule 01.04.2010
comment
@MusiGenesis, это больше похоже на проблему с Log4Net, чем с UDP. Есть случаи, когда UDP является лучшим выбором, чем TCP.   -  person Foole    schedule 06.04.2010
comment
@Foole: это больше похоже на проблему с моим коллегой, чем с Log4Net или UDP. Однако моя точка зрения заключалась в том, что UDP имеет тенденцию иметь неожиданные побочные эффекты (как показано в моем комментарии и этом вопросе). Если вам нравится иметь дело с неожиданными побочными эффектами, я рекомендую UDP.   -  person MusiGenesis    schedule 06.04.2010


Ответы (1)


Я думаю, что ваша лучшая надежда — это пробивание отверстий UDP.

Насколько я понимаю, каждый хост отправляет данные другому. Это заставляет брандмауэр/NAT думать, что соединение уже установлено.

person Foole    schedule 01.04.2010
comment
Привет, я читал об этой перфорации отверстий UDP, но я не нашел примеров этого в С#. Вы можете показать некоторые из них? - person igor; 02.04.2010
comment
Нет, мне ничего не известно. Я думаю, это потому, что каждая реализация уникальна. - person Foole; 04.04.2010