Вопрос № 110464: Здравствуйте
Допустим у компа есть несколько IP адресов. один от Dail Up модема, второй от сетевухи, третий от DSL или другого высокоскоростного соединения, а четвертый вообще 127.0.0.1. Вопрос - как выявить IP подключенный к интернету?
Спаси...Вопрос № 110488: Здраствуйте.
Вот привело меня к Вам такая проблема.
В хпх есть функция pack — Pack data into binary string.
Вот описание её: string pack ( string $format [, mixed $args [, mixed $...]] )
Ищю аналог её на дельфи в пхп скрипте есть таки...Вопрос № 110515: Доброго времени суток. Есть процедура (в приложении qqq), у которой в параметрах передается переменная типа record. Теперь хочется ее запихнуть в dll. Подскажите,пожалуста, как это сделать.
P.S.:расказывать как делать dll с подпрограммами у котор...Вопрос № 110588: Здравствуйте, уважаемые эксперты! Не могу понять, что за ошибки:
1. GetDriveType(PChar(drive)), выдает - Invalid typecast. где drive: shortstring ну а GetDriveType(@(drive)[1]) - работает нормально, в чем проблема?
2. Пишу программу, которая ...
Вопрос № 110.464
Здравствуйте
Допустим у компа есть несколько IP адресов. один от Dail Up модема, второй от сетевухи, третий от DSL или другого высокоскоростного соединения, а четвертый вообще 127.0.0.1. Вопрос - как выявить IP подключенный к интернету?
Спасибо.
Отправлен: 21.11.2007, 23:51
Вопрос задал: Slaer (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: PavelGM
Здравствуйте, Slaer!
Попробуйте так: через сокет соединиться с заведомо работающим сайтом по порту HTTP(80), а потом посмотреть в свойствах сокета LocalAdress - это им будет IP.
Ответ отправил: PavelGM (статус: Студент)
Ответ отправлен: 23.11.2007, 10:22 Оценка за ответ: 3 Комментарий оценки: Уже пробовал и ClientSocket и через Powersock подключатся !!! всеравно в свойствах LocalAdress (LocalIP) получаю неверный айпишник! Странно както !
Может есть еще какойто способ?
Подскажите пожалуйста.
Отвечает: Denisss
Здравствуйте, Slaer!
К ответу прикреплен файл [197 K], содержащий пример такой проверки.
В принципе, он реализует именно то, что рекомендовал эксперт PavelGM.
Несколько комментариев:
Проверяет наличие соединения с Интернет функция function checkIP(const anIP: String): Boolean;, где anIP: String - локальный IP адрес. Удаленный хост функция берез из Edit5: TEdit (по умолчанию туда прописан
популярный хост). Для подключения по 80-му порту используется компонент TIdTCPClient с вкладки Indy Clients (у меня Delphi 7-й версии). Чтобы указать компоненту TIdTCPClient локальный IP адрес, у него есть свойство BoundIP: String.
Для подключения к хосту, я даю компоненту 100 мс (Connect(100);). Если для модемного соединения этого мало, то увеличьте его.
Получение списка локальных IP адресов осуществляе
т функция function collectIPs: TStringList;. Реализацию данной функции можно найти в Интернете на сайтах, посвященных Delphi, потому ее расписывать не буду.
Удачи!
Прикреплённый файл: Загрузить >> Срок хранения файла на сервере RusFAQ.ru составляет 30 суток с момента отправки ответа. --------- Будь осторожен, когда молишься ради чего-то, потому что можешь это получить...
Ответ отправил: Denisss (статус: Профессионал) Россия, Москва ---- Ответ отправлен: 24.11.2007, 14:37 Оценка за ответ: 5 Комментарий оценки: Спасибо
Вопрос № 110.488
Здраствуйте.
Вот привело меня к Вам такая проблема.
В хпх есть функция pack — Pack data into binary string.
Вот описание её: string pack ( string $format [, mixed $args [, mixed $...]] )
Ищю аналог её на дельфи в пхп скрипте есть такие строчки
$fs=@fsockopen($ip,$port) or die('Sock ERROR');
$pck=pack("vCi",6,0,-3);
fwrite($fs,$pck);
единственное понятно, что открывается сокет и записываеться параметр $pck.
Опять же напрашивается вопрос что это =) - "vCi",6,0,-3.
И есть ли такая же функция в дельфях? Если нет то как можно такое реализовать?
v - unsigned short (always 16 bit, little endian byte order)
C - unsigned char
i - signed integer (machine dependent size and byte order)
6,0,-3. - так и не разобрался...
Отправлен: 22.11.2007, 07:33
Вопрос задал: Gavrila (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 14)
Отвечает: sir henry
Здравствуйте, Gavrila! Эта функция преобразует передаваемые ей данные в строку, формат которой задаётся первым по счёту аргументом. Следовательно, 6,0,-3 - это те данные, которые нужно перевести в строку. Получается, что через сокет передаётся строка. :) Прямого аналога такой функции в Delphi нет или, по крайней мере, я такой вспомнить не могу, но можно в цикле передавать числовые параметры функции Format(), которая уже будет формировать строку символов. Что-то типа: Const
n = 2; arr : array[0..n] of Integer = (6, 0, -3); Var i: integer; s: string; Begin For i:=0 To n Do s:=s+Format('&d', [arr[i]]); End;
Здесь формируется строка из подстрок, в которые преобразуются из второго аргумента функции по формату, передаемый в первом аргументе. В данном случае "%d" - это знаковое целое. Формат выбран исходя из типа написанных Вами данных (6,0,-3). Если что, спрашивайте в мини-фо
руме...
Ответ отправил: sir henry (статус: Академик) Россия, Красноярск ---- Ответ отправлен: 22.11.2007, 08:26 Оценка за ответ: 5 Комментарий оценки: даже прикопаться не к чему=)
Вопрос № 110.515
Доброго времени суток. Есть процедура (в приложении qqq), у которой в параметрах передается переменная типа record. Теперь хочется ее запихнуть в dll. Подскажите,пожалуста, как это сделать.
P.S.:расказывать как делать dll с подпрограммами у которых параметры "простых" типов не надо.
Приложение:
Отправлен: 22.11.2007, 11:38
Вопрос задал: Vezdenos (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Маренич Владимир
Здравствуйте, Vezdenos!
Замечание:
Если Вы используете тип string между EXE и DLL, то Вам нужно подключать модуль ShareMem (первым в USES и в EXE и в DLL), и таскать за EXE-шником borlndmm.dll
Чтобы этого избежать нужно пользоваться ТОЛЬКО shortstring или PChar (PAnsiChar). В последнем случае Вам необходимо самому отслеживать выделение и освобождение памяти под соотв. данные.
Относительно вопроса:
Если Вы объявите этот тип в DLL и в EXE, то никаких проблем. Объявление процедуры в DLL и описание в EXE будут такими же.
Можно использовать указатели на запись, хотя это практически то же, что и объявление var ..., так как фактически и в том и в другом случае будет передаваться указатель на содержимое переменной.
Если возникнут вопросы/трудности - пишите в мини-форум.
(см. приложение)
Приложение:
Ответ отправил: Маренич Владимир (статус: Студент)
Ответ отправлен: 22.11.2007, 12:06 Оценка за ответ: 5 Комментарий оценки: 1 часть: Угу.
2 часть: Спасибо.Ожидал чегото страшного, а попробывать вот так - напрямик, даже не догадывался.
Вопрос № 110.588
Здравствуйте, уважаемые эксперты! Не могу понять, что за ошибки:
1. GetDriveType(PChar(drive)), выдает - Invalid typecast. где drive: shortstring ну а GetDriveType(@(drive)[1]) - работает нормально, в чем проблема?
2. Пишу программу, которая реагирует обрабатывает сообщение WM_DEVICECHANGE необходимо что бы программа опознавала мою флешку. Так вот букву появившейся флешки определяет правильно ('H:' - такая форма необходима для GetDriveType, по крайней мере так гласит MSDN), но ранее упомянутая функция возвращает DRIVE_NO_ROOT_DIR, но как может быть no_root_dir, если путь реально существует?. Заранее спасибо за ответы.
PS: IDE - Delphi 7
Отправлен: 22.11.2007, 20:38
Вопрос задал: Beginner (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 2)
Отвечает: PavelGM
Здравствуйте, Beginner!
1. См. совет sir_henry в мини-форуме
2. Опять же одно из отличий shortstring от string - отсутствие завершающего
Ответ отправил: PavelGM (статус: Студент)
Ответ отправлен: 23.11.2007, 10:30 Оценка за ответ: 5 Комментарий оценки: Спасибо, понял. Но в таком случае нужно использовать не string, а AnsiString. String компилятором понимается как AnsiString, если в Project Options|Compiler установлен параметр Huge strings, или ShortString, если опция сброшена.