![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() |
legat |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 16 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
Есть клиент-серверное приложение, и в функционале есть чат(личка). Этот чат надо переделать под .net remoting, чтоб клиенты посылали сообщения друг-другу напрямую, не напрягая лишний раз сервак, для это с сервака каждому клиенту посылаются айпи его друзей. Проблема в следующем, если один из клиентов сидит за роутером, то получается с сервака( сервер на с++) отправить лишь айпи роутера
(Function returned: Official name: homeuser52-36.ccl.perm.ru Address type: AF_INET Address length: 4 IPv4 Address #1: 62.16.52.36) по которому начать взаимодействие клиенты не могут. Как получить полный адрес клиента? З.Ы. Настройки роутера трогать нельзя. Оба клиента подключены к серверу, у него есть их адреса, необходимо связать их между собой напряую. |
![]() ![]() |
legat |
![]()
Сообщение
#2
|
Новичок ![]() Группа: Пользователи Сообщений: 16 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
Цитата А чем тебя не устраивает общение через порт А:5555? Нужно только реализовать еще один уровень (соответствует application) в твоем протоколе связи. То есть изначально, допустим, А общается с С через порт 5555 (это стандартный порт в твоей кухне). И Б тоже общается с С через свой порт 5555. Теперь Б хочет переслать большой блок данных непосредственно А, минуя С. Он шлет С спец запрос на связь с А. С отвечает Б: запрос принят, жди. Потом С говорит А (все по тому же стандартному управляющему каналу, через 5555) : сделай новый канал. Тогда А открывает новый порт (уже случайный, любой свободный) на С. С получает пакет от А и считывает оттуда айпи:порт. Эти данные он передает Б. После этого Б шлет на них, что хотел. Канал закрывается или остается открытым - это все уже вопросы реализации твоего протокола уровня приложения.. Замечание: все, конечно, через UDP. Сделали вот по этой схеме, все бы хорошо, но есть проблема: nat все также не пускает к клиенту А, до тех пор, пока клиент А сам не пошлет что-нибудь до клиента Б, после этого все работает нормально |
Lapp |
![]()
Сообщение
#3
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
nat все также не пускает к клиенту А, до тех пор, пока клиент А сам не пошлет что-нибудь до клиента Б, после этого все работает нормально ![]() Цитата далее клиент Б пытается обратиться к объекту на 1.2.3.4:1234, и нат перебрасывает соответственно на 5555 Молодец, что сам разобрался! ) +1. Раутер пускает только того, к кому обращался сам. На самом деле, это может работать не везде (типа может зависеть от бренда/модели раутера), поскольку при повторном обращении раутер может использовать другой порт.. Ты, кстати, как тестишь? Один клиент ЗА раутером, а другой - НЕТ? Интересно также посмотреть, как будет работать в случае, когда ОБА ЗА раутерами. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
![]() ![]() |
![]() |
Текстовая версия | 18.06.2025 15:18 |