как узнать к-во пользователей моей программы
, как узнать к-во пользователей моей программы
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.223] |
|
|
Соблюдайте общие правила форума
MSDN Library
FAQ раздела
Поиск по разделу
Как правильно задавать вопросы
как узнать к-во пользователей моей программы
, как узнать к-во пользователей моей программы
|
Сообщ.
#1
,
|
|
|
|
Здравствуйте!
Интересует оптимальный способ, как узнать к-во пользователей использующих мою сетевую программу. При этом желательно не задействовать почту, а просто вероятно записывать данные в лог файл на сайте. |
|
Сообщ.
#2
,
|
|
|
|
...сеть локальная или Интернет? И там и там можно просто вызывать пых-пых скрипт на удаленном хосте (винсокетами или инди - idHTTP или из синапс класс httpsend), сам скрипт пусть пишет в файл.
Cкрипт my.php (вызов и запись в параметр http://host/my.php?id=чегонибудь): ![]() ![]() <? $d = date('d M Y H:i:s'); $nf=date('m-Y'); if (is_file($nf.'.txt')) $fp=@fopen($nf.'.txt',"a"); else $fp=fopen($nf.'.txt','w'); fputs($fp,"$d#$id\r\n"); @fclose($fp); ?> в локалке поднимаем аппач для пыха. Или пишем по FTP, аналогично в локалке поднимаем сервак. Или в сетевую шару. |
|
Сообщ.
#3
,
|
|
|
|
С скриптами не сталкивался, сайт на хтмл. Сеть интернет, пользователь запускает программу, а она уже этот php? Используется компонент инди для запуска этого пшп, а он уже будет делать запись в лог на сайте?
|
|
Сообщ.
#4
,
|
|
|
|
...раз на хосте нет PHP, то только писать в файл по FTP, сначала скачивать, записать, потом отослать. idFTP например или синапсом. Скриптов никаких не надо в этом случае.
зы: это ваша та же тема на кибере? |
|
Сообщ.
#5
,
|
|
|
|
на хостинге есть php и тема моя есть на винграде больше нигде.
|
|
Сообщ.
#6
,
|
|
|
|
Альтернативный вариант
А что если раздавать индивидуальный ключ к конкретной машине, как многие делают и отслеживают кол-во лицензий равное кол-ву компьютеров. Типа программа запускается на компьютере генерирует ключ по матери, процессору, свободному месту или чему либо еще программа или сам пользователь отправляет HWID вам и вы генерируете на его основе ключ |
|
Сообщ.
#7
,
|
|
|
|
Можно обойтись и без компонентов, обычными средствами WinInet.
Но надо иметь в виду, что статистика будет с погрешностью: кто-то закроет доступ на фаерволле, например. |
|
Сообщ.
#8
,
|
|
|
|
...синапс, к примеру не компоненты, а просто набор классов, обертка.
Цитата тогда вам дан готовый код, просто вызывайте этот скрипт и передавайте в него то, что вам вздумается.на хостинге есть php Цитата значит у вас есть собрат по "счастью" с тем же вопросом тема моя есть на винграде больше нигде. |
|
Сообщ.
#9
,
|
|
|
|
Сделал по примеру в интернете файл ини с папки программы, но всё дело, что он стандартный у всех. Оптимально, если будет ип - адрес пользователя и он бы добавлялся в файл на хостинге. Пример
![]() ![]() .. uploadfile.php, 430 b <?php $uploaddir = "tmp"; // Where you want the files to upload to - Important: Make sure this folders permissions (CHMOD) is 0777! if(is_uploaded_file($_FILES['ffile']['tmp_name'])) { move_uploaded_file($_FILES['ffile']['tmp_name'],$uploaddir.'/'.$_FILES['ffile']['name']); print "Your file has been uploaded successfully! Yay!"; } else { print "Your file has not been uploaded!!";} ?> procedure TForm2.send1Click(Sender: TObject); //procedure TForm1.sendFileInet(filename: string); var response: string; formData: TIdMultipartFormDataStream; idhttp1: TIdHTTP; begin idhttp1 := TIdHTTP.Create(nil); formData := TIdMultipartFormDataStream.Create; formData.AddFile('ffile', 'хххх.ini', 'text/plain'); // ffile mst be in php-file IdHTTP1.Request.ContentType := 'multipart/form-data'; try response := IdHTTP1.Post('http://ХХХХ/uploadfile.php', formData); finally IdHTTP1.Free; formData.Free; end; дальше я попробовал ещё embeddedwb сделал его невидимым и чтобы он открывал сайт скрытно для прльзователя на хостинге, покажет кто заходил и ип - адрес в том числе, но к сожалению почему то пишет, как мозила. Хотя в user agent я выставил имя своей программы. Пример ![]() ![]() EmbeddedWB3.Navigate(' http://narod.ru/ip'); изменил запрос немного создал пустой файл ip в дире и сылку в проге как кто запустит программу то соответсвенно и этот файл. Вот сейчас на хостинге посмотрел видно работает, файл пустой и на странице его нет, поэтому открываться он может скорее всего за счёт запуска программы. Но всё равно готового решения, что- то нет в интернете, а оптимально конечно лог файл на хостинге куда записывался бы ип-адрес путём добавления в лог файл. |
|
Сообщ.
#10
,
|
|
|
|
Цитата пост #2.а оптимально конечно лог файл на хостинге куда записывался бы ип-адрес путём добавления в лог файл. Цитата ваша версия Delphi? Нет встроенной Indy? я попробовал ещё embeddedwb |
|
Сообщ.
#11
,
|
|
|
|
Цитата
я попробовал ещё embeddedwb ваша версия Delphi? Нет встроенной Indy? Нет это расширенная версия webbrowser встроенного в дельфи. |
|
Сообщ.
#12
,
|
|
|
|
Я в курсе, что такое embeddedwb
. Что до webbrowser, это вообще ActiveX IE. Вы на вопрос-то ответите, версия Delphi? Откуда-то же у вас появилось желание костыли взять. |
|
Сообщ.
#13
,
|
|
|
|
rad studio xe
|
|
Сообщ.
#14
,
|
|
|
|
...Indy там есть. Чем не устроил метод GET у idHTTP?
|
|
Сообщ.
#15
,
|
|
|
|
скрипт 2 поста у меня не работает cmod разные ставил не помогает.
в 9 посте я написал, что использовал idhtt. правда там метод post. давно где находил хороший пример программно нажать кнопку, а сейчас что то всё не то то клавиатура то рецепт не подходит. |
|
Сообщ.
#16
,
|
|
|
|
...не припомню, чтобы на народе пых-пых поддерживался. Или юкоз включил?
Цитата TIdMultipartFormDataStream там и даром не впал для скрипта. Привел же вам готовый пример вызова скрипта и передачи параметра во втором посту "http://host/my.php?id=чегонибудь". Что до аттрибутов, 644. 9 посте я написал, что использовал idhtt. |
|
Сообщ.
#17
,
|
|
|
|
![]() ![]() procedure TForm2.s1Click(Sender: TObject); begin idHTTP1.Get('http://i-.16mb.com//script.php?recieve=' +(IEAddress1.text)+':'+(IEAddress2.text)); end; записывает в лог файл с помощью скрипта ![]() ![]() <?php $recieve = $_GET['recieve']; $file = fopen("logs.txt", "a+"); fwrite($file, "$recieve\r\n"); fclose($file); ?> всё работает но мне то надо што бы гарантировано был ип-адрес в программе проверка ип ![]() ![]() var HostN,HostIP,Err : string; begin if EmbeddedWB1.GetIPAndHostName(HostN, HostIP, Err) then MessageDlg('PC Host Name: '+HostN + #10+#13+'Your Internal IP: ' + HostIP, mtInformation, [mbOk], 0) else MessageDlg(Err, mtError, [mbOk], 0); определение ип-адреса никак не могу подставить в строку ![]() ![]() idHTTP1.Get('http://i-.16mb.com//script.php?recieve=' |
|
Сообщ.
#18
,
|
|
|
|
проверку ип по другому сделал
![]() ![]() procedure TForm2.Button2Click(Sender: TObject); type TaPInAddr = Array[0..10] of PInAddr; PaPInAddr = ^TaPInAddr; var phe: PHostEnt; pptr: PaPInAddr; Buffer: Array[0..63] of ansiChar; I: Integer; GInitData: TWSAData; begin WSAStartup($101, GInitData); GetHostName(Buffer, SizeOf(Buffer)); phe := GetHostByName(buffer); if phe = nil then Exit; pPtr := PaPInAddr(phe^.h_addr_list); I := 0; while pPtr^[I] <> nil do begin TEdit(FindComponent('Edit'+IntToStr(i+1))).Text:=inet_ntoa(pptr^[I]^); Inc(I); end; WSACleanup; end; код с книжки Флёнова, в код пересылки на сервер легко встал ![]() ![]() type TaPInAddr = Array[0..10] of PInAddr; PaPInAddr = ^TaPInAddr; var phe: PHostEnt; pptr: PaPInAddr; Buffer: Array[0..63] of ansiChar; I: Integer; GInitData: TWSAData; begin idHTTP1.Get('http://i.16mb.com//script.php?recieve=' +(Edit1.Text)+':'+(edit2.Text)+':'+(edit3.Text)); //idHTTP1.Get('http: end; ![]() ![]() procedure TForm2.Timer2Timer(Sender: TObject); begin button2.click; end; как выяснилось с таймером удобней всего отрегулировал их по последовательности да и код одна строка в отличие от других. Но, что- то всё, как топорно не изяшно, громозко. Может кто то предложит более рационально передачу ип-адреса на сервер без всех этих наворотов с скрытыми кнопками и едитами. |
|
Сообщ.
#19
,
|
|
|
|
1- вторые два слеша лишние, вы в браузере так же набираете?
Не надо самодеятельности, когда дан готовый вызов.2- вам никто не мешает определение IP вынести в отдельную функцию, возвращающую текст. |