Russian Qt Forum
Май 29, 2024, 12:59 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Клиент не может соединиться с сервером  (Прочитано 12686 раз)
merke
Гость
« : Сентябрь 28, 2010, 11:34 »

Всем привет!

Есть приложение клиент-сервер, работают они в пределах одной локальной сети. сервер слушает на QHostAddress::Any, 1234
Клиент коннектится следующим образом connectToHost(QHostAddress::LocalHost, 1234)

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

Можете подсказать, в чем может быть проблема?

Записан
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #1 : Сентябрь 28, 2010, 11:46 »

Цитировать
Клиент коннектится следующим образом connectToHost(QHostAddress::LocalHost, 1234)
LocalHost - это компьютер клиента (замыкание сам на себя или 127.0.0.1)
Записан
merke
Гость
« Ответ #2 : Сентябрь 28, 2010, 11:49 »

А что советуете тогда в этом случае?
Записан
merke
Гость
« Ответ #3 : Сентябрь 28, 2010, 11:52 »

А я думаю LocalHost Это и есть локалка или я ошибаюсь?
Записан
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #4 : Сентябрь 28, 2010, 11:53 »

использовать
Код:
connectToHost(QHostAddress("реальный IP сервера"), 1234)
например
Код:
connectToHost(QHostAddress("192.168.1.100"), 1234)
Записан
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #5 : Сентябрь 28, 2010, 11:55 »

А я думаю LocalHost Это и есть локалка или я ошибаюсь?
ошибаетесь, причем весьма сильно:
http://doc.qt.nokia.com/4.6/qhostaddress.html#SpecialAddress-enum
В IP-сетях LocalHost всегда обозначает свой компьютер. Это алиас на 127.0.0.1, к которому можно обратиться даже при отсутствии подключения к сети (конечно адаптер должен присутствовать)
« Последнее редактирование: Сентябрь 28, 2010, 11:57 от Hellraiser » Записан
merke
Гость
« Ответ #6 : Сентябрь 28, 2010, 12:03 »

Так теперь в клиенте пишу connectToHost(QHostAddress("адрес_серверной_машины"), 1234)

Эффекта ни какого.
Записан
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #7 : Сентябрь 28, 2010, 12:05 »

1. прямо так, или все-таки указываем адрес?
2. как насчет firewalls? порт на сервере действительно доступен для клиентов?
Записан
merke
Гость
« Ответ #8 : Сентябрь 28, 2010, 12:09 »

Сейчас приходится тестировать дома. Стоит два компа, мой ноут соединен с другим компом роутером (Wi-Fi). Сервер стоит на серверной машине, клиент на моем ноуте, пишу connectToHost(QHostAddress(192.168.1.1), 1234)
Записан
merke
Гость
« Ответ #9 : Сентябрь 28, 2010, 12:10 »

Нет порты не блокируются!
Записан
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #10 : Сентябрь 28, 2010, 12:13 »

Попробую догадаться: клиент и сервер в одной локальной сети, образованной интернет-маршрутизатором с wi-fi. Пробую догадываться дальше - маршрутизатор самый обыкновенный, типа ASUS, D-Link и т.п. В таком случае 192.168.1.1 - это адрес самого маршрутизатора, а у сервера ip другой.
Записан
merke
Гость
« Ответ #11 : Сентябрь 28, 2010, 12:15 »

Очень верно! Как узнать адрес самого сервера?
Записан
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #12 : Сентябрь 28, 2010, 12:21 »

Спросить у сервера  Смеющийся Если NetBIOS имя сервера известна (типа "servak1") - сделать пинг по имени, должны получить адрес.
P.S. Qt здесь не причем - это уже работа с TCP/IP-протоколом. Лучше сначала пробовать утилитами самой OS (ping, netstat, ipconfig, nslookup, arp - стандартный набор для Windows).
Записан
x-sam
Гость
« Ответ #13 : Сентябрь 28, 2010, 12:23 »

В консоли на машине ipconfig для windows и ifconfig для *nix
или ping имявторогокомпа

з.ы. когда нажимал ответить ответа выше еще не было(:
з.з.ы. а я и не говорил, что на клиенте, конечно же на сервере
« Последнее редактирование: Сентябрь 28, 2010, 12:26 от x-sam » Записан
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #14 : Сентябрь 28, 2010, 12:25 »

В консоли на машине ipconfig для windows и ifconfig для *nix
Только эту команду, к сожалению  Злой , надо выполнить на сервере
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.043 секунд. Запросов: 21.