Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Сети > помогите наладить клиента и сервер


Автор: ZC1989 2.5.2007, 17:38
ссуть такая... нашёл в и-нете пример TCP клиента и сервера... откомпилил, но получаю такую фишку... что мне нужно соебинять копьютеры через LAN совединение, причём пробую я на соединённых машинах без switch'а...

у меня сервер переходит в ожидание подключения, а клиент пишет ошибку соединения... я думаю это из-за настройки сокета... он на INET настроен...  что надо сделать, чтоб более менее заставить работать эти два механизма...??

привожу .cpp клиента и сервера

Автор: ZC1989 3.5.2007, 12:41
люди! пожалуйста! скажите как заставить работать эти творения??? smile 

Автор: ptr 3.5.2007, 15:34
А ты IP адрес сервера у клиента поменял?

Автор: ZC1989 3.5.2007, 18:33
ну в начале IP для соединения 127.0.0.1     а дальше его разве надо менять?    зы: этот код не я писал... типа рабочие приемры...

Автор: GremlinProg 3.5.2007, 18:49
Видимо тестировались клиент-сервер на одной и той же машине, это нормально
Цитата

#define SERVERADDR "127.0.0.1"

вместо 127.0.0.1 пропиши IP-адрес машины, на которой установлен сервер.

Автор: ZC1989 3.5.2007, 20:34
GremlinProg, а как его узнать? я имею ввиду программно??????? smile 

Автор: 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....хе.... smile

Добавлено через 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, сам догадался.... хе....есть ещё мозги.... 

это у меня получилось! круто-то как! хе... smile 

а как узнать диапазон адресов, в которых надо сканировать порт???

Автор: 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, мать моя женьщина... жестока.... но понял... буду пробовать... пасибо!!! smile  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)