![]() |
|
Модераторы: feodorv |
![]()
|
|
| VirtualVoid |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 4.8.2009 Где: Сибирь Репутация: нет Всего: 1 |
Добрый день!
Решил освоить сокеты в Linux. Вот простые клиент и сервер: cli.cpp:
srv.cpp:
Сначала запускае сервер в приведенном виде и подключаемся: если клиенту передать внешний адрес, то он подключится к серверу, обе стороны отработают корректно. Если же передать 127.0.0.1 или локалхост, то не сработает. Теперь если в сервере закомментировать строку 20 и раскомментировать 21-22, то он запуститься без ошибок и начнет слушать, но клиент так же не будет поключатся. Если вместо INADDR_ANY написать INADDR_LOOPBACK, то сервер так же запускается, а клиент не подключается. Во всех случаях клиент выводит: Connection failed. Network is unreachable Пинги до локалхоста ходят нормально. Как эта сеть может быть недоступна? В чем проблема? Информация о системе:
Это сообщение отредактировал(а) VirtualVoid - 1.10.2010, 19:53 |
||||||
|
|||||||
| Олег2005 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 421 Регистрация: 26.5.2005 Где: Рига Латвия Репутация: 6 Всего: 11 |
На клиенте
gethostbyname(argv[1]) - argv[1] - должен быть localhost int res=listen(lsock,0); Грубая ошибка. Очередь запросов на соединение равна нулю Укажите int res=listen(lsock,5); |
|||
|
||||
| VirtualVoid |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 4.8.2009 Где: Сибирь Репутация: нет Всего: 1 |
Понял, исправлю. Хотя с одним клиентом и так работало. Основная же проблема решилась упорным вчитыванием в ман. Там написано, что очень много функций, относящихся к сокетам, объявлены deprecated и obsolete, и вместо gethostbyname надо использовать getaddrinfo. Функция gethostbyname в моей системе работала вобще некорректно и на имя localhost возвращала IP-адрес 127.0.0.0 getaddrinfo возвращает 127.0.0.1, программа работает правильно. |
|||
|
||||
| Олег2005 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 421 Регистрация: 26.5.2005 Где: Рига Латвия Репутация: 6 Всего: 11 |
Что это у вас за такая система? Эта функция - классика DNS - и работает как штык во всех системах. То что у вас - это просто недоразумение какое-то....... |
|||
|
||||
| GrayCardinal |
|
|||
|
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 3 Всего: 58 |
Пожалуйста, линк в студию :( Добавлено через 1 минуту и 36 секунд Во дела. Сидишь на руби и не ведаешь что gethostbyname "deprecated" :( А в новых манах это написано :( |
|||
|
||||
| Олег2005 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 421 Регистрация: 26.5.2005 Где: Рига Латвия Репутация: 6 Всего: 11 |
Это действительно более новая функция - и более продвинутая, так как работает как в IPv4 так и в IPv6 Только и всего..... Но gethostbyname() - никто не отменял.... и все стеки ее поддерживают..... Это сообщение отредактировал(а) Олег2005 - 9.10.2010, 23:12 |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Сети | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |