![]() |
|
Модераторы: feodorv |
![]()
|
|
| Saviour |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 16.4.2009 Репутация: нет Всего: нет |
Общеизвестная простая задача (реализация эхо-сервера). Есть локалка и выход в интернет. IP-адрес в интернете динамический (привязала его к хосту через dyndns). Кусок кода сервера:
Если раскомментить строку, то все прекрасно: определяю свой сетевой адрес (192.168.x.x; значение h->h_name - сетевое имя компа; вроде все нормально), связываю с ним сокет. Код клиента аналогичный. Таким образом, в локалке все работает. Не получается связать сокет с внешним IP. Запускаю сервер - bind(...) возвращает не ноль. Где я натупила - в коде или в настройках DynDNS Updater (которые я не трогала за исключением того, что в Settings->Groups добавила свой акк на dyndns.com и выбрала нужный хостнейм)? Нужно ли пробрасывать порт 2342 в настройках модема (на всякий случай пробросила и разрешила его в брандмауэре) или можно без этого обойтись? PS: bind возвращает ошибку 10049 - WSAEADDRNOTAVAIL Это сообщение отредактировал(а) Saviour - 28.3.2010, 22:01 |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 1 Всего: 26 |
Saviour, может gethostbyname возвращает не один ip, а первый в списке просто не подходит?
|
|||
|
||||
| darkmamba |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 16.10.2008 Репутация: нет Всего: 1 |
gethostbyname может вообще ничего не возвратить, нужно поставить проверку.
Помоему биндить нужно на свой внутренний а на роуторе уже разруливать, поидее забиндится должно без косяков -> ошибка в определении ИП ? |
|||
|
||||
| Олег2005 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 421 Регистрация: 26.5.2005 Где: Рига Латвия Репутация: 6 Всего: 11 |
Обычно принято биндить на серверный адрес INADDR_ANY - интерфейс выбирает сам стек.
И для сервера не необходимости вызывать h=gethostbyname(SERVER); Никакой...... Если хочется узнать IP-адрес, по которому прошел bind() - getsockname() |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Сети | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |