Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Сети > помогите наладить клиента и сервер |
Автор: ZC1989 2.5.2007, 17:38 |
ссуть такая... нашёл в и-нете пример TCP клиента и сервера... откомпилил, но получаю такую фишку... что мне нужно соебинять копьютеры через LAN совединение, причём пробую я на соединённых машинах без switch'а... у меня сервер переходит в ожидание подключения, а клиент пишет ошибку соединения... я думаю это из-за настройки сокета... он на INET настроен... что надо сделать, чтоб более менее заставить работать эти два механизма...?? привожу .cpp клиента и сервера |
Автор: ZC1989 3.5.2007, 12:41 |
люди! пожалуйста! скажите как заставить работать эти творения??? ![]() |
Автор: ptr 3.5.2007, 15:34 |
А ты IP адрес сервера у клиента поменял? |
Автор: ZC1989 3.5.2007, 18:33 |
ну в начале IP для соединения 127.0.0.1 а дальше его разве надо менять? зы: этот код не я писал... типа рабочие приемры... |
Автор: GremlinProg 3.5.2007, 18:49 | ||
Видимо тестировались клиент-сервер на одной и той же машине, это нормально
вместо 127.0.0.1 пропиши IP-адрес машины, на которой установлен сервер. |
Автор: ZC1989 3.5.2007, 20:34 |
GremlinProg, а как его узнать? я имею ввиду программно??????? ![]() |
Автор: GremlinProg 3.5.2007, 21:27 |
А у тебя много вариантов? Сеть же локальная. Ну используй файл настроек, сохраняй в нем адрес, а программно, читай оттуда. В принципе можно сканировать сеть на поиск своих серверов, был бы смысл. |
Автор: ZC1989 3.5.2007, 21:55 |
GremlinProg, прога должна сама находить IP... чтоб, скажем.... клиент находил сервер автоматом... такое можно? вот к примеру, в играх же, типа Контры, сервант и клиент сами находят IP и соеденяются.... |
Автор: GremlinProg 3.5.2007, 22:02 |
чтобы просто найти сервер, слушающий порт, достаточно пройтись по заданному диапазону адресов и приконнектиться к каждому, т.е. вызвать connect, если коннект вернет -1, значит сервера на этом адресе нет, иначе - есть. Но чтобы реально проверить тот ли это сервер, нужно придумать маленький запрос-ответ, что-то типа сообщения hello. Это сообщение послать серверу при удачном коннекте и только если на него придет корректный ответ, использовать его в дальнейшем. Надеюсь, идея понятна. |
Автор: ZC1989 3.5.2007, 22:16 |
GremlinProg, ага.... идею понял.... только вот как это ворганить программно пока не догоняю.... за исключением connect....хе.... ![]() Добавлено через 1 минуту и 11 секунд это идея на будущее... а как можно конкретно запустить мои клиента и сервер?поменять IP? на что поменять тогда??? |
Автор: GremlinProg 3.5.2007, 22:31 |
либо запусти обе программы на одной машине, либо на разных, но тогда в коде клиента поменяй SERVERADDR на IP машины сервера, т.е. той, на которой серверная программа будет запущена. Больше менять вроде ни чего не нужно. |
Автор: ZC1989 3.5.2007, 22:34 |
GremlinProg, на одной машине пашет.... я так понимаю узнать IP машины можно заглянув в настройки подключения...да? |
Автор: GremlinProg 3.5.2007, 22:41 |
ну конечно, Панель управления -> Сеть и подключения к интернету -> Сетевые подключения там найдешь. Или Пуск -> Выполнить, набери cmd, в нем набери ipconfig /all строка IP-адрес |
Автор: ZC1989 3.5.2007, 22:43 |
GremlinProg, сам догадался.... хе....есть ещё мозги.... это у меня получилось! круто-то как! хе... ![]() а как узнать диапазон адресов, в которых надо сканировать порт??? |
Автор: GremlinProg 3.5.2007, 22:56 |
вызови функцию GetAdaptersInfo, она заполняет структуру IP_ADAPTER_INFO, в ней IpAddressList - это список всех адресов, ассоциированных с сетевым адаптером. Адрес состоит из 2-х компонент: сам адрес и его маска, маска, наложенная на адрес с помощью оператора AND (&) даст тебе адрес твоей сети, например: 192.168.5.0 Вот этот ноль как раз нам и говорит о диапазоне, это все равно, что написать в поиске "*.txt", т.е. тут вместо звездочки - любое имя, а в адресах - любое число от 0 до 255. Остается только организовать цикл по этому диапазону, ну, там надеюсь сам додумаешь. |
Автор: ZC1989 3.5.2007, 22:59 |
GremlinProg, мать моя женьщина... жестока.... но понял... буду пробовать... пасибо!!! ![]() ![]() |