![]() |
![]() |
![]() |
|
Компонента SendToLocalHost. Определение IP адреса терминальной рабочей станции. | ☑ | ||
---|---|---|---|---|
0
vudo
08.05.10
✎
08:47
|
Написал компоненту для определения IP адреса терминальной рабочей станции и отправки строки на определенный IP адрес и определенный порт.
Проверено. Работает уже полтора года. Пользуйтесь. Все вопросы можете задавать в этой теме. Ссылка http://sites.google.com/site/sendtolocalhost/ |
|||
1
Ковычки
08.05.10
✎
20:43
|
малодец, пеши исчо
|
|||
2
vudo
10.05.10
✎
09:43
|
Кто-то пробовал?
|
|||
3
Гость из Мариуполя
гуру
10.05.10
✎
11:34
|
(2) не, брат, как-то не до того. 9-го Мая вряд ли кто-то что-то пробовать будет (окромя шашлычков) :)
тема, может, и хорошая, вот выложил ты ее в праздники/выходные не вовремя. ИМХО. |
|||
4
turtler
10.05.10
✎
15:25
|
да, компонента дельная, но под виндовс
в описании везде фигурируют тонкие клиенты... а что если её под линукс переписать? это как раз в концепцию линукс-тонкихтерминалов-серверов укладывается или я не прав? |
|||
5
vudo
10.05.10
✎
22:41
|
(4) Если я не ошибаюсь в Линуксе нет большой проблемы с определением IP адреса тонкого клиента также как и нет проблемы с отправкой данных на определенный порт (система открытая) из этих соображений и смысла писать под Линукс нет.
Если же речь идет о Windows-приложениях работающих в Линуксе, например под Wine да еще и терминале, то надо подумать... На первый взгляд - невозможно. Если кому-то это нужно отпишитесь - обсудим, может что и получится. |
|||
6
Холст
10.05.10
✎
22:46
|
дискриминация платформы 7.7 )
если работает, приведите пример для 7.7 |
|||
7
vudo
10.05.10
✎
22:53
|
Честно, на семерке не пробовал, даже не подумал... Сори... Сейчас проверю отпишусь...
|
|||
8
Холст
10.05.10
✎
23:01
|
(7) заранее спасибо
|
|||
9
IamAlexy
10.05.10
✎
23:02
|
а зачем она ?
|
|||
10
Злопчинский
10.05.10
✎
23:04
|
(9) типа дл яобратной связи с рабочей станцией в терминальном режиме...
|
|||
11
vudo
10.05.10
✎
23:06
|
//Для 7.7 вот так и работает (проверил):
ComObject = СоздатьОбъект("SendToLocalHost.SendToLocalHost"); // дальше как и для 8-мки Полностью проверить для 7.7 сейчас нет возможности, но IP адрес возвращает. Если есть возможность проверьте и подтвердите. |
|||
12
vudo
10.05.10
✎
23:12
|
(9) по ссылке в (1) подробно описал для чего применялась. Может еще для чего получится - буду только рад ;-).
И еще (6) это полноценный Com-объект зарегистрированный в системе, поэтому вызывать можно не только из 1С (и 77 и 8), проверял вызов через VB-script - тоже работает. |
|||
13
Skom
11.05.10
✎
05:46
|
как ее зарегать???
|
|||
14
Skom
11.05.10
✎
05:46
|
что то у меня регасм ругается
|
|||
15
dk
11.05.10
✎
05:58
|
щас придет абрахамс и всю компоненту зменит 1-й строкой WMI запроса, хотя ...
|
|||
16
Skom
11.05.10
✎
06:00
|
(15)
кстати да ну по крайней мере как доменное имя компа определить он показывал...ну с какого коннект был |
|||
17
Skom
11.05.10
✎
06:03
|
objNet = СоздатьОбъект("WScript.NetWork");
ИмяКлиентскогоСервера = objNet.ComputerName; ИмяПользователяWindows = objNet.UserName; вот как то так |
|||
18
Кириллка
11.05.10
✎
06:38
|
(0)а если у ТС-сервера несколько IP-адресов?
|
|||
19
vudo
11.05.10
✎
07:52
|
(17) По-моему вернет имя сервера а не тонкого клиента.
(15) Может я искал и плохо, но ничего не нашел из-за чего и весь сыр-бор. По этому кто знает другие способы для 1С отпишитесь. (18) Должно возвращать IP-адрес тонкого клиента, а не сервера. Если у тонкого клиента несколько IP - вернет тот через который подключались к серверу. |
|||
20
vudo
11.05.10
✎
07:53
|
(13) Что не получается? Как ругается?
|
|||
21
dk
11.05.10
✎
08:11
|
Set shell = WScript.CreateObject("WScript.Shell")
msgbox shell.ExpandEnvironmentStrings("%CLIENTNAME%") |
|||
22
vde69
11.05.10
✎
08:21
|
вот такой простой бат файл
@echo * @echo * @echo Server: @set COMPUTERNAME @echo * @echo Client: @set CLIENTNAME @echo * @echo * @Pause |
|||
23
Skom
11.05.10
✎
08:25
|
а я + к(17) не дописал...как раз то что в (21)
|
|||
24
dk
11.05.10
✎
08:35
|
(0) Remoute Desktop поправь на страничке
|
|||
25
smaharbA
11.05.10
✎
09:02
|
(15) не одна конечно строка, и не вми, но уже давненько существует
|
|||
26
vudo
11.05.10
✎
09:30
|
Я не говорил что не возможно - сказал что не знаю (не знание к грехам не относится? ;-)). Выкручивался как мог - вот и получилось. И по-моему, не грубое решение...
(21)dk - а это точно и для терминального режима сработает (сейчас попробовать не могу, а уж очень интересно...) (25) - там еще можно на IP + порт строку посылать... |
|||
27
dk
11.05.10
✎
09:33
|
(26) работает, проверял
|
|||
28
smaharbA
11.05.10
✎
09:34
|
(27) не всегда в (21) вернет верный результат, имя клиента не связано с именем компа, хотя обычно и тождественно
|
|||
29
vudo
11.05.10
✎
09:47
|
(27)(28) Ну что-ж век живи-век учись... Если бы знал не заморачивался... Там еще надо по имени компьютера IP-адрес определить и будет полный аналог метода GetIPLocalHost() компоненты. Но у меня в запасе есть еще отправка строки из 1С на порт;-).
|
|||
30
vudo
15.05.10
✎
08:22
|
Готов подводить итоги.
Интерес к решаемой компонентой проблеме есть! С дня когда была выложена компонента получилась такая статистика переходов: Источники Посещения % посещений infostart.ru (referral) 211 60,63 % (direct) ((none)) 76 21,84 % forum.mista.ru (referral) 47 13,51 % sites.google.com (referral) 10 2,87 % google.ru (referral) 4 1,15 % ВСЕГО 348 посещений Сейчас идет уже 3-4 посещения в день, думаю больше не поднимется. Отрицательных отзывов не было. Спасибо всем за проявленный интерес. Надеюсь кому-то помогло. Пользуйтесь на здоровье! |
|||
31
Torquader
15.05.10
✎
17:52
|
Кстати, для настоящих "тонких" клиентов (типа NComputing) - это вообще проблема, так как сама система не всегда знает, с какой станции зашли.
Но там, правда, на самого клиента ничего передавать и не надо. А если стандартный RDesktop "гоняется", то там можно или переменные среды смотреть или запросить у самого сервера, только проблема бывает, если сервер через Proxy подключен, так как знания IP-адреса недостаточно, чтобы клиенту отослать ответ. P.S. а знать IP-адрес полезно, если все принтеры сетевые, и привязывать печать на определённом принтере к адресу клиента (но из-за "сверхтонких" пришлось эту задачу решать через привязку к имени пользователя, так как "сверхтонкие" не умеют работать через Terminal Server IP, а работают через свой драйвер. |
|||
32
vudo
15.05.10
✎
18:57
|
(31) Повторюсь: решение на сайте - работоспособное проверенное на протяжении уже более 1.5 лет.(принцип - сделали и забыли) Делайте как сделали мы проблем, с очень большой вероятностью не будет! (как сделали тоже там)...
Насчет прокси - если четко сформулируешь задачу (главное тех. условия), то можно попробовать сделать. Боюсь только что прийдется писать ПО и для клиента (без сокетов вряд ли получится). |
|||
33
Torquader
16.05.10
✎
01:09
|
(32) У меня сейчас немного другая задача - выяснили пользователи, что можно подключаться к своему забытому сеансу с другого компьютера.
Теперь они хотят возможность посылать другому ссылку на сеанс, то есть в процессе обработки документов (а там не только 1С, но и много чего другого) просто передавать "рабочий стол" по цепочке. Вот и думаю, стоит ли реализовывать сию бредовую идею. |
|||
34
vudo
16.05.10
✎
01:32
|
(33) "Передавать" значит знакомить с паролем, собственно больше и реализовывать нечего. Сказал другому имя пользователя и пароль, тот зашел - вот и "передал".
Только я заметил, что бывает плохо локальные ресурсы при "переподключении" на разные компьютеры, раз от разу принтеры печатать переставали, то нормально то не работает... Но главное нарушаются основные принципы администрирования:"Один человек - один пользователь" и "Пользователи знают только свой пароль". |
|||
35
Torquader
16.05.10
✎
10:28
|
(34) С локальными ресурсами у меня проблем нет (как и самих ресурсов) в политике безопасности запрещено всё.
А принтеры монтируются как сетевые, проблема только в том, что на другом рабочем месте уже другой принтер, но это уже решено. Пароли пользователи вообще не знают, так как им сеансы "выделяет" демон, который и отслеживает пароли сеансов, а пользователю нужно знать пароль, чтобы "договориться" с демоном. Человек - лицо физическое, и проверять его право нужно только при входе в систему, а рабочие столы - виртуальные, то есть один и тот же человек может выполнять различные функции - соответственно, различные рабочие места, а когда "пересесть" можно нажатием одной кнопки - это удобно. А другим способом реализовать динамическое отслеживание прав очень сложно, так как доступ к документам должен быть у реального пользователя только в тот момент, когда он выполняет какую-то определённую роль. |
|||
36
vudo
16.05.10
✎
11:54
|
(35) Ну и наворотили;-) Молодца!
А что значит "пересесть" можно нажатием одной кнопки - поделись технически это как? |
|||
37
Torquader
17.05.10
✎
00:05
|
(36) Технически сейчас это так - нажимаем клавишу, например, Пуск+Ё и вылетает список доступных сеансов. Или Пуск+Цифра - сеанс по номеру.
Текущий сеанс "срубается", если активен (то есть выполняется отключение), и подключается новый, который нужен. Гемор в том, что кнопки надо ловить и на локальной машине и на сервере (так как "отобрать" клавиши у Remote Desktop Client оказалось очень сложно). А вообще - глюкодром ещё тот - теперь есть "бредовая идея", что сервер будет не один, но это мне уже друг поможет - чтобы Windows сервера живи в виртуальной среде, а на серверах был Linux (чтобы процессы с одного на другой мигрировали). P.S. половина "костылей" для "сращивания" писалась на Borland Си (причём без плюсов, так как быстрее работает) и второй раз наладить будет очень сложно. |
|||
38
Юджин58
22.05.10
✎
12:23
|
(0) Большое СПАСИБО автору! В 1с77 все работают в терминале на server2003. Надо было запретить работу некоторых пользователей c внешнего IP. Оказалось узнать IP подключения в терминал большая проблема. Компонента SendToLocalHost заработала.
|
|||
39
mojed
22.05.10
✎
13:13
|
(0)
а FreeRadmin от Вас когда ожидать ? |
|||
40
vudo
23.05.10
✎
20:06
|
(38)Спасибо за столь высокую оценку моих скромных усилий ;-) Правда приятно.
(39)FreeRadmin только после компилятора 1С ;-))) Компонент позволяющий использовать .NET в 1С |
|||
41
Ковычки
23.05.10
✎
20:45
|
(38) если не знать что проблема, то все просто
|
|||
42
Ковычки
23.05.10
✎
20:49
|
весь код
|
|||
43
Ковычки
23.05.10
✎
20:49
|
разбирайтесь сами
|
|||
44
Ковычки
23.05.10
✎
20:53
|
к слову в (35) и (37) абсолютное заблуждение - в лучшем случае
|
|||
45
vudo
23.05.10
✎
21:10
|
(42)(43) весь код
Перем МойIP; ComObject = Новый COMОбъект("SendToLocalHost.SendToLocalHost"); МойIP = ComObject.GetIPLocalHost(); и разбираться нечего... ;-) |
|||
46
Torquader
23.05.10
✎
21:15
|
К сожалению, на тонком клиенте Xtenda это не работает, так как сервер не может понять, кто и откуда к нему подключился - приходится "допрашивать" сервер тонких клиентов, а он даёт не IP, а имя рабочей станции, так как IP ему не важен.
(44) А как ещё можно совместить работу с тонкими клиентами и несколько интерфейсов. Тем более, что работают с системой "полные бараны", которые только что и умеют - это мышкой по иконкам тыкать. |
|||
47
Ковычки
23.05.10
✎
21:17
|
(45) а если внимательно ?
|
|||
48
Torquader
23.05.10
✎
21:21
|
Кстати, интересный вопрос, а что происходит, когда мы сеанс "передаём" на другого клиента - получается новый IP или старый ?
|
|||
49
vudo
23.05.10
✎
21:22
|
(47)ТССИнфо=СоздатьОбъект("TSSInfo.TSSInfo");
Сообщить("Ваш адрес - "+ТССИнфо.GetClientInfo()); Об этом? Так по эффективности тоже... А дальше у меня отправка строки на порт и IP. |
|||
50
vudo
23.05.10
✎
21:29
|
(48) IP на момент вызова GetIPLocalHost()- ибо работает с API функцией WTSQuerySessionInformation. Так что для (42)(38) есть еще много разных путей... Но написан в результате SendToLocalHost и мне он нравится. Кто не хочет может не пользоватся.;-)
|
|||
51
Torquader
23.05.10
✎
22:09
|
(50) Тогда понятно, почему "сверхтонкие" такие "неудачные" - они отказались WTSApi поддерживать (точнее там есть возможность включить поддержку, но после этого можно только бежать к серверу и давить RESET).
|
|||
52
sezhik
23.05.10
✎
22:48
|
(48) Я смотрел в описании есть работа с ТО. А как данные от него забиратся? Например от ФР?
|
|||
53
vudo
23.05.10
✎
23:47
|
(52) В 8-ке есть типовая обработка подключения торгового оборудования - сервер ТО, так вот задача в том чтобы подключать, только то ТО, которое подключено к рабочему месту пользователя, если он подключается в терминале.
И только для этого (просто хитрость!). Дальше все работает как обычно. Это не поддержка ТО - а только возможность корректного подключения в терминальном подключении. А для этого надо подкорректировать типовой сервер ТО и само собой сами обработки подключения, но немного.(кому надо могу подсказать - несколько строк, хотя догадаться не сложно)... |
|||
54
sezhik
23.05.10
✎
23:55
|
(53) да но для этого данные должны обмениватся по TCP. Или я ошибаюсь.
|
|||
55
vudo
23.05.10
✎
23:59
|
(51)Я все никак не могу понять что у тебя за проблема? Что не работает и что ложится и что значит "сверхтонкие". Сформулируй в каких условиях у тебя не работает?
Я не могу понять почему у тебя не работает. API функции это функции сервера, а не клиента соответственно и компонента регистрируется на сервере, а не на клиенте. И обращение к ней идет на сервере, просто выдает параметры текущего клиентского подключения. У меня на бездисковых рабочих станциях под управлением Linux IP-адреса возвращает. Что не так, повторюсь, не могу понять?.. |
|||
56
vudo
24.05.10
✎
00:07
|
(54) Решается задача только подключения оборудования. И все!
При чем только решаем(в зависимости от IP), какое оборудование подключать, а какое не надо. Дальше работает типовые обработки и типовые функции. Просто добавляем функционал для возможности подключения в ТЕРМИНАЛЬНОМ РЕЖИМЕ! Для обычного подключения она не нужна. Если скажешь что у тебя с фискальным регистратором не получается - может что подскажу. Славо богу уже ОГО-ГООООО сколько;-) - правда украинские, ну да ладно... |
|||
57
sezhik
24.05.10
✎
00:12
|
(56) У меня другая проблема вот в этой ветке описана. v8: У кого есть реально рабочий пример работы с Winsock? Либо других компонент для TCP.
Нужно подключить ЭККА(украинский кстати0 через GPRS модем, непосредственно через TCP. А я не могу компоненту подобрать чтоб работала и данные нормально передавала и принимала. У меня там много служебных байт в посылке. |
|||
58
vudo
24.05.10
✎
00:32
|
У меня есть мои исходники (тренировался технологии) Prpoxy-сервера, при чем асинхронного написанного на C# c использованием сокетов, могу поделится...Реально рабочий да еще и ассинхронный ;-).Может что вытянешь. Куда кинуть? На ICQ напиши если надо.
Но может проще: Какой аппарат? Как подключать Of-line, фискальный регистратор или режим подкачки? |
|||
59
sezhik
24.05.10
✎
00:39
|
(58) sezhik@gmail.com
Аппарат Экселлио 55B Но не в аппарате проблемма. Аппарат ведет обмен с GPRS модемом по своему протоколу и последний сохраняет у себя электроный журнал. Вот его и надо вытянуть. Запрос не сложный, но транспорт подкачивает :). |
|||
60
sezhik
24.05.10
✎
00:41
|
Минус еще в том что сам модем не имеет статического IP. А сам устанавливает соед с сервером. И вот при установке этого соед. надо его опросить и вытянуть если есть информацию.
|
|||
61
vudo
24.05.10
✎
00:48
|
(60) Ты же слушаешь порт, и как подключился модем тянешь данные, при подключении получаешь IP. Что не так? В (57) много чего... Суть?
|
|||
62
sezhik
24.05.10
✎
00:54
|
(61) Да все правильно, только вот ВК уже несколько дней не могу заставить работать как надо. Каждая с каким то прибабахами. Через Winsock невозможно отловить данные о подключении, одни данные обрезают или добавляют служебные, через другие послать данные через переменную не получается. Вот такая суть.
|
|||
63
vudo
24.05.10
✎
00:59
|
А производители ЭККА свое ПО не выдают? Может глупый вопрос... Мы просто проблемы с ИКС красиво-дешево-сердито так решаем ;-) пишем только подвязку данных к 1С через готовые локальные СУБД, а данные по модемам их ПО собирает...
|
|||
64
vudo
24.05.10
✎
01:02
|
(62) Я не понял - модем журнал ведет? Ни чего не перепутал?
|
|||
65
sezhik
24.05.10
✎
01:07
|
(63) Есть но она платная и еще сырая. И платить за нее не хочется. Если ничего не получится выбора не останется.
(64) Да это спецаильно разработаный модем с прошивкой, он может и сквозным работать, но с памятью лучше ибо после Z электронный журнал кассы обнуляется. |
|||
66
vudo
24.05.10
✎
01:21
|
(65)Пипе... Какких извращений мозк человеческий не придумает;-(((
Платная компонента = ВремяУжеПтраченное*(v8: Требуется, программист Киев 1С v.8 + 70% = "И платить за нее не хочется." С Датексами проходили - сели с их программистом (интернет + телефон)после оплаты (за счет клиента),звонка руководству, и за 3 дня + 70% и все вопросы решили. Я так подозреваю - это единственно правильный путь(модем ведь "специально" разработанный). |
|||
67
sezhik
24.05.10
✎
01:32
|
(66) не совсем понял что значит +70%
|
|||
68
vudo
24.05.10
✎
01:40
|
(67)Перед этим 3 недели на написания обработки подключения 1С-типовой.3 дня с программистом на исправление ошибок ВК. И после запуска еще проекта еще 2,5 дня в общей сложности ошибки догоняли что повылазило(правда был режим подкачки). За то потом 2 года никто не трогает...
Хотя, за что деньги брать? - Но работы и так много. |
|||
69
sezhik
24.05.10
✎
01:43
|
(68) Программистом кто был Афанасьев?
|
|||
70
vudo
24.05.10
✎
01:43
|
(58)Могу выслать(не жалко), просто уверен - что бесполезно! ICQ в профайле.
|
|||
71
vudo
24.05.10
✎
01:45
|
(69)Семенюк. И респект ему полный!
|
|||
72
sezhik
24.05.10
✎
01:49
|
(70) выслать что именно?
|
|||
73
vudo
24.05.10
✎
01:52
|
(72)Примеры работы с сокетами(исходники) на C# см(58).
|
|||
74
sezhik
24.05.10
✎
02:01
|
(73) не мне к сожаленью не помогут. :) или к счастью!
|
|||
75
vudo
24.05.10
✎
02:04
|
К счастью!
Обратитесь к производителю - самый дешевый путь. Удачи! |
|||
76
smaharbA
24.05.10
✎
05:53
|
(49) о том, что все украдено до вас ))
|
|||
77
vudo
24.05.10
✎
06:21
|
(76)Быть чемпионом - не мой стиль. По этому на первенство не претендую ))))
|
|||
78
Юджин58
28.05.10
✎
13:07
|
(0) Жалко компонента возвращает локальный, а не внешний IP компа. Если терминальная рабочая станция стоит в другой локалке с похожими IP (192.168.0.x), сразу и не поймёшь, что подключение к серверу терминалов из вне.
|
|||
79
vudo
29.05.10
✎
17:47
|
(78) Задача изначально была отправить данные на порт клиентской машины. По-этому и возвращается тот адрес клиентской машины, который "видится" со стороны сервера...
|
|||
80
smaharbA
29.05.10
✎
18:08
|
(79) имея mswinsck.ocx можно слать из адинес
|
|||
81
Torquader
29.05.10
✎
20:03
|
(80) Если писать клиента, то используя WinSock это просто.
Если сервер, то он получает ID подключения в событии и приходится писать прослойку, чтобы это событие отлавливать. Но, в любом случае - Visual Basic и Windows Scripting Host решают любые проблемы - на них даже можно некоторое подобие Active X сервера написать. (55) Была задача - определять с какого рабочего места подключился клиент, чтобы использовать ближайший к нему принтер (так как принтер реально подключен к другой машине). Но выяснилось, что "сверхтонкие" клиенты не позволяют стандартными средствами определить с какого места произошло подключение, так как по всем данным системы пользователь работает локально (так как сервер "сверхтонких" свой). В общем, в сверхтонкого прописали имя пользователя для подключения и через это имя всё и определяется, а на досуге буду читать описание их "интерфейсов". Проблема оказалась в другом - в 1С всё работает, а вот для Open Office принтер настроить не получилось (все подключения устанавливает программа-стартер, которая запускает 1С - на Си никаких проблем нет - можно вызывать WinApi). Придётся выносить часть стартера в сценарий подключения пользователя (но тогда при обрыве связи им придётся выходить, а сейчас только 1С перезапускают). |
|||
82
vudo
29.05.10
✎
23:53
|
(80)Что же никак покоя не даю! :-( Путей решения правда масса - сейчас даже не спорю.
На момент написания решил что так проще, уже было в (26)(29)(76)! И сейчас этим решением вполне доволен(принтеры, торговое оборудование и т.д.) - по этому и другим рекомендую(0)! А то что это решение не так очевидно, подтверждается просмотрами сайта (только 69,73% новые посещения, остальные возвращаются). |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |