Народ, кто шарит в клиент-сервер приложениях, ХЕЛП!!!
От: Slavyan_K  
Дата: 22.06.04 13:53
Оценка:
Привет всем! Народ выручайте плиз, начальство поставило задачу и сказало в течении недели ее выполнить! Суть задачи вот в чем:
Есть машина в сети под управлением Windows 98, к COM портам этой машины подключены два устройства(терминал весовой "ТВ-003/05Д"), эти терминалы опрашивает некая програмка и пишет полученные данные в базу в формате Paradox, есть в этой проге один глюк она позволяет вес вводить вручную(необходимость ручного ввода веса на предприятии существует, но не тогда когда этого хочется весовщикам!). Вот и попросил меня шеф написать приложенице которое будет сидеть резидентом, перехватывать запросы этой програмулины к терминалам, смотреть вес, отправлять вес на локальную прогу и отправлять его же на клиента где-нибудь в сети(клиент будет стоять у шефа), если клиентом вес не меняется то сервер отдает локальной програмке тот вес который показывает терминал, если клиентом вес изменен, то сервер отсылает правильный вес локальной проге и терминалу(у него такая возможность есть).
Теоретически как это должно работать я представляю, а вот как реализовать захват обращения к COM портам понятия не имею, а еще чтоб это все по сети работало!
Народ выручайте плиз неохота работу себе новую искать!
Re: Народ, кто шарит в клиент-сервер приложениях, ХЕЛП!!!
От: wildwind Россия  
Дата: 22.06.04 16:37
Оценка:
Здравствуйте, Slavyan_K, Вы писали:

Какая однако дебильная постановка! А грозить увольнением это просто свинство небывалое. Как ты еще терпишь такого шефа?
Re: Народ, кто шарит в клиент-сервер приложениях, ХЕЛП!!!
От: Jack128  
Дата: 22.06.04 17:10
Оценка:
Здравствуйте, Slavyan_K, Вы писали:

S_K>Привет всем! Народ выручайте плиз, начальство поставило задачу и сказало в течении недели ее выполнить! Суть задачи вот в чем:

S_K>Есть машина в сети под управлением Windows 98, к COM портам этой машины подключены два устройства(терминал весовой "ТВ-003/05Д"), эти терминалы опрашивает некая програмка и пишет полученные данные в базу в формате Paradox, есть в этой проге один глюк она позволяет вес вводить вручную(необходимость ручного ввода веса на предприятии существует, но не тогда когда этого хочется весовщикам!). Вот и попросил меня шеф написать приложенице которое будет сидеть резидентом, перехватывать запросы этой програмулины к терминалам, смотреть вес, отправлять вес на локальную прогу и отправлять его же на клиента где-нибудь в сети(клиент будет стоять у шефа), если клиентом вес не меняется то сервер отдает локальной програмке тот вес который показывает терминал, если клиентом вес изменен, то сервер отсылает правильный вес локальной проге и терминалу(у него такая возможность есть).
S_K>Теоретически как это должно работать я представляю, а вот как реализовать захват обращения к COM портам понятия не имею, а еще чтоб это все по сети работало!
S_K>Народ выручайте плиз неохота работу себе новую искать!

о том чтобы за неделю написать такую прогу — можешь забыть. Для перехвата и модификации данных отправленных на порт нужно писать драйвер, а для этого нужен DDK. Исходники дравера — перехватчика, говорят есть на http://www.sysinternals.com/ (но точно не знаю..) Еще есть какие то компонентики для тех же нужд, но они стоят денег Названия компонентиков тоже не знаю
Это если программно.Но возможен такой вариант(Тут я начинаю фантазировать, так что если бред — сильно пинайте
Предположим на компе к которым подключен терминал есть 3 ком порта (COM1, к которому подключен терминал и два свободных COM2, COM3), cтавишь перемычки между COM3 и COM2(ноль модем), в той левой программе настраиваешь, что терминал подключен на СOM3, а своей анализируешь трафик с COM2, изменаешь что там те надо и отправляешь на СOM1...
Re[2]: Народ, кто шарит в клиент-сервер приложениях, ХЕЛП!!!
От: AlexEagle Украина http://www.vik.oil
Дата: 22.06.04 18:52
Оценка: +1
Здравствуйте, Jack128, Вы писали:

J>Но возможен такой вариант(Тут я начинаю фантазировать, так что если бред — сильно пинайте

J>Предположим на компе к которым подключен терминал есть 3 ком порта (COM1, к которому подключен терминал и два свободных COM2, COM3), cтавишь перемычки между COM3 и COM2(ноль модем), в той левой программе настраиваешь, что терминал подключен на СOM3, а своей анализируешь трафик с COM2, изменаешь что там те надо и отправляешь на СOM1...

Если этот вариант рабочий то могу подкинуть еще пару злобных мыслей. Я вот например программирую работу с касовым аппаратом через ком-порт. В моем случае каждая команда кассе сопросождается двумя байтами контрольной суммы (чтобы такие как автор, не могли без знания протокола подменять цифры).

Имеем собственно ограничение номер 1

Ограничение номер 2 — это таймауты (как мне кажется самое серьезное). У меня стоит на команду две секунды. Так вот, автор должен за это время успеть отдать данные клиенту, клиент их подтсвердить и потом автор перслать в устройнство и вернуть ответ от него.

проблем туча.

Как вариант предлагаю автору забыть что у него работа идет с ком портом. Далее предлагаю вариант для винды.

Вешаешь хук (не знаю как, не пробовал) на это программку. Отслеживаешь появление окна с изменением того чего не надо. Сразу его прячешь а в замен отдаешь свое. Соответственно ввод идет к тебе, а ты потом отдашь его скрытому окну и нажмешь кнопку "ОК" в этом окне. А вот собственно в момент передачи (момент Х) — делай что угодно, тут не таймаутов, ничего. Чистое мошенничество. вариант хака, так сказать.

по-моему красивый вариант перехвата, реализовать можно достаточно быстро.

Ну а по клиент-серверу тут не сложно. Делаешь сервер на сокетах, а в момент Х отсылай на этот сокет информацию и жди от него ответа. Ну а сервер при приходе запроса (отосланного тобой в момент Х) даст нужному человеку окошко и данными чтобы он подкорректировал и отдасть эти данные тебе тем же сокетом (почти RPC получается ). Ну а ты уже этим данные в спрятанное окошко и нажимай там нужную кнопку

Так сказать, элементарно, Ватсон. Правда неделя работы от заката до рассвета, но решаемо!
Re[2]: Народ, кто шарит в клиент-сервер приложениях, ХЕЛП!!!
От: Slavyan_K  
Дата: 23.06.04 04:43
Оценка:
Здравствуйте, wildwind, Вы писали:

W>Здравствуйте, Slavyan_K, Вы писали:


W>Какая однако дебильная постановка! А грозить увольнением это просто свинство небывалое. Как ты еще терпишь такого шефа?


Да уволить то я думаю они не уволят, но для решения этой проблемы наймут стороннего программиста, а я буду плохо смотрется в глазаг коллектива!
Re[2]: Народ, кто шарит в клиент-сервер приложениях, ХЕЛП!!!
От: Slavyan_K  
Дата: 23.06.04 05:02
Оценка:
Здравствуйте, Jack128, Вы писали:


J>о том чтобы за неделю написать такую прогу — можешь забыть. Для перехвата и модификации данных отправленных на порт нужно писать драйвер, а для этого нужен DDK. Исходники дравера — перехватчика, говорят есть на http://www.sysinternals.com/ (но точно не знаю..) Еще есть какие то компонентики для тех же нужд, но они стоят денег Названия компонентиков тоже не знаю

J>Это если программно.Но возможен такой вариант(Тут я начинаю фантазировать, так что если бред — сильно пинайте
J>Предположим на компе к которым подключен терминал есть 3 ком порта (COM1, к которому подключен терминал и два свободных COM2, COM3), cтавишь перемычки между COM3 и COM2(ноль модем), в той левой программе настраиваешь, что терминал подключен на СOM3, а своей анализируешь трафик с COM2, изменаешь что там те надо и отправляешь на СOM1...

Я вот вчера подумал подумал и вот до чего додумался, а зачем вообще впринципе перехватывать обращения к портам, если можно просто тупо найти ячейку в памяти где программка держит показания терминала(по принципу какой-нибудь ломалки игрушек), снимать сервером данные с весов отсылать по сетке на клиента и если по сети приходит ноль то заносить это значение в адрес памяти откуда его берет сторонняя программа, если приходит не ноль брать то что приходит и заносить туда же.

P.S. Тайминг для локальной программы я могу выставить какой угодно(я вообще могу настроить ее как угодно), сейчас стоит 80 секунд!
Re[3]: Народ, кто шарит в клиент-сервер приложениях, ХЕЛП!!!
От: Slavyan_K  
Дата: 23.06.04 05:54
Оценка:
Здравствуйте, AlexEagle, Вы писали:

AE>Если этот вариант рабочий то могу подкинуть еще пару злобных мыслей. Я вот например программирую работу с касовым аппаратом через ком-порт. В моем случае каждая команда кассе сопросождается двумя байтами контрольной суммы (чтобы такие как автор, не могли без знания протокола подменять цифры).


AE>Имеем собственно ограничение номер 1


AE>Ограничение номер 2 — это таймауты (как мне кажется самое серьезное). У меня стоит на команду две секунды. Так вот, автор должен за это время успеть отдать данные клиенту, клиент их подтсвердить и потом автор перслать в устройнство и вернуть ответ от него.


AE>проблем туча.


AE>Как вариант предлагаю автору забыть что у него работа идет с ком портом. Далее предлагаю вариант для винды.


AE>Вешаешь хук (не знаю как, не пробовал) на это программку. Отслеживаешь появление окна с изменением того чего не надо. Сразу его прячешь а в замен отдаешь свое. Соответственно ввод идет к тебе, а ты потом отдашь его скрытому окну и нажмешь кнопку "ОК" в этом окне. А вот собственно в момент передачи (момент Х) — делай что угодно, тут не таймаутов, ничего. Чистое мошенничество. вариант хака, так сказать.


AE>по-моему красивый вариант перехвата, реализовать можно достаточно быстро.


AE>Ну а по клиент-серверу тут не сложно. Делаешь сервер на сокетах, а в момент Х отсылай на этот сокет информацию и жди от него ответа. Ну а сервер при приходе запроса (отосланного тобой в момент Х) даст нужному человеку окошко и данными чтобы он подкорректировал и отдасть эти данные тебе тем же сокетом (почти RPC получается ). Ну а ты уже этим данные в спрятанное окошко и нажимай там нужную кнопку


AE>Так сказать, элементарно, Ватсон. Правда неделя работы от заката до рассвета, но решаемо!


Народ, чтоб вы не думали что я замыслил что-то криминальное объясняю зачем это нужно: на этих весах взвешиваются большегрузы, ограничения у весов 45 тонн максимальный вес, очень часто этого не достаточно, для этого на самом терминале предусмотрен режим ручного ввода, но им начали злоупотреблять сами весовщики, поэтому шеф приказал кнопочки на терминале закрыть стеклом и запечатать, а если потребуется что-то вводить вручную он это будет делать сам!
Re[4]: Народ, кто шарит в клиент-сервер приложениях, ХЕЛП!!!
От: AlexEagle Украина http://www.vik.oil
Дата: 23.06.04 08:17
Оценка:
Здравствуйте, Slavyan_K, Вы писали:

S_K>Народ, чтоб вы не думали что я замыслил что-то криминальное объясняю зачем это нужно: на этих весах взвешиваются большегрузы, ограничения у весов 45 тонн максимальный вес, очень часто этого не достаточно, для этого на самом терминале предусмотрен режим ручного ввода, но им начали злоупотреблять сами весовщики, поэтому шеф приказал кнопочки на терминале закрыть стеклом и запечатать, а если потребуется что-то вводить вручную он это будет делать сам!


От лица народа заявляю что мне лично пофиг. Я просто сказал что на этот счет думают разработчкики протоколов взаимодействия PC с кассой. То есть то что как раз может и у тебя проявиться. Так сказать предостерег!

А как тебе сам вариант решения проблемы?
Re[4]: Народ, кто шарит в клиент-сервер приложениях, ХЕЛП!!!
От: maximilian Украина  
Дата: 23.06.04 09:27
Оценка:
Здравствуйте, Slavyan_K, Вы писали:

Я бы делал так, как посоветовал AlexEagle.
При таком подходе не придется писать драйвера и, следовательно тратить время на изучение DDK, ставить перемычки на порты и пр.

Повесить хук на создание окна не составляет особых проблем, а тем более, если это можно легко опознать (по постоянному размеру или заголовку).
Re[3]: Народ, кто шарит в клиент-сервер приложениях, ХЕЛП!!!
От: Dimonka Верблюд  
Дата: 23.06.04 09:44
Оценка:
AE>Как вариант предлагаю автору забыть что у него работа идет с ком портом. Далее предлагаю вариант для винды.

AE>Вешаешь хук (не знаю как, не пробовал) на это программку. Отслеживаешь появление окна с изменением того чего не надо. Сразу его прячешь а в замен отдаешь свое. Соответственно ввод идет к тебе, а ты потом отдашь его скрытому окну и нажмешь кнопку "ОК" в этом окне. А вот собственно в момент передачи (момент Х) — делай что угодно, тут не таймаутов, ничего. Чистое мошенничество. вариант хака, так сказать.


Нормальный вариант. Можно также делать енэйбл / дисейбл для кнопок на время , пока шеф не введёт нужное значение.
С протоколами возится дело неблагодарное.

Ещё один вариант:
Как насчёт обратится к создателям программы с соответствующим запросом об изменениях? Самое разумное на мой взгляд.
Re[4]: Народ, кто шарит в клиент-сервер приложениях, ХЕЛП!!!
От: AlexEagle Украина http://www.vik.oil
Дата: 23.06.04 12:14
Оценка:
Здравствуйте, Dimonka, Вы писали:

D>Ещё один вариант:

D>Как насчёт обратится к создателям программы с соответствующим запросом об изменениях? Самое разумное на мой взгляд.

Тут следующие нюансы, если разработчик ПО "жив":
— Стоимость доработки определяется интересом разработчика к вашей фирме + его "критизной". Обычно — недешево.
— Время доработки определяется интересом разработчика к вашей фирме + его возможностями (е него может быть сейчас куча проектов)

Теперь рассчитываем стоимость дня в ожидании доработки разработчиком этого ПО(Сд):
Сд := стоимость выполения работ / время выполения работ + переговоров.

Могу предположить что шеф согласится вариант доделки разработчиком ПО как минимум если:
1. Стоимость дня в ожидании доработки меньше дневного заработка автора вопроса
2. У автора вопроса куча другой работы
3. Шефу автора вопроса без разницы кто выполнит работу
4. время выполения работ + переговоров меньше недели

Слишком много если Так что с разработчиком ПО — врядли!
Re[3]: Народ, кто шарит в клиент-сервер приложениях, ХЕЛП!!!
От: Jack128  
Дата: 23.06.04 12:28
Оценка:
Здравствуйте, Slavyan_K, Вы писали:

S_K>Я вот вчера подумал подумал и вот до чего додумался, а зачем вообще впринципе перехватывать обращения к портам, если можно просто тупо найти ячейку в памяти где программка держит показания терминала(по принципу какой-нибудь ломалки игрушек), снимать сервером данные с весов отсылать по сетке на клиента и если по сети приходит ноль то заносить это значение в адрес памяти откуда его берет сторонняя программа, если приходит не ноль брать то что приходит и заносить туда же.


S_K>P.S. Тайминг для локальной программы я могу выставить какой угодно(я вообще могу настроить ее как угодно), сейчас стоит 80 секунд!


Ну пожалуйста, делай так, если умеешь. В чем прелесть варианта с 3 портами — это то что те нужно будет написать тривиальнейшую программку, если ты имеешь хоть какой нить опыт работы с устройствами. А тут всякие хаки, лично мне эта тема совершенно не знакома, поэтому я бы выбрал свой вариант. Но, конечно если те легче хакнуть ту прогу, то флаг те в руки..
Re[5]: Народ, кто шарит в клиент-сервер приложениях, ХЕЛП!!!
От: Dimonka Верблюд  
Дата: 23.06.04 12:30
Оценка:
Здравствуйте, AlexEagle, Вы писали:

AE>Тут следующие нюансы, если разработчик ПО "жив":

AE>- Стоимость доработки определяется интересом разработчика к вашей фирме + его "критизной". Обычно — недешево.
AE>- Время доработки определяется интересом разработчика к вашей фирме + его возможностями (е него может быть сейчас куча проектов)

AE>Теперь рассчитываем стоимость дня в ожидании доработки разработчиком этого ПО(Сд):

AE>Сд := стоимость выполения работ / время выполения работ + переговоров.

AE>Могу предположить что шеф согласится вариант доделки разработчиком ПО как минимум если:

AE>1. Стоимость дня в ожидании доработки меньше дневного заработка автора вопроса
AE>2. У автора вопроса куча другой работы
AE>3. Шефу автора вопроса без разницы кто выполнит работу
AE>4. время выполения работ + переговоров меньше недели

AE>Слишком много если Так что с разработчиком ПО — врядли!


Зато есть обратная сторона — при любом изменени / обновлении софта придётся скорее всего менять и эту заплатку.

Есть ещё предложение — патчануть программу, подвязать к ней длл-ку, которая и будет заниматься коммуникацией с шефом. Т.е. при попытке ручного ввода загружается длл-ка и запрашивает шефа. Для такого варианта желательно средненько знать ассемблер.
Re[3]: Народ, кто шарит в клиент-сервер приложениях, ХЕЛП!!!
От: Jack128  
Дата: 24.06.04 18:44
Оценка:
Здравствуйте, Slavyan_K, Вы писали:
S_K>Да уволить то я думаю они не уволят, но для решения этой проблемы наймут стороннего программиста, а я буду плохо смотрется в глазаг коллектива!

Если он решит эту проблему за неделю, то возможно. Но только нарядли такое случится. А если вдруг тот программер даже и сделает за неделю такую прогу, то ему предется отвалить такую сумму, что начальник и сам не рад будет
Re[4]: Народ, кто шарит в клиент-сервер приложениях, ХЕЛП!!!
От: AlexEagle Украина http://www.vik.oil
Дата: 24.06.04 19:02
Оценка:
Здравствуйте, Jack128, Вы писали:

J>Здравствуйте, Slavyan_K, Вы писали:

S_K>>Да уволить то я думаю они не уволят, но для решения этой проблемы наймут стороннего программиста, а я буду плохо смотрется в глазаг коллектива!

J>Если он решит эту проблему за неделю, то возможно. Но только нарядли такое случится. А если вдруг тот программер даже и сделает за неделю такую прогу, то ему предется отвалить такую сумму, что начальник и сам не рад будет


правда бывали шефы которые самым бессовестным образом надували сторонних программистов с деньгами и им это сходило с рук. Редко конечно, но я, увы, знаю конкретные примеры
Re[4]: Народ, кто шарит в клиент-сервер приложениях, ХЕЛП!!!
От: Oleg A. Bachin Украина  
Дата: 26.06.04 13:53
Оценка:
Здравствуйте, Jack128, Вы писали:

J>Здравствуйте, Slavyan_K, Вы писали:


S_K>>Я вот вчера подумал подумал и вот до чего додумался, а зачем вообще впринципе перехватывать обращения к портам, если можно просто тупо найти ячейку в памяти где программка держит показания терминала(по принципу какой-нибудь ломалки игрушек), снимать сервером данные с весов отсылать по сетке на клиента и если по сети приходит ноль то заносить это значение в адрес памяти откуда его берет сторонняя программа, если приходит не ноль брать то что приходит и заносить туда же.


S_K>>P.S. Тайминг для локальной программы я могу выставить какой угодно(я вообще могу настроить ее как угодно), сейчас стоит 80 секунд!


J>Ну пожалуйста, делай так, если умеешь. В чем прелесть варианта с 3 портами — это то что те нужно будет написать тривиальнейшую программку, если ты имеешь хоть какой нить опыт работы с устройствами. А тут всякие хаки, лично мне эта тема совершенно не знакома, поэтому я бы выбрал свой вариант. Но, конечно если те легче хакнуть ту прогу, то флаг те в руки..


зачем весь этот бред с 3-мя портами???
можно ведь написать СВОЙ COM4, на который будет цепляться прога, а он в свою очередь протоколировать и работать сквозняком с COM1.
Best regards,
Oleg A. Bachin
Re: Народ, кто шарит в клиент-сервер приложениях, ХЕЛП!!!
От: Shadow_Of_Templar  
Дата: 28.06.04 05:31
Оценка:
Здравствуйте, Slavyan_K, Вы писали:

S_K>Привет всем! Народ выручайте плиз, начальство поставило задачу и сказало в течении недели ее выполнить! Суть задачи вот в чем:

S_K>Есть машина в сети под управлением Windows 98, к COM портам этой машины подключены два устройства(терминал весовой "ТВ-003/05Д"), эти терминалы опрашивает некая програмка и пишет полученные данные в базу в формате Paradox, есть в этой проге один глюк она позволяет вес вводить вручную(необходимость ручного ввода веса на предприятии существует, но не тогда когда этого хочется весовщикам!). Вот и попросил меня шеф написать приложенице которое будет сидеть резидентом, перехватывать запросы этой програмулины к терминалам, смотреть вес, отправлять вес на локальную прогу и отправлять его же на клиента где-нибудь в сети(клиент будет стоять у шефа), если клиентом вес не меняется то сервер отдает локальной програмке тот вес который показывает терминал, если клиентом вес изменен, то сервер отсылает правильный вес локальной проге и терминалу(у него такая возможность есть).

Привет!
А документация к программе, исходники есть? Если нет, то тебе придется фактически писать новую программу взаимодействия с тем же весовым терминалом, независимо от того что ты с него будешь снимать. Повоторишь то, что уже написано. К тому же может программа уже снимает вес сама, просто не пишет никуда. За неделю это всяко не успеть. Тебе как минимум нужно описание протокола взаимодействия. Без него непонятно что снимать.
P.S. А если не секрет, то что эта программа снимает с весового терминала, если не вес? ЧТо там еще можно регистрировать?
Re[5]: Народ, кто шарит в клиент-сервер приложениях, ХЕЛП!!!
От: AlexEagle Украина http://www.vik.oil
Дата: 29.06.04 07:47
Оценка:
Здравствуйте, Oleg A. Bachin, Вы писали:

OAB>Здравствуйте, Jack128, Вы писали:


J>>Ну пожалуйста, делай так, если умеешь. В чем прелесть варианта с 3 портами — это то что те нужно будет написать тривиальнейшую программку, если ты имеешь хоть какой нить опыт работы с устройствами. А тут всякие хаки, лично мне эта тема совершенно не знакома, поэтому я бы выбрал свой вариант. Но, конечно если те легче хакнуть ту прогу, то флаг те в руки..


OAB>зачем весь этот бред с 3-мя портами???

OAB>можно ведь написать СВОЙ COM4, на который будет цепляться прога, а он в свою очередь протоколировать и работать сквозняком с COM1.

Да вобщем-то затем, что это наверное проще чем писать свой COM4
Re[2]: Народ, кто шарит в клиент-сервер приложениях, ХЕЛП!!!
От: Slicer [Mirkwood] Россия https://ru.linkedin.com/in/maksim-gumerov-039a701b
Дата: 30.06.04 20:16
Оценка:
Здравствуйте, Jack128, Вы писали:
J>о том чтобы за неделю написать такую прогу — можешь забыть. Для перехвата и модификации данных отправленных на порт нужно писать драйвер, ...

А перехватом API точно нельзя обойтись? Этож не StarForce, он не через свой дравер с 0го кольца пишет. Наверняка через WriteFile в конечном итоге. Так что если знать, что именно шлется, можно чегонить замутить

Slicer
Специалист — это варвар, невежество которого не всесторонне :)
Re[2]: Народ, кто шарит в клиент-сервер приложениях, ХЕЛП!!!
От: Slicer [Mirkwood] Россия https://ru.linkedin.com/in/maksim-gumerov-039a701b
Дата: 01.07.04 06:07
Оценка:
S_O>P.S. А если не секрет, то что эта программа снимает с весового терминала, если не вес? ЧТо там еще можно регистрировать?
Штрих-код?

Slicer
Специалист — это варвар, невежество которого не всесторонне :)
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.