_J_ 0 Опубликовано: 2006-12-10 01:10:18 Share Опубликовано: 2006-12-10 01:10:18 Хотелось бы в авторизаторе иметь возможность в адресе сервера прописывать не только ip адрес, но и доменное имя сервера. Ибо так удобней, сменил в днсе ип, а клиентам ничего менять не нада. А то каждого оповещать о смене параметров... Ссылка на сообщение Поделиться на других сайтах
Max 0 Опубліковано: 2006-12-10 08:56:27 Share Опубліковано: 2006-12-10 08:56:27 да мысль хорошая Ссылка на сообщение Поделиться на других сайтах
XoRe 0 Опубліковано: 2006-12-10 13:12:54 Share Опубліковано: 2006-12-10 13:12:54 В исходниках авторизатора (2.55.7) ищем файл OptionsUnit.cpp Там смотрим код: void __fastcall TOptionsForm::OkBitBtnClick(TObject *Sender) { unsigned long ip = inet_addr(ServerIPEdit->Text.c_str()); if (ip == INADDR_NONE) { ShowMessage("Неверный IP!"); ServerIPEdit->SetFocus(); return; } Как видим, идет простая проверка на превращение строки в ип-адрес. Откопав у себя исходничек с таким кодом struct hostent *phe; /* pointer to host information entry */ /* Map host name to IP address, allowing for dotted decimal */ if ( phe = gethostbyname(host) ) memcpy(&sin.sin_addr, phe->h_addr, phe->h_length); else if ( (sin.sin_addr.s_addr = inet_addr(host)) == INADDR_NONE ) exit(1); Я решил, что можно сделать что-нибудь приблизительно такое: void __fastcall TOptionsForm::OkBitBtnClick(TObject *Sender) { struct hostent *phe; /* pointer to host information entry */ unsigned long ip; /* Map host name to IP address, allowing for dotted decimal */ if (phe = gethostbyname(ServerIPEdit->Text.c_str())) { ip = inet_addr(phe->h_addr); } else if ( (ip = inet_addr(ServerIPEdit->Text.c_str())) == INADDR_NONE ) { ShowMessage("Неверный IP или домен!"); ServerIPEdit->SetFocus(); return; } Честно скажу, у себя не компилировал, не проверял. Быть может вместо "ip = inet_addr(phe->h_addr);" нужно писать "ip = phe->h_addr". А в целом оставляю, как домашнее задание для программистов ) Ссылка на сообщение Поделиться на других сайтах
_J_ 0 Опубліковано: 2006-12-10 22:02:01 Автор Share Опубліковано: 2006-12-10 22:02:01 Я конечно дико извиняюсь, может в этой жизни я кое-что упустил, но где взять исходники 2.55.7? Имеются /dev/hands для компила Ссылка на сообщение Поделиться на других сайтах
XoRe 0 Опубліковано: 2006-12-11 09:30:18 Share Опубліковано: 2006-12-11 09:30:18 http://stg.dp.ua/download.php?show=all Там жми на: inetaccess/2.55.7/inetaccess.2.55.7.src.rar Ссылка на сообщение Поделиться на других сайтах
_J_ 0 Опубліковано: 2006-12-12 13:35:30 Автор Share Опубліковано: 2006-12-12 13:35:30 void __fastcall TOptionsForm::OkBitBtnClick(TObject *Sender) { struct hostent *phe; /* pointer to host information entry */ unsigned long ip; /* Map host name to IP address, allowing for dotted decimal */ if (phe = gethostbyname(ServerIPEdit->Text.c_str())) { ip = inet_addr(phe->h_addr); } else if ( (ip = inet_addr(ServerIPEdit->Text.c_str())) == INADDR_NONE ) { ShowMessage("Неверный IP или домен!"); ServerIPEdit->SetFocus(); return; } Компилиццо и впринципе имена ресолвит, но подключки нет. При вбивании доменного имени проверяет его на ресолв и в случае неудачи возвращает ошибку, при удаче проглатывает нормально. А вот соединения нет. Причём если имя меняеь опять на ип адрес то всё нормально ip = phe->h_addr с этим не собираетВот Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Создайте аккаунт или войдите в него для комментирования
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйтесь для получения аккаунта. Это просто!
Зарегистрировать аккаунтВхід
Уже зарегистрированы? Войдите здесь.
Войти сейчас