Организация соединения удалённой системой

AvasKvas

Well-known member
03.06.2009
78
0
#1
Добрый день!

Есть такое ТЗ (начало):

1. Программа-сервер (далее сервер) должна принимать входящие подключения по протоколу TCP/IP на TCP-порт 3696 (должна быть возможность задать другой порт при необходимости).
2. Инициатором соединения является удаленное устройство.
3. При подключении устройства происходит установления соединения путем приема запроса на установление TCP-соединения и занесения его в динамический пул соединений...


Вопрос,можно ли это реализовать только на Lotus Domino? То есть следить за портом, устанавливать соединения и и в дальнейшем принимать и отправлять запросы, ну и соответственно инфу в БД клала.


Или тут нужно внешнее приложение использовать?Например на java выполненное. Но тогда как сделать чтоб оно на сервере работало и к БД лотуса коннектилось?

Заранее спасибо!
 

VladSh

начинающий
Lotus team
11.12.2009
1 260
5
#2
В "Босс Референте" есть БД "Транспорт", она этим и занимается. Там есть агент на java, который слушает порт, вроде как 4000, но это не важно, оно там жёстко в коде было пробито...
В общем, ищите и найдёте.
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#4
VladSh,
шутник, блин )) Что ты человека посылаешь на БР? :( Это же ком.решение.

AvasKvas,
а domino http не устраивает? Порт по-умолчанию 80, но можно и другой установить, работа по стандартному протоколу, ничего выдумывать не надо, останется написать правильно запросы и сформировать правильные ответы.
Правда, не знаю умеет ли domino держать более одного http на разных портах. Но, если не принципиально разграничивать или есть возможность поднять отдельный сервер для этой задачи, то это наверняка будет удобнее, чем писать свой клиент-сервер. Ну, если задача не в написании своего клиент-сервера, конечно.

А так к домино можно прикрутить java addin (или addon, или как оно там называется). Поищи, например, вот http://www.nsftools.com/tips/JavaTips.htm#javaaddin
Этот аддон будет слушать порт, обрабатывать соединения.
 

hosm

* so what *
18.05.2009
2 442
6
#5
Там есть агент на java, который слушает порт, вроде как 4000, но это не важно, оно там жёстко в коде было пробито...
нет, какой порт слушать-это в БР настраивается давно уже :(
Akupaka расписал правильно, т.е. задача реализуема на лотусе, например, с помощью языка Java.
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 570
263
#6
домина интегрируется в ОС и без неё она какбэ не существует ;)
у ОС есть файрвол, и в "нормальных" случаях никто не мешает им рулить (делая редайрект портов), в т.ч. пущая скрипты из домины...
в линухах:
кладем ключ (авторизация по ключу) для ssh в опред. каталог нотусни и делаем ssh команду (с рутовыми полномочиями) по изменению редайректа, используя настройки из базы
с портом разобрались ;)
что надо делать с соединением - я так и не понял
по поводу адынов и портов...
надо помнить, что не все порты доступны для bind юзеру (под кот. домина пущается), так чта хотеть слушать порт и иметь возможность - не одно и тоже и без ОС это какбэ не решаемо (в общем случае)
не ну если есть желание похачить секурити сервера - то можно :(
как там в винде принято - запускаем с правами админа и херачим всё подряд, делая дыры и рассадник вирусни
 

AvasKvas

Well-known member
03.06.2009
78
0
#7
Спасибо всем!
Значит задача реализуема!Это хорошо.

Я вижу тут два способа - Java и http. Вот только что лучше?!


Может стоит использовать вообще Xpage?
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 570
263
#8
ТЗ настолько странное и абстрактное, что советовать невозможно
 

AvasKvas

Well-known member
03.06.2009
78
0
#9
ТЗ всегда такое.)) Вот полный его вариант:

1. Программа-сервер (далее сервер) должна принимать входящие подключения по протоколу TCP/IP на TCP-порт 3696 (должна быть возможность задать другой порт при необходимости).
2. Инициатором соединения является удаленное устройство.
3. При подключении устройства происходит установления соединения путем приема запроса на установление TCP-соединения и занесения его в динамический пул соединений.
4. Устройство после успешного подключения выдает свой идентификатор в виде @IDxxxxxxx$$$VBATzzzz$$$ где xxxxxxx – идентификатор – семь знаков таблицы ASCII (заранее запрограммированных в устройство), zzzz – 4 знака таблицы ASCII которые являются обозначением переменной типа WORD (MSB-first) и обозначают напряжение батареи устройства, которое вычисляется по формуле 0.6*1023/zzzz(dec).
5. Передача пакетов к устройству имеет формат $BFxxyy&zz&zz…&zz где xx – количество передаваемых байт в формате текстового представления BYTE, yy – количество ожидаемых байт ответа от конечного устройства в формате текстового представления BYTE, &zz – байт данных с разделителем ”&” в формате текстового представления BYTE (например $BF0305&FF&05&A3 – пакет с 3-мя байтами данных FF05A3 и ожидание 5 байт ответа).
6. Ответ от устройства имеет формат $RFxx&zz где xx - количество передаваемых байт в формате текстового представления BYTE, &zz – байт данных с разделителем ”&” в формате текстового представления BYTE
7. Динамический пул соединений должен содержать информацию о подключенном устройстве (идентификатор), напряжение батареи на момент подключения, IP-адрес удаленного устройства, состояние обмена данными (подключение/передача запроса xx (запросов много – хх номер запроса)/ожидание ответа xx/разбор пакета/простой (idle)). Также должна быть возможность отслеживания соединений и ведение журнала соединений.



Там внешнее устройство,которое по протоколу TCP/IP на TCP-порт 3696 конектится с компом. ну и некоторые данные нужно в БД заносить
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 570
263
#10
хттп не подойдёт по причине незнания устройством ёваного :(, т.к. обмен происходит двухсторонний
не понятно, также, слово пул - явно архитектор передирал чужой конспект ;)
короче - java
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#11
не понятно, также, слово пул
Похоже, имелось в виду, что сервер должен обрабатывать несколько одновременных подключений.
хттп и вправду не подойдет. Тут нужен свой сервер. Причем, как я понял, под существующий клиент.
Остается вопрос, а зачем сюда приплетать домино? Для сбора данных? Вполне возможно реализовать данную задачу на чем-то бесплатном.
Или заказчик хочет видеть инфу в своем домино-приложении?
 

AvasKvas

Well-known member
03.06.2009
78
0
#12
Да ппохоже все таки java. Как я понял можно запустить java задачу на сервере. Буду разбираться как!

Может кто направит меня поконкретней!
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#13
Может кто направит меня поконкретней!
Ну дык, выше написано было про domino java add-in, надо искать инфу по этим кодовым словам
даже ссылка была на какой-то пример, и вообще на том сайте много интересного :(
 

VladSh

начинающий
Lotus team
11.12.2009
1 260
5
#15
шутник, блин )) Что ты человека посылаешь на БР? ;) Это же ком.решение.
И что с того, что коммерческое? Может и патент на идею есть? :(
Я просто указал, что решение возможно и указал пример. Если посмотреть пример кода, то от БоссРеферента от этого не убудет.
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#16
Так надо было сразу давать контакты ведущего конструктора в Босс-Референте, чтобы можно было официально спросить :(
Ну или дать код самому... что есть несколько неэтично ;)
К стати, я вот и не помню, но КМК код сервера транспорта (аддина) был отдельно от баз БРа.
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 570
263
#17
нужно учесть, что адын (по ссылке) не отслеживает свои копии, что нужно организовать отдельный поток на прослушку порта, и считывание символов из него
вот пример реализации типа telnet http://www.java2s.com/Code/Java/Network-Pr...elnetClient.htm
это клиентская часть, кот. шлёт "команды" и читает ответ

др. словами - надо уметь работать с мультитредовыми приложениями и обрабатывать соединения

Добавлено: вот пример клиентской и серверной части
http://www.java2s.com/Code/Java/Network-Pr...totheclient.htm
там идет обмен объектом...
но делается всё в одной нити, а с адыном надо вынести в отдельную нить
и обмениваться (как я понял) бинарными данными
 

VladSh

начинающий
Lotus team
11.12.2009
1 260
5
#18
Так надо было сразу давать контакты ведущего конструктора в Босс-Референте, чтобы можно было официально спросить :)
Это имеет какой-то смысл? :)
Если тебе "надо было", так давай, мне не надо было.
P.S. Правильнее сделал lmike, дав ссылки. И безо всяких "контактов ведущего конструктора".
 

Eremenko

New member
01.10.2009
1
0
#20
Добрый день!

Есть такое ТЗ (начало):

1. Программа-сервер (далее сервер) должна принимать входящие подключения по протоколу TCP/IP на TCP-порт 3696 (должна быть возможность задать другой порт при необходимости).
2. Инициатором соединения является удаленное устройство.
3. При подключении устройства происходит установления соединения путем приема запроса на установление TCP-соединения и занесения его в динамический пул соединений...


Вопрос,можно ли это реализовать только на Lotus Domino? То есть следить за портом, устанавливать соединения и и в дальнейшем принимать и отправлять запросы, ну и соответственно инфу в БД клала.


Или тут нужно внешнее приложение использовать?Например на java выполненное. Но тогда как сделать чтоб оно на сервере работало и к БД лотуса коннектилось?

Заранее спасибо!
В босс референт это реализовано сервлетом, он стартует одновременно с хттп и слушает порт